![]() |
Disk ARchive 2.7.16
Full featured and portable backup and archiving tool
|
stores a stack of generic_files writing/reading on each others More...
#include <pile.hpp>
Public Member Functions | |
pile () | |
the constructor | |
pile (const pile &ref)=delete | |
pile (pile &&ref) noexcept=delete | |
pile & | operator= (const pile &ref)=delete |
pile & | operator= (pile &&ref) noexcept=delete |
void | push (generic_file *f, const std::string &label="", bool extend_mode=false) |
add a generic_file on the top | |
generic_file * | pop () |
remove the top generic_file from the top | |
template<class T> | |
bool | pop_and_close_if_type_is (T *ptr) |
remove the top generic_file and destroy it | |
generic_file * | top () const |
returns the address of the top generic_file | |
generic_file * | bottom () const |
returns the address of the bottom generic_file | |
U_I | size () const |
returns the number of objects in the stack | |
bool | is_empty () const |
returns true if the stack is empty, false otherwise. | |
void | clear () |
clears the stack | |
template<class T> | |
void | find_first_from_top (T *&ref) const |
this template let the class user find out the higher object on the stack of the given type | |
template<class T> | |
void | find_first_from_bottom (T *&ref) const |
this template is similar to the template "find_first_from_top" except that the search is started from the bottom of the stack | |
generic_file * | get_below (const generic_file *ref) |
return the generic_file object just below the given object or nullptr if the object is at the bottom of the stack or is not in the stack | |
generic_file * | get_above (const generic_file *ref) |
return the generic_file object just above the given object or nullptr if the object is at the bottom of the stack or is not in the stack | |
generic_file * | get_by_label (const std::string &label) |
find the object associated to a given label | |
void | clear_label (const std::string &label) |
if label is associated to a member of the stack, makes this member of the stack an anoymous member (the label is no more associated to this object, while this object stays in the stack untouched | |
void | add_label (const std::string &label) |
associate a additional label to the object currently at the top of the stack | |
void | sync_write_above (generic_file *ptr) |
call the generic_file::sync_write() method of all object found above ptr in the stack | |
void | flush_read_above (generic_file *ptr) |
call the generic_file::flush_read() method of all objects found above ptr in the stack | |
virtual bool | skippable (skippability direction, const infinint &amount) override |
whether the implementation is able to skip | |
virtual bool | skip (const infinint &pos) override |
skip at the absolute position | |
virtual bool | skip_to_eof () override |
skip to the end of file | |
virtual bool | skip_relative (S_I x) override |
skip relatively to the current position | |
virtual bool | truncatable (const infinint &amount) const override |
whether the implementation is able to truncate to the given position | |
virtual infinint | get_position () const override |
get the current read/write position | |
void | copy_to (generic_file &ref) override |
copy all data from current position to the object in argument | |
void | copy_to (generic_file &ref, const infinint &crc_size, crc *&value) override |
copy all data from the current position to the object in argument and computes a CRC value of the transmitted data | |
Public Member Functions inherited from libdar::generic_file | |
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, | |
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 | |
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 void | truncate (const infinint &pos) |
truncate file at the given offset | |
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 | |
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 | |
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 | |
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 |
Protected Member Functions | |
virtual void | inherited_read_ahead (const infinint &amount) override |
tells the object that several calls to read() will follow to probably obtain at least the given amount of data | |
virtual U_I | inherited_read (char *a, U_I size) override |
implementation of read() operation | |
virtual void | inherited_write (const char *a, U_I size) override |
implementation of the write() operation | |
virtual void | inherited_truncate (const infinint &pos) override |
truncate file at the give offset | |
virtual void | inherited_sync_write () override |
write down any pending data | |
virtual void | inherited_flush_read () override |
reset internal engine, flush caches in order to read the data at current position | |
virtual void | inherited_terminate () override |
destructor-like call, except that it is allowed to throw exceptions | |
Protected Member Functions inherited from libdar::generic_file | |
void | set_mode (gf_mode x) |
bool | is_terminated () const |
Private Member Functions | |
void | detruit () |
std::deque< face >::iterator | look_for_label (const std::string &label) |
Private Attributes | |
std::deque< face > | stack |
Additional Inherited Members | |
Public Types inherited from libdar::generic_file | |
enum | skippability { skip_backward , skip_forward } |
stores a stack of generic_files writing/reading on each others
|
inline |
the constructor
Definition at line 51 of file pile.hpp.
References libdar::generic_file::generic_file(), and libdar::gf_read_only.
void libdar::pile::add_label | ( | const std::string & | label | ) |
associate a additional label to the object currently at the top of the stack
[in] | label | the label to add |
|
inline |
returns the address of the bottom generic_file
Definition at line 87 of file pile.hpp.
References libdar::generic_file::generic_file().
void libdar::pile::clear_label | ( | const std::string & | label | ) |
if label is associated to a member of the stack, makes this member of the stack an anoymous member (the label is no more associated to this object, while this object stays in the stack untouched
[in] | label | the label to clear, empty string is not a valid label an exception is thrown if used here |
|
overridevirtual |
copy all data from current position to the object in argument
Reimplemented from libdar::generic_file.
References libdar::generic_file::generic_file().
|
overridevirtual |
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 from libdar::generic_file.
References libdar::generic_file::generic_file().
generic_file * libdar::pile::get_by_label | ( | const std::string & | label | ) |
find the object associated to a given label
[in] | label | is the label to look for, empty string is forbidden |
References libdar::generic_file::generic_file().
|
overridevirtual |
get the current read/write position
Implements libdar::generic_file.
|
overrideprotectedvirtual |
reset internal engine, flush caches in order to read the data at current position
Implements libdar::generic_file.
|
overrideprotectedvirtual |
implementation of read() operation
[in,out] | a | where to put the data to read |
[in] | size | says how much data to read |
Implements libdar::generic_file.
References size().
|
overrideprotectedvirtual |
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 |
Implements libdar::generic_file.
|
overrideprotectedvirtual |
write down any pending data
Implements libdar::generic_file.
|
overrideprotectedvirtual |
destructor-like call, except that it is allowed to throw exceptions
Implements libdar::generic_file.
References libdar::generic_file::generic_file().
|
overrideprotectedvirtual |
truncate file at the give offset
Implements libdar::generic_file.
|
overrideprotectedvirtual |
implementation of the write() operation
[in] | a | what data to write |
[in] | size | amount of data to write |
Implements libdar::generic_file.
References size().
|
inline |
generic_file * libdar::pile::pop | ( | ) |
remove the top generic_file from the top
References libdar::generic_file::generic_file().
void libdar::pile::push | ( | generic_file * | f, |
const std::string & | label = "", | ||
bool | extend_mode = false ) |
add a generic_file on the top
[in] | f | is the address of the object to add to the stack |
[in] | label | unique label associated to this object in the current stack, exception thrown if label already used in stack |
[in] | extend_mode | allow the new object to have more read/write permission than the already placed object, which have the effect to change the read/write permission of the stack itself, future push() will accept wider permission even if extend_mode is not set |
References libdar::generic_file::generic_file().
|
inline |
returns the number of objects in the stack
Definition at line 90 of file pile.hpp.
Referenced by inherited_read(), and inherited_write().
|
overridevirtual |
skip at the absolute position
[in] | pos | the offset in byte where next read/write operation must start |
Implements libdar::generic_file.
|
overridevirtual |
skip relatively to the current position
Implements libdar::generic_file.
|
overridevirtual |
skip to the end of file
Implements libdar::generic_file.
|
overridevirtual |
whether the implementation is able to skip
Implements libdar::generic_file.
|
inline |
returns the address of the top generic_file
Definition at line 84 of file pile.hpp.
References libdar::generic_file::generic_file().
Referenced by pop_and_close_if_type_is().
|
overridevirtual |
whether the implementation is able to truncate to the given position
Implements libdar::generic_file.