this is the interface class from which all other data transfer classes inherit
More...
|
| generic_file (gf_mode m) |
| main constructor
|
|
| generic_file (const generic_file &ref) |
| copy constructor
|
|
| generic_file (generic_file &&ref) noexcept |
| move constructor
|
|
generic_file & | operator= (const generic_file &ref) |
| assignment operator
|
|
generic_file & | operator= (generic_file &&ref) noexcept |
| move operator
|
|
| ~generic_file () noexcept(false) |
| virtual destructor, More...
|
|
void | terminate () |
| destructor-like call, except that it is allowed to throw exceptions
|
|
bool | operator== (generic_file &ref) |
|
bool | operator!= (generic_file &ref) |
|
gf_mode | get_mode () const |
| retreive the openning mode for this object
|
|
void | read_ahead (const infinint &amount) |
|
void | ignore_read_ahead (bool mode) |
|
virtual U_I | read (char *a, U_I size) override |
| read data from the generic_file inherited from proto_generic_file
|
|
virtual void | write (const char *a, U_I size) override |
| write data to the generic_file inherited from proto_generic_file
|
|
void | write (const std::string &arg) |
| write a string to the generic_file More...
|
|
S_I | read_back (char &a) |
| skip back one char, read on char and skip back one char
|
|
S_I | read_forward (char &a) |
| read one char
|
|
virtual bool | skippable (skippability direction, const infinint &amount)=0 |
| whether the implementation is able to skip More...
|
|
virtual bool | skip (const infinint &pos)=0 |
| skip at the absolute position More...
|
|
virtual bool | skip_to_eof ()=0 |
| skip to the end of file
|
|
virtual bool | skip_relative (S_I x)=0 |
| skip relatively to the current position
|
|
virtual infinint | get_position () const =0 |
| get the current read/write position
|
|
virtual void | copy_to (generic_file &ref) |
| copy all data from current position to the object in argument
|
|
virtual void | copy_to (generic_file &ref, const infinint &crc_size, crc *&value) |
| copy all data from the current position to the object in argument and computes a CRC value of the transmitted data More...
|
|
U_32 | copy_to (generic_file &ref, U_32 size) |
| small copy (up to 4GB) with CRC calculation
|
|
infinint | copy_to (generic_file &ref, infinint size) |
| copy the given amount to the object in argument
|
|
bool | diff (generic_file &f, const infinint &me_read_ahead, const infinint &you_read_ahead, const infinint &crc_size, crc *&value) |
| compares the contents with the object in argument More...
|
|
bool | diff (generic_file &f, const infinint &me_read_ahead, const infinint &you_read_ahead, const infinint &crc_size, crc *&value, infinint &err_offset) |
|
void | reset_crc (const infinint &width) |
| reset CRC on read or writen data More...
|
|
bool | crc_status () const |
| to known whether CRC calculation is activated or not
|
|
crc * | get_crc () |
| get CRC of the transfered date since last reset More...
|
|
void | sync_write () |
| write any pending data
|
|
void | flush_read () |
| be ready to read at current position, reseting all pending data for reading, cached and in compression engine for example
|
|
| proto_generic_file (const proto_generic_file &ref)=default |
| copy constructor
|
|
| proto_generic_file (proto_generic_file &&ref) noexcept=default |
| move constructor
|
|
proto_generic_file & | operator= (const proto_generic_file &ref)=default |
| assignment operator
|
|
proto_generic_file & | operator= (proto_generic_file &&ref) noexcept=default |
| move operator
|
|
virtual | ~proto_generic_file () noexcept(false) |
| virtual destructor More...
|
|
this is the interface class from which all other data transfer classes inherit
it provides mainly read and write operations, skip operations and few other functions.
- Note
- the read and write method are similar to the read and write system calls except that they never return negative values, but throw exception instead. returning zero means end of generic_file. The call is blocked if no data is available for reading. write returns the number of bytes written, and never make partial writtings. Thus, it is blocked until all bytes are written or occures an exception inconsequences the returned value is always the value of the argument "size".
Definition at line 76 of file generic_file.hpp.
virtual void libdar::generic_file::inherited_flush_read |
( |
| ) |
|
|
protectedpure virtual |
reset internal engine, flush caches in order to read the data at current position
- Note
- when the object relies on external object or system object to fetch the data from for reading, when a call to (inherited_)flush_read() occurs, the current object must not assume that any previously read data is still valid if it has internal buffers or the like and it should flush them asap. This call must not propagate the flush_read to any other gneric_file object it could rely on
Implemented in libdar::sar, libdar::pile, libdar::tronconneuse, libdar::trivial_sar, libdar::fichier_local, libdar::generic_rsync, libdar::hash_fichier, libdar::tronc, libdar::cache_global, libdar::zapette, libdar::tuyau, libdar::generic_thread, libdar::generic_to_global_file, libdar::null_file, libdar::compressor, libdar::cache, libdar::memory_file, and libdar::scrambler.
virtual U_I libdar::generic_file::inherited_read |
( |
char * |
a, |
|
|
U_I |
size |
|
) |
| |
|
protectedpure virtual |
implementation of read() operation
- Parameters
-
[in,out] | a | where to put the data to read |
[in] | size | says how much data to read |
- Returns
- the exact amount of data read and put into 'a'
- Note
- read as much byte as requested, up to end of file stays blocked if not enough data is available and EOF not yet met. May return less data than requested only if EOF as been reached. in other worlds, EOF is reached when returned data is stricly less than the requested data Any problem shall be reported by throwing an exception.
Implemented in libdar::sar, libdar::pile, libdar::fichier_global, libdar::trivial_sar, libdar::tronconneuse, libdar::generic_rsync, libdar::tronc, libdar::zapette, libdar::tuyau, libdar::generic_thread, libdar::compressor, libdar::cache, libdar::memory_file, libdar::null_file, and libdar::scrambler.
virtual void libdar::generic_file::inherited_read_ahead |
( |
const infinint & |
amount | ) |
|
|
protectedpure virtual |
tells the object that several calls to read() will follow to probably obtain at least the given amount of data
- Parameters
-
[in] | amount | is the maximum expected amount of data that is known to be read |
- Note
- this call may be implemented as a do-nothing call, its presence is only to allow optimization when possible, like in multi-threaded environment
Implemented in libdar::sar, libdar::pile, libdar::trivial_sar, libdar::tronconneuse, libdar::fichier_local, libdar::generic_rsync, libdar::hash_fichier, libdar::cache_global, libdar::tronc, libdar::zapette, libdar::tuyau, libdar::generic_to_global_file, libdar::generic_thread, libdar::compressor, libdar::cache, libdar::memory_file, libdar::null_file, and libdar::scrambler.
virtual bool libdar::generic_file::skip |
( |
const infinint & |
pos | ) |
|
|
pure virtual |
skip at the absolute position
- Parameters
-
[in] | pos | the offset in byte where next read/write operation must start |
- Returns
- true if operation was successfull and false if the requested position is not valid (after end of file)
- Note
- if requested position is not valid the reading/writing cursor must be set to the closest valid position
Implemented in libdar::sar, libdar::pile, libdar::trivial_sar, libdar::generic_rsync, libdar::fichier_local, libdar::hash_fichier, libdar::tronconneuse, libdar::tuyau, libdar::cache_global, libdar::tronc, libdar::generic_thread, libdar::zapette, libdar::compressor, libdar::cache, libdar::generic_to_global_file, libdar::memory_file, libdar::null_file, and libdar::scrambler.
Referenced by libdar::generic_to_global_file::skip(), and libdar::compressor::skip().