Disk ARchive
2.7.15
Full featured and portable backup and archiving tool
|
this is the interface class from which all other data transfer classes inherit More...
#include <generic_file.hpp>
Public Types | |
enum | skippability { skip_backward , skip_forward } |
Public Member Functions | |
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 bool | truncatable (const infinint &pos) const =0 |
whether the implementation is able to truncate to the given position | |
virtual void | truncate (const infinint &pos) |
truncate file at the given offset More... | |
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 | |
Public Member Functions inherited from libdar::proto_generic_file | |
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... | |
Protected Member Functions | |
void | set_mode (gf_mode x) |
virtual void | inherited_read_ahead (const infinint &amount)=0 |
tells the object that several calls to read() will follow to probably obtain at least the given amount of data More... | |
virtual U_I | inherited_read (char *a, U_I size)=0 |
implementation of read() operation More... | |
virtual void | inherited_write (const char *a, U_I size)=0 |
implementation of the write() operation More... | |
virtual void | inherited_truncate (const infinint &pos)=0 |
truncate file at the give offset More... | |
virtual void | inherited_sync_write ()=0 |
write down any pending data More... | |
virtual void | inherited_flush_read ()=0 |
reset internal engine, flush caches in order to read the data at current position More... | |
virtual void | inherited_terminate ()=0 |
destructor-like call, except that it is allowed to throw exceptions More... | |
bool | is_terminated () const |
Private Member Functions | |
void | enable_crc (bool mode) |
U_I | read_crc (char *a, U_I size) |
void | write_crc (const char *a, U_I size) |
void | destroy () |
void | nullifyptr () noexcept |
void | copy_from (const generic_file &ref) |
void | move_from (generic_file &&ref) noexcept |
Private Attributes | |
gf_mode | rw |
crc * | checksum |
bool | terminated |
bool | no_read_ahead |
U_I(generic_file::* | active_read )(char *a, U_I size) |
void(generic_file::* | active_write )(const char *a, U_I size) |
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.
Definition at line 76 of file generic_file.hpp.
|
inlinenoexcept |
virtual destructor,
Definition at line 97 of file generic_file.hpp.
|
virtual |
copy all data from the current position to the object in argument and computes a CRC value of the transmitted data
[in] | ref | defines where to copy the data to |
[in] | crc_size | tell the width of the crc to compute on the copied data |
[out] | value | points to a newly allocated crc object containing the crc value |
Reimplemented in libdar::pile.
bool libdar::generic_file::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
[in] | f | is the file to compare the current object with |
[in] | me_read_ahead | is the amount of data to read ahead from "*this" (0 for no limit, up to end of eof) |
[in] | you_read_ahead | is the amount of data to read ahead from f (0 for no limit, up to end of file |
[in] | crc_size | is the width of the CRC to use for calculation |
[out] | value | is the computed checksum, its value can be used for additional testing if this method returns false (no difference between files). The given checksum has to be set to the expected width by the caller. |
bool libdar::generic_file::diff | ( | generic_file & | f, |
const infinint & | me_read_ahead, | ||
const infinint & | you_read_ahead, | ||
const infinint & | crc_size, | ||
crc *& | value, | ||
infinint & | err_offset | ||
) |
compare the contents with the object in argument, also providing the offset of the first difference met
[in] | f | is the file to compare the current object with |
[in] | me_read_ahead | is the amount of data to read ahead from "*this" (0 for no limit, up to end of eof) |
[in] | you_read_ahead | is the amount of data to read ahead from f (0 for no limit, up to end of file |
[in] | crc_size | is the width of the CRC to use for calculation |
[out] | value | is the computed checksum, its value can be used for additional |
[out] | err_offset | in case of difference, holds the offset of the first difference met testing if this method returns false (no difference between files). The given checksum has to be set to the expected width by the caller. |
crc* libdar::generic_file::get_crc | ( | ) |
get CRC of the transfered date since last reset
|
inline |
ignore read ahead requests
[in] | mode | if set to true read_ahead requests are ignored: inherited_read_ahead() of the inherited class is not called |
Definition at line 123 of file generic_file.hpp.
|
protectedpure virtual |
reset internal engine, flush caches in order to read the data at current position
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
|
protectedpure virtual |
implementation of read() operation
[in,out] | a | where to put the data to read |
[in] | size | says how much data to read |
Implemented in libdar::zapette, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::generic_rsync, libdar::fichier_global, libdar::compressor_zstd, libdar::compressor, and libdar::cache.
|
protectedpure virtual |
tells the object that several calls to read() will follow to probably obtain at least the given amount of data
[in] | amount | is the maximum expected amount of data that is known to be read |
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
|
protectedpure virtual |
write down any pending data
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
|
protectedpure virtual |
destructor-like call, except that it is allowed to throw exceptions
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
|
protectedpure virtual |
truncate file at the give offset
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
|
protectedpure virtual |
implementation of the write() operation
[in] | a | what data to write |
[in] | size | amount of data to write |
Implemented in libdar::zapette, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::memory_file, libdar::generic_rsync, libdar::fichier_global, libdar::compressor_zstd, libdar::compressor, libdar::cache, and libdar::null_file.
|
inlineprotected |
is some specific call (skip() & Co.) need to be forbidden when the object has been terminated, one can use this call to check the terminated status
Definition at line 327 of file generic_file.hpp.
Referenced by libdar::memory_file::get_position(), libdar::parallel_tronconneuse::get_position(), libdar::tronconneuse::get_position(), libdar::zapette::get_position(), libdar::trivial_sar::skip_to_eof(), libdar::zapette::skip_to_eof(), libdar::parallel_tronconneuse::write_end_of_file(), and libdar::tronconneuse::write_end_of_file().
bool libdar::generic_file::operator== | ( | generic_file & | ref | ) |
compaire the object content (implies skipping and reading)
void libdar::generic_file::read_ahead | ( | const infinint & | amount | ) |
read ahead information
[in] | amount | is the expected amount of data the caller will read, if zero is given the object shall prepare as much as possible data for reading until a skip request, write request or a new read_ahead request |
Referenced by libdar::cache_global::inherited_read_ahead(), libdar::compressor::inherited_read_ahead(), libdar::compressor_zstd::inherited_read_ahead(), libdar::hash_fichier::inherited_read_ahead(), libdar::trivial_sar::inherited_read_ahead(), and libdar::tuyau_global::inherited_read_ahead().
void libdar::generic_file::reset_crc | ( | const infinint & | width | ) |
reset CRC on read or writen data
[in] | width | is the width to use for the CRC |
|
pure virtual |
skip at the absolute position
[in] | pos | the offset in byte where next read/write operation must start |
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
Referenced by libdar::compressor::skip(), libdar::compressor_zstd::skip(), and libdar::generic_to_global_file::skip().
|
pure virtual |
whether the implementation is able to skip
Implemented in libdar::zapette, libdar::tuyau_global, libdar::tuyau, libdar::tronconneuse, libdar::tronc, libdar::trivial_sar, libdar::scrambler, libdar::sar, libdar::pile, libdar::parallel_tronconneuse, libdar::null_file, libdar::memory_file, libdar::hash_fichier, libdar::generic_to_global_file, libdar::generic_rsync, libdar::fichier_local, libdar::compressor_zstd, libdar::compressor, libdar::cache_global, and libdar::cache.
Referenced by libdar::compressor::skippable(), libdar::compressor_zstd::skippable(), libdar::generic_to_global_file::skippable(), libdar::trivial_sar::skippable(), and libdar::tuyau_global::skippable().
|
virtual |
truncate file at the given offset
[in] | pos | is the offset of the where to cut the file, in other word the pos - 1 will be the last byte of the file (if its size is greater than 1). If pos is greater than EOF the implementation should not enlarge the file and may even no skip the file to its current eof. Though this request is not considered an error implementation can thus do nothing when asked to truncate after EOF. |
Referenced by libdar::cache_global::inherited_truncate(), libdar::generic_to_global_file::inherited_truncate(), libdar::trivial_sar::inherited_truncate(), and libdar::tuyau_global::inherited_truncate().
void libdar::generic_file::write | ( | const std::string & | arg | ) |
write a string to the generic_file