Disk ARchive 2.7.16
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 More... | |
generic_file (const generic_file &ref) | |
copy constructor More... | |
generic_file (generic_file &&ref) noexcept | |
move constructor More... | |
generic_file & | operator= (const generic_file &ref) |
assignment operator More... | |
generic_file & | operator= (generic_file &&ref) noexcept |
move operator More... | |
~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 More... | |
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 More... | |
virtual void | write (const char *a, U_I size) override |
write data to the generic_file inherited from proto_generic_file More... | |
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 More... | |
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 More... | |
virtual bool | skip_relative (S_I x)=0 |
skip relatively to the current position More... | |
virtual bool | truncatable (const infinint &pos) const =0 |
whether the implementation is able to truncate to the given position More... | |
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 More... | |
virtual void | copy_to (generic_file &ref) |
copy all data from current position to the object in argument More... | |
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 More... | |
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... | |
virtual U_I | read (char *a, U_I size)=0 |
read data from the proto_generic_file More... | |
virtual void | write (const char *a, U_I size)=0 |
write data to the proto_generic_file 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.
enum libdar::generic_file::skippability |
Definition at line 143 of file generic_file.hpp.
|
inline |
main constructor
Definition at line 80 of file generic_file.hpp.
|
inline |
copy constructor
Definition at line 83 of file generic_file.hpp.
|
inlinenoexcept |
move constructor
Definition at line 86 of file generic_file.hpp.
|
inlinenoexcept |
virtual destructor,
Definition at line 97 of file generic_file.hpp.
|
virtual |
copy all data from current position to the object in argument
Reimplemented in libdar::pile.
|
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.
|
inline |
to known whether CRC calculation is activated or not
Definition at line 248 of file generic_file.hpp.
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 |
retreive the openning mode for this object
Definition at line 109 of file generic_file.hpp.
Referenced by libdar::hash_fichier::skip_to_eof().
|
pure virtual |
get the current read/write position
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
Referenced by libdar::compressor_zstd::get_position(), libdar::generic_rsync::get_position(), libdar::generic_to_global_file::get_position(), libdar::generic_to_global_file::get_size(), and libdar::hash_fichier::skip().
|
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::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
|
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::cache, libdar::compressor, libdar::compressor_zstd, libdar::fichier_global, libdar::generic_rsync, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, and libdar::zapette.
|
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::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
|
protectedpure virtual |
write down any pending data
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
|
protectedpure virtual |
destructor-like call, except that it is allowed to throw exceptions
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
|
protectedpure virtual |
truncate file at the give offset
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
|
protectedpure virtual |
implementation of the write() operation
[in] | a | what data to write |
[in] | size | amount of data to write |
Implemented in libdar::null_file, libdar::cache, libdar::compressor, libdar::compressor_zstd, libdar::fichier_global, libdar::generic_rsync, libdar::memory_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, and libdar::zapette.
|
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().
|
inlineprivatenoexcept |
Definition at line 342 of file generic_file.hpp.
|
inline |
Definition at line 106 of file generic_file.hpp.
|
inline |
assignment operator
Definition at line 89 of file generic_file.hpp.
|
inlinenoexcept |
move operator
Definition at line 92 of file generic_file.hpp.
bool libdar::generic_file::operator== | ( | generic_file & | ref | ) |
compaire the object content (implies skipping and reading)
|
overridevirtual |
read data from the generic_file inherited from proto_generic_file
Implements libdar::proto_generic_file.
Referenced by libdar::cache_global::fichier_global_inherited_read(), libdar::generic_to_global_file::fichier_global_inherited_read(), and line_tools_split_in_words().
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().
|
inline |
read one char
Definition at line 140 of file generic_file.hpp.
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 |
|
inlineprotected |
Definition at line 265 of file generic_file.hpp.
|
pure virtual |
skip at the absolute position
[in] | pos | the offset in byte where next read/write operation must start |
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
Referenced by libdar::compressor::skip(), libdar::compressor_zstd::skip(), and libdar::generic_to_global_file::skip().
|
pure virtual |
skip relatively to the current position
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau_global, and libdar::zapette.
Referenced by libdar::compressor::skip_relative(), libdar::compressor_zstd::skip_relative(), and libdar::generic_to_global_file::skip_relative().
|
pure virtual |
skip to the end of file
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
Referenced by libdar::compressor::skip_to_eof(), libdar::compressor_zstd::skip_to_eof(), and libdar::generic_to_global_file::skip_to_eof().
|
pure virtual |
whether the implementation is able to skip
Implemented in libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::pile, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
Referenced by libdar::compressor::skippable(), libdar::compressor_zstd::skippable(), libdar::generic_to_global_file::skippable(), libdar::trivial_sar::skippable(), and libdar::tuyau_global::skippable().
|
pure virtual |
whether the implementation is able to truncate to the given position
Implemented in libdar::pile, libdar::cache, libdar::cache_global, libdar::compressor, libdar::compressor_zstd, libdar::fichier_local, libdar::generic_rsync, libdar::generic_to_global_file, libdar::hash_fichier, libdar::memory_file, libdar::null_file, libdar::parallel_tronconneuse, libdar::sar, libdar::scrambler, libdar::trivial_sar, libdar::tronc, libdar::tronconneuse, libdar::tuyau, libdar::tuyau_global, and libdar::zapette.
Referenced by libdar::compressor::truncatable(), libdar::compressor_zstd::truncatable(), libdar::generic_to_global_file::truncatable(), libdar::trivial_sar::truncatable(), libdar::tronc::truncatable(), and libdar::tuyau_global::truncatable().
|
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().
|
overridevirtual |
write data to the generic_file inherited from proto_generic_file
Implements libdar::proto_generic_file.
Referenced by libdar::cache_global::fichier_global_inherited_write(), libdar::generic_to_global_file::fichier_global_inherited_write(), and line_tools_split_in_words().
void libdar::generic_file::write | ( | const std::string & | arg | ) |
write a string to the generic_file
|
private |
Definition at line 334 of file generic_file.hpp.
|
private |
Definition at line 335 of file generic_file.hpp.
|
private |
Definition at line 331 of file generic_file.hpp.
|
private |
Definition at line 333 of file generic_file.hpp.
|
private |
Definition at line 330 of file generic_file.hpp.
|
private |
Definition at line 332 of file generic_file.hpp.