1 #ifndef GENESIS_UTILS_IO_INPUT_SOURCE_H_
2 #define GENESIS_UTILS_IO_INPUT_SOURCE_H_
80 size_t read(
char* buffer,
size_t size )
83 return read_( buffer, size );
92 return source_name_();
101 virtual size_t read_(
char* buffer,
size_t size ) = 0;
103 virtual std::string source_name_()
const = 0;
143 : in_str_( str.c_str() )
144 , cursor_( str.c_str() )
145 , in_size_( str.size() )
146 , rest_size_( str.size() )
168 rest_size_ = in_size_;
180 size_t read_(
char* buffer,
size_t size )
override
183 if( size > rest_size_ ) {
188 std::memcpy( buffer, cursor_, size );
197 std::string source_name_()
const override
199 return "input string";
260 size_t read_(
char* buffer,
size_t size )
override
262 in_.read( buffer, size );
269 std::string source_name_()
const override
271 return "input stream";
305 : file_name_( file_name )
308 throw std::runtime_error(
"File does not exists: " + file_name );
311 file_ = std::fopen( file_name.c_str(),
"rb" );
313 if( file_ ==
nullptr ) {
315 throw std::runtime_error(
"Cannot open file: " + file_name );
319 std::setvbuf( file_, 0, _IONBF, 0 );
328 , file_name_( file_name )
331 std::setvbuf( file_, 0, _IONBF, 0 );
342 std::fclose( file_ );
354 std::rewind( file_ );
366 size_t read_(
char* buffer,
size_t size )
override
368 return std::fread( buffer, 1, size, file_ );
374 std::string source_name_()
const override
376 return "input file " + file_name_;
384 std::string file_name_;
390 #endif // include guard
bool file_exists(std::string const &filename)
Return true iff the file exists.
Provides functions for accessing the file system.