Disk ARchive  2.7.14
Full featured and portable backup and archiving tool
Public Member Functions | Private Member Functions | Private Attributes | List of all members
libdar::cat_delta_signature Class Reference

the cat_delta_signature file class More...

#include <cat_delta_signature.hpp>

+ Collaboration diagram for libdar::cat_delta_signature:

Public Member Functions

 cat_delta_signature (generic_file *f, proto_compressor *c)
 constructor to read an object (using read() later on) from filesystem/backup More...
 
 cat_delta_signature ()
 constructor to write an object to filesytem/backup (using dump_* methods later on)
 
 cat_delta_signature (const cat_delta_signature &ref)
 copy constructor
 
 cat_delta_signature (cat_delta_signature &&ref) noexcept
 move constructor
 
cat_delta_signatureoperator= (const cat_delta_signature &ref)
 assignement operator
 
cat_delta_signatureoperator= (cat_delta_signature &&ref) noexcept
 move assignment operator
 
 ~cat_delta_signature ()
 destructor
 
bool is_pending_read () const
 tells whether the read() call has been invoked
 
void read (bool sequential_read, const archive_version &ver)
 
bool can_obtain_sig () const
 the cat_delta_signature structure can only hold CRC without delta_signature, this call gives the situation about that point
 
std::shared_ptr< memory_fileobtain_sig (const archive_version &ver) const
 provide a memory_file object which the caller has the duty to destroy after use More...
 
U_I obtain_sig_block_size () const
 provide the block size used for delta signature
 
void drop_sig () const
 drop signature but keep metadata available More...
 
void will_have_signature ()
 give the object where to fetch from the delta signature, object must exist up to the next call to dump_data More...
 
void set_sig (const std::shared_ptr< memory_file > &ptr, U_I sig_block_size)
 the object pointed to by ptr must stay available when calling dump_data()/dump_metadata() later on More...
 
void set_sig ()
 variante used when the delta_signature object will only contain CRCs (no delta signature)
 
void dump_data (generic_file &f, bool sequential_mode, const archive_version &ver) const
 write down the data eventually with sequential read mark followed by delta sig metadata More...
 
void dump_metadata (generic_file &f) const
 write down the delta_signature metadata for catalogue
 
bool has_patch_base_crc () const
 returns whether the object has a base patch CRC (s_delta status objects)
 
bool get_patch_base_crc (const crc *&c) const
 returns the CRC of the file to base the patch on, for s_delta objects
 
void set_patch_base_crc (const crc &c)
 set the reference CRC of the file to base the patch on, for s_detla objects
 
bool has_patch_result_crc () const
 returns whether the object has a CRC corresponding to data (for s_saved, s_delta, and when delta signature is present)
 
bool get_patch_result_crc (const crc *&c) const
 returns the CRC the file will have once restored or patched (for s_saved, s_delta, and when delta signature is present)
 
void set_patch_result_crc (const crc &c)
 set the CRC the file will have once restored or patched (for s_saved, s_delta, and when delta signature is present)
 
void clear ()
 reset the object
 

Private Member Functions

void init () noexcept
 
void copy_from (const cat_delta_signature &ref)
 
void move_from (cat_delta_signature &&ref) noexcept
 
void destroy () noexcept
 
void fetch_data (const archive_version &ver) const
 

Private Attributes

crcpatch_base_check
 associated CRC for the file this signature has been computed on, moved to cat_file since format 11.2, still need for older formats
 
infinint delta_sig_size
 size of the data to setup "sig" (set to zero when reading in sequential mode, sig is then setup on-fly)
 
infinint delta_sig_offset
 
std::shared_ptr< memory_filesig
 the signature data, if set nullptr it will be fetched from f in direct access mode only More...
 
crcpatch_result_check
 associated CRC
 
generic_filesrc
 where to read data from
 
proto_compressor * zip
 needed to disable compression when reading delta signature data from an archive
 
U_I sig_block_len
 block length used within delta signature
 
bool pending_read
 when the object has been created for read but data not yet read from archive
 

Detailed Description

the cat_delta_signature file class

this class works in two implicit modes

Definition at line 93 of file cat_delta_signature.hpp.

Constructor & Destructor Documentation

◆ cat_delta_signature()

libdar::cat_delta_signature::cat_delta_signature ( generic_file f,
proto_compressor *  c 
)

constructor to read an object (using read() later on) from filesystem/backup

Parameters
[in]fwhere to read the data from, used when calling read() later on. f must not be set to nullptr and the pointed to object must survive this cat_delta_signature object
[in]cpoints to the compressor layer in order to suspend compression when reading data (metadata will be read compressed or not depending on the its location (in-lined or in the catalogue at end of archive)

Member Function Documentation

◆ drop_sig()

void libdar::cat_delta_signature::drop_sig ( ) const
inline

drop signature but keep metadata available

Note
there is a lot of chance that a call to obtain_sig() will fail after drop_sig() has been called when in sequential read mode, due to the limited possibility to skip backward in that mode

Definition at line 150 of file cat_delta_signature.hpp.

References sig.

◆ dump_data()

void libdar::cat_delta_signature::dump_data ( generic_file f,
bool  sequential_mode,
const archive_version ver 
) const

write down the data eventually with sequential read mark followed by delta sig metadata

Note
ver is only used to know which version to use for reading the data, but it is always written following the most recent supported archive format version

◆ obtain_sig()

std::shared_ptr<memory_file> libdar::cat_delta_signature::obtain_sig ( const archive_version ver) const

provide a memory_file object which the caller has the duty to destroy after use

Note
while drop_sig has not been called, obtain_sig() can be called any number of time
in direct mode (not sequential_real mode) the first call to obtain_sig() fetches the data from the archive and loads it to memory.

◆ read()

void libdar::cat_delta_signature::read ( bool  sequential_read,
const archive_version ver 
)

read the metadata of the object from the generic_file given at construction time

Note
in sequential read mode, the data is also read at that time and loaded into memory, thing which is done transparently by obtain_sig() when in direct access mode

◆ set_sig()

void libdar::cat_delta_signature::set_sig ( const std::shared_ptr< memory_file > &  ptr,
U_I  sig_block_size 
)

the object pointed to by ptr must stay available when calling dump_data()/dump_metadata() later on

Note
sig_block_size is an additional information about the block size used to setup the signature, this is not the size of the signature!

◆ will_have_signature()

void libdar::cat_delta_signature::will_have_signature ( )
inline

give the object where to fetch from the delta signature, object must exist up to the next call to dump_data

Note
seg_sig_ref() must be called each time before invoking dump_data(), normally it is done once... for can_obtain_sig() to return true before the signature is provided

Definition at line 159 of file cat_delta_signature.hpp.

References delta_sig_size.

Member Data Documentation

◆ delta_sig_offset

infinint libdar::cat_delta_signature::delta_sig_offset
private

where to read sig_block_len followed by delta_sig_size bytes of data from which to setup "sig"

Definition at line 206 of file cat_delta_signature.hpp.

Referenced by set_sig().

◆ sig

std::shared_ptr<memory_file> libdar::cat_delta_signature::sig
mutableprivate

the signature data, if set nullptr it will be fetched from f in direct access mode only

Note
delta_sig_offset is set to zero when read in sequential mode, sig is setup on-fly

Definition at line 208 of file cat_delta_signature.hpp.

Referenced by drop_sig(), and set_sig().


The documentation for this class was generated from the following file: