26 #ifndef FILESYSTEM_SPECIFIC_ATTRIBUTE_HPP
27 #define FILESYSTEM_SPECIFIC_ATTRIBUTE_HPP
29 #include "../my_config.h"
34 #include <sys/types.h>
105 virtual std::string
show_val()
const = 0;
117 void set_family(
const fsa_family & val) { fam = val; };
118 void set_nature(
const fsa_nature & val) { nat = val; };
130 class filesystem_specific_attribute_list :
public on_pool
133 filesystem_specific_attribute_list() {};
134 filesystem_specific_attribute_list(
const filesystem_specific_attribute_list & ref) { copy_from(ref); };
135 const filesystem_specific_attribute_list & operator = (
const filesystem_specific_attribute_list & ref) { clear(); copy_from(ref);
return *
this; };
136 ~filesystem_specific_attribute_list() { clear(); };
142 void add(
const filesystem_specific_attribute & fsa);
145 fsa_scope get_fsa_families()
const {
return familes; };
148 bool is_included_in(
const filesystem_specific_attribute_list & ref,
const fsa_scope & scope)
const;
151 void read(generic_file & f, archive_version ver);
154 void write(generic_file & f)
const;
157 void get_fsa_from_filesystem_for(
const std::string & target,
158 const fsa_scope & scope,
167 bool set_fsa_to_filesystem_for(
const std::string & target,
168 const fsa_scope & scope,
169 user_interaction & ui)
const;
172 bool empty()
const {
return fsa.empty(); };
176 U_I size()
const {
return fsa.size(); };
180 const filesystem_specific_attribute & operator [] (U_I arg)
const;
183 infinint storage_size()
const;
189 filesystem_specific_attribute_list operator + (
const filesystem_specific_attribute_list & arg)
const;
199 std::vector<filesystem_specific_attribute *> fsa;
202 void copy_from(
const filesystem_specific_attribute_list & ref);
203 void update_familes();
204 void priv_add(
const filesystem_specific_attribute & ref);
207 void fill_extX_FSA_with(
const std::string & target, mode_t itype);
208 void fill_HFS_FSA_with(
const std::string & target, mode_t itype);
211 bool set_extX_FSA_to(user_interaction & ui,
const std::string & target)
const;
214 bool set_hfs_FSA_to(user_interaction & ui,
const std::string & target)
const;
216 static std::string family_to_signature(
fsa_family f);
217 static std::string nature_to_signature(
fsa_nature n);
218 static fsa_family signature_to_family(
const std::string & sig);
219 static fsa_nature signature_to_nature(
const std::string & sig);
224 template <
class T> T *cloner(
const T *x, memory_pool *p)
228 T *ret =
new (p) T(*x);
230 throw Ememory(
"cloner template");
237 class fsa_bool :
public filesystem_specific_attribute
243 bool get_value()
const {
return val; };
246 virtual std::string show_val()
const {
return val ? gettext(
"true") : gettext(
"false"); };
247 virtual void write(generic_file & f)
const { f.write(val ?
"T" :
"F", 1); };
248 virtual infinint storage_size()
const {
return 1; };
252 virtual bool equal_value_to(
const filesystem_specific_attribute & ref)
const;
260 class fsa_infinint :
public filesystem_specific_attribute
266 const infinint & get_value()
const {
return val; };
269 virtual std::string show_val()
const;
270 virtual void write(generic_file & f)
const { val.dump(f); };
271 virtual infinint storage_size()
const {
return val.get_storage_size(); };
275 virtual bool equal_value_to(
const filesystem_specific_attribute & ref)
const;
283 class fsa_time :
public filesystem_specific_attribute
289 const datetime & get_value()
const {
return val; };
292 virtual std::string show_val()
const;
293 virtual void write(generic_file & f)
const { val.dump(f); };
294 virtual infinint storage_size()
const {
return val.get_storage_size(); };
298 virtual bool equal_value_to(
const filesystem_specific_attribute & ref)
const;
filesystem specific attributes available families and fsa_scope definition
are defined here basic integer types that tend to be portable
class crc definition, used to handle Cyclic Redundancy Checks
filesystem_specific_attribute(fsa_family f)
constructor used to before reading the FSA from filesystem
bool is_same_type_as(const filesystem_specific_attribute &ref) const
provide a mean to compare objects types
memory_pool * get_pool() const
fsa_family get_family() const
obtain the family of the FSA
bool operator<(const filesystem_specific_attribute &ref) const
used to provided a sorted list of FSA
virtual void write(generic_file &f) const =0
write down to libdar archive
exception used to signal a bug. A bug is triggered when reaching some code that should never be reach...
this is the interface class from which all other data transfer classes inherit
this is the base class of object that can be allocated on a memory pool
fsa_nature get_nature() const
obtain the nature of the FSA
virtual infinint storage_size() const =0
give the storage size for the FSA
virtual bool equal_value_to(const filesystem_specific_attribute &ref) const =0
should return true if the value of the argument is equal to the one of 'this' false in any other case...
the arbitrary large positive integer class
virtual std::string show_val() const =0
provides a human readable value of the FSA
libdar namespace encapsulate all libdar symbols
virtual bool operator==(const filesystem_specific_attribute &ref) const
provides a mean to compare objects values
filesystem_specific_attribute(generic_file &f, fsa_family xfam, fsa_nature xnat)
constructor used to read a FSA from a libdar archive
virtual filesystem_specific_attribute * clone() const =0
provides a way to copy objects without having to know the more specific class of the object ...
virtual ~filesystem_specific_attribute()
virtual destructor for inherited classes