| Disk ARchive 2.6.12 Full featured and portable backup and archiving tool

cat_entree.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2020 Denis Corbin
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 //
19 // to contact the author : http://dar.linux.free.fr/email.html
20 /*********************************************************************/
21
25
26 #ifndef CAT_ENTREE_HPP
27 #define CAT_ENTREE_HPP
28
29 #include "../my_config.h"
30
31 extern "C"
32 {
33 } // end extern "C"
34
35 #include "infinint.hpp"
36 #include "user_interaction.hpp"
37 #include "pile.hpp"
38 #include "escape.hpp"
39 #include "archive_version.hpp"
40 #include "compressor.hpp"
41 #include "pile_descriptor.hpp"
42 #include "smart_pointer.hpp"
43 #include "entree_stats.hpp"
44 #include "list_entry.hpp"
45 #include "slice_layout.hpp"
46
47 #include <memory>
48
49 namespace libdar
50 {
51 class cat_etoile;
52
55
56
58
59 class cat_entree
60 {
61 public :
63
73 static cat_entree *read(const std::shared_ptr<user_interaction> & dialog,
74 const smart_pointer<pile_descriptor> & f,
75 const archive_version & reading_ver,
76 entree_stats & stats,
77 std::map <infinint, cat_etoile *> & corres,
78 compression default_algo,
79 bool lax,
80 bool only_detruit,
81 bool small);
82
84 cat_entree(saved_status val): xsaved(val) {};
85
87
92 cat_entree(const smart_pointer<pile_descriptor> & pdesc, bool small, saved_status val);
93
94 // copy constructor is fine as we only copy the address of pointers
95 cat_entree(const cat_entree & ref) = default;
96
97 // move constructor
98 cat_entree(cat_entree && ref) noexcept = default;
99
100 // assignment operator is fine too for the same reason
101 cat_entree & operator = (const cat_entree & ref) = default;
102
103 // move assignment operator
104 cat_entree & operator = (cat_entree && ref) noexcept = default;
105
107 virtual ~cat_entree() noexcept(false) {};
108
110 virtual bool operator == (const cat_entree & ref) const = 0;
111 bool operator != (const cat_entree & ref) const { return ! (*this == ref); };
112
114
120 bool same_as(const cat_entree & ref) const { return true; };
121
123
126 void dump(const pile_descriptor & pdesc, bool small) const;
127
129
132 void specific_dump(const pile_descriptor & pdesc, bool small) const { inherited_dump(pdesc, small); };
133
135
139 virtual void post_constructor(const pile_descriptor & pdesc) {};
140
142 virtual unsigned char signature() const = 0;
143
145 virtual std::string get_description() const = 0;
146
148 virtual cat_entree *clone() const = 0;
149
152
161 virtual void change_location(const smart_pointer<pile_descriptor> & pdesc);
162
164 saved_status get_saved_status() const { return xsaved; };
165
167 void set_saved_status(saved_status x) { xsaved = x; };
168
170
176 void set_list_entry(const slice_layout *sly,
177 bool fetch_ea,
178 list_entry & ent) const;
179
180 protected:
182 virtual void inherited_dump(const pile_descriptor & pdesc, bool small) const;
183
184
186 pile *get_pile() const { return pdesc.is_null() ? nullptr : pdesc->stack; };
187
189
193 compressor *get_compressor_layer() const { return pdesc.is_null() ? nullptr : pdesc->compr; };
194
196
200 escape *get_escape_layer() const { return pdesc.is_null() ? nullptr : pdesc->esc; };
201
203 generic_file *get_read_cat_layer(bool small) const;
204
205 private:
206 static const U_I ENTREE_CRC_SIZE;
207
208 saved_status xsaved;
209 smart_pointer<pile_descriptor> pdesc;
210 };
211
213 extern const char *cat_entree_signature2string(unsigned char sign);
214
216
217 } // end of namespace
218
219 #endif
libdar::cat_entree_signature2string
const char * cat_entree_signature2string(unsigned char sign)
convert a signature char to a human readable string
libdar::compression
compression
the different compression algorithm available
Definition: compression.hpp:46
libdar::cat_entree::read
static cat_entree * read(const std::shared_ptr< user_interaction > &dialog, const smart_pointer< pile_descriptor > &f, const archive_version &reading_ver, entree_stats &stats, std::map< infinint, cat_etoile * > &corres, compression default_algo, bool lax, bool only_detruit, bool small)
read and create an object of inherited class of class cat_entree
libdar::pile
stores a stack of generic_files writing/reading on each others
Definition: pile.hpp:44
libdar::cat_entree::signature
virtual unsigned char signature() const =0
inherited class signature
user_interaction.hpp
defines the interaction interface between libdar and users.
libdar::saved_status
saved_status
data saved status for an entry
Definition: cat_status.hpp:45
libdar::compressor
compression class for gzip and bzip2 algorithms
Definition: compressor.hpp:46
list_entry.hpp
class of objects describing an entry in the archive, used by archive::get_children_in_table
libdar::cat_entree::get_read_cat_layer
generic_file * get_read_cat_layer(bool small) const
return the adhoc layer in the stack to read from the catalogue objects (except the EA,...
infinint.hpp
switch module to limitint (32 ou 64 bits integers) or infinint
libdar::cat_entree::set_saved_status
void set_saved_status(saved_status x)
modify the saved_status of the object
Definition: cat_entree.hpp:167
archive_version.hpp
class archive_version that rules which archive format to follow
libdar::cat_entree::get_compressor_layer
compressor * get_compressor_layer() const
compressor generic_file relative methods
Definition: cat_entree.hpp:193
libdar::cat_entree
the root class from all other inherite for any entry in the catalogue
Definition: cat_entree.hpp:60
libdar::entree_stats
holds the statistics contents of a catalogue
Definition: entree_stats.hpp:49
libdar::cat_entree::cat_entree
cat_entree(saved_status val)
setup an object when read from filesystem
Definition: cat_entree.hpp:84
libdar::archive_version
class archive_version manages the version of the archive format
Definition: archive_version.hpp:47
libdar::cat_entree::cat_entree
cat_entree(const smart_pointer< pile_descriptor > &pdesc, bool small, saved_status val)
setup an object when read from an archive
libdar::cat_entree::operator==
virtual bool operator==(const cat_entree &ref) const =0
returns true if the two object are the same
libdar::list_entry
Definition: list_entry.hpp:60
slice_layout.hpp
object describing the slicing of an archive
libdar::cat_entree::change_location
virtual void change_location(const smart_pointer< pile_descriptor > &pdesc)
libdar::cat_entree::get_description
virtual std::string get_description() const =0
inherited class designation
libdar::smart_pointer::is_null
bool is_null() const
return whether the smart_pointer is pointing to nullptr
Definition: smart_pointer.hpp:165
libdar::cat_entree::get_escape_layer
escape * get_escape_layer() const
escape generic_file relative methods
Definition: cat_entree.hpp:200
entree_stats.hpp
datastructure holding the nature of file present in a given archive
smart_pointer.hpp
template class implementing memory efficient smart pointer
pile.hpp
class pile definition. Used to manage a stack of generic_file objects
libdar::generic_file
this is the interface class from which all other data transfer classes inherit
Definition: generic_file.hpp:77
libdar::cat_entree::set_list_entry
void set_list_entry(const slice_layout *sly, bool fetch_ea, list_entry &ent) const
setup a list_entry object relative to the current cat_entree object
libdar::cat_entree::same_as
bool same_as(const cat_entree &ref) const
return true of the two objects would generate the same entry on filsystem
Definition: cat_entree.hpp:120
libdar::cat_entree::get_pile
pile * get_pile() const
stack used to read object from (nullptr is returned for object created from filesystem)
Definition: cat_entree.hpp:186
libdar::cat_entree::xsaved
saved_status xsaved
inode data status, this field is stored with signature() in the cat_signature field -> must be manage...
Definition: cat_entree.hpp:208
escape.hpp
class escape definition, used for sequential reading of archives
libdar::cat_entree::post_constructor
virtual void post_constructor(const pile_descriptor &pdesc)
let inherited classes build object's data after CRC has been read from file in small read mode
Definition: cat_entree.hpp:139
libdar::cat_entree::clone
virtual cat_entree * clone() const =0
a way to copy the exact type of an object even if pointed to by a parent class pointer
libdar::cat_entree::dump
void dump(const pile_descriptor &pdesc, bool small) const
write down the object information to a stack
libdar::cat_entree::~cat_entree
virtual ~cat_entree() noexcept(false)
destructor
Definition: cat_entree.hpp:107
pile_descriptor.hpp
optimization structure to quickly access some commonly used layers of a stack of generic_file
libdar::cat_entree::get_saved_status
saved_status get_saved_status() const
obtain the saved status of the object
Definition: cat_entree.hpp:164
libdar::smart_pointer< pile_descriptor >
libdar::cat_entree::specific_dump
void specific_dump(const pile_descriptor &pdesc, bool small) const
this call gives an access to inherited_dump
Definition: cat_entree.hpp:132
compressor.hpp
compression engine implementation
libdar::cat_entree::inherited_dump
virtual void inherited_dump(const pile_descriptor &pdesc, bool small) const
inherited class may overload this method but shall first call the parent's inherited_dump() in the ov...
libdar
libdar namespace encapsulate all libdar symbols
Definition: archive.hpp:47