STIR 6.4.0
utilities.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2000 PARAPET partners
3 Copyright (C) 2000-2010, Hammersmith Imanet Ltd
4 This file is part of STIR.
5
6 SPDX-License-Identifier: Apache-2.0 AND License-ref-PARAPET-license
7
8 See STIR/LICENSE.txt for details
9*/
10#ifndef __stir_UTILITIES_H__
11#define __stir_UTILITIES_H__
20#include "stir/common.h"
21#include <stdio.h>
22#include <iostream>
23#include <string>
24
25START_NAMESPACE_STIR
26
27/******************************************************/
32
33template <class NUMBER>
34inline NUMBER ask_num(const std::string& prompt, NUMBER minimum_value, NUMBER maximum_value, NUMBER default_value);
35
37std::string ask_string(const std::string& prompt, const std::string& default_value = "");
38
54bool ask(const std::string& prompt, bool default_value);
55
56/***** filename functions ****/
57
74char* ask_filename_with_extension(char* file_in_directory_name, const std::string& prompt, const std::string& default_extension);
75
87std::string ask_filename_with_extension(const std::string& prompt, const std::string& default_extension);
88
102// Implementation note: gcc 2.8.1 seems to have problems with default
103// values when templates are around, so I overload the function
104template <class FSTREAM>
105void ask_filename_and_open(
106 FSTREAM& s, const std::string& prompt, const std::string& default_extension, std::ios::openmode mode, bool abort_if_failed);
107
109template <class FSTREAM>
110void inline ask_filename_and_open(FSTREAM& s,
111 const std::string& prompt,
112 const std::string& default_extension,
113 std::ios::openmode mode)
114{
115 ask_filename_and_open(s, prompt, default_extension, mode, true);
116}
117
119
120/******************************************************/
125
136void* read_stream_in_memory(std::istream& input, std::streamsize& file_size);
137
145std::streamsize find_remaining_size(std::istream& input);
146
148
149template <class IFSTREAM>
150inline IFSTREAM& open_read_binary(IFSTREAM& s, const std::string& name);
152
153FILE*& open_read_binary(FILE*& fptr, const std::string& name);
154
156
160template <class OFSTREAM>
161inline OFSTREAM& open_write_binary(OFSTREAM& s, const std::string& name);
163
164FILE*& open_write_binary(FILE*& fptr, const std::string& name);
165
167
173template <class FSTREAM>
174inline void close_file(FSTREAM& s);
175
177
181void close_file(FILE*& fptr);
182
184
191const int max_filename_length = 1000;
192
193/******************************************************/
203
205
213extern const char* find_filename(const char* const filename_with_directory);
214
216
221std::string::size_type find_pos_of_filename(const std::string& filename_with_directory);
222
224
228std::string get_filename(const std::string& filename_with_directory);
229
240char* get_directory_name(char* directory_name, const char* const filename_with_directory);
241
243
250std::string get_directory_name(const std::string& filename_with_directory);
251
257extern bool is_absolute_pathname(const std::string& filename_with_directory);
258
264extern bool is_absolute_pathname(const char* const filename_with_directory);
265
277extern char* prepend_directory_name(char* filename_with_directory, const char* const directory_name);
278
280
284std::string::size_type find_pos_of_extension(const std::string& file_in_directory_name);
285#if 0
286// terribly dangerous for memory overrun.
287
304extern char *
305add_extension(char * file_in_directory_name,
306 const char * const extension);
307#endif
308
310std::string& add_extension(std::string& file_in_directory_name, const std::string& extension);
311
312#if 0
313// disabled because possible memory overrun
314
331extern char *
332replace_extension(char *file_in_directory_name,
333 const char * const extension);
334#endif
335
337std::string& replace_extension(std::string& file_in_directory_name, const std::string& extension);
338
340
341/**********************************************************************
342 C-string manipulation function
343***********************************************************************/
344#ifndef _MSC_VER
345
347
349inline char* strupr(char* const str);
350#else
351# define strupr _strupr
352#endif
353
354END_NAMESPACE_STIR
355
356#include "stir/utilities.inl"
357
358#endif // __UTILITIES_H__
basic configuration include file
void close_file(FILE *&fptr)
closes a FILE without error checking.
Definition utilities.cxx:101
FILE *& open_write_binary(FILE *&fptr, const string &name)
opens a FILE for writing binary data. Calls error() when it does not succeed.
Definition utilities.cxx:90
streamsize find_remaining_size(istream &input)
Find number of remaining characters in the stream.
Definition utilities.cxx:379
const int max_filename_length
some large value to say how long filenames can be in the (deprecated) function ask_filename_with_exte...
Definition utilities.h:191
FILE *& open_read_binary(FILE *&fptr, const string &name)
opens a FILE for reading binary data. Calls error() when it does not succeed.
Definition utilities.cxx:79
char * strupr(char *const str)
make C-string uppercase
Definition utilities.inl:95
const char * find_filename(const char *const filename_with_directory)
return a pointer to the start of the filename (i.e. after directory specifications)
Definition utilities.cxx:108
char * prepend_directory_name(char *filename_with_directory, const char *const directory_name)
Prepend directory_name to the filename, but only if !is_absolute_pathname(filename_with_directory)
Definition utilities.cxx:285
char * get_directory_name(char *directory_name, const char *const filename_with_directory)
Copies the directory part from 'filename_with_directory' into 'directory_name' and returns the 'direc...
Definition utilities.cxx:167
string::size_type find_pos_of_filename(const string &filename_with_directory)
return the position of the start of the filename (i.e. after directory specifications)
Definition utilities.cxx:135
string & add_extension(string &file_in_directory_name, const string &extension)
Append extension if none present.
Definition utilities.cxx:209
string ask_filename_with_extension(const string &prompt, const string &default_extension)
Asks for a filename (appending an extension if none is provided).
Definition utilities.cxx:332
string & replace_extension(string &file_in_directory_name, const string &extension)
Replace extension (or append if none present)
Definition utilities.cxx:236
string ask_string(const string &str, const string &default_value)
A function to ask a string from the user.
Definition utilities.cxx:67
string get_filename(const string &filename_with_directory)
return a std::string containing only the filename (i.e. after directory specifications)
Definition utilities.cxx:161
bool ask(const string &str, bool default_value)
A function to ask a yes/no question from the user.
Definition utilities.cxx:41
string::size_type find_pos_of_extension(const string &file_in_directory_name)
find the position of the '.' of the extension
Definition utilities.cxx:185
bool is_absolute_pathname(const char *const filename_with_directory)
Checks if the filename points to an absolute location, or is a relative (e.g. to current directory) p...
Definition utilities.cxx:247
NUMBER ask_num(const std::string &prompt, NUMBER minimum_value, NUMBER maximum_value, NUMBER default_value)
A function to ask a number from the user.
Definition utilities.inl:33
inline implementations for utility.h