Disk ARchive 2.7.16
Full featured and portable backup and archiving tool
Loading...
Searching...
No Matches
cat_etoile.hpp
Go to the documentation of this file.
1/*********************************************************************/
2// dar - disk archive - a backup/restoration program
3// Copyright (C) 2002-2024 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, see the AUTHOR file
20/*********************************************************************/
21
25
26#ifndef CAT_ETOILE_HPP
27#define CAT_ETOILE_HPP
28
29#include "../my_config.h"
30
31extern "C"
32{
33} // end extern "C"
34
35#include <list>
36#include "cat_inode.hpp"
37
38namespace libdar
39{
42
43
45
48 {
49 public:
50
52
56 cat_etoile(cat_inode *host, const infinint & etiquette_number);
57 cat_etoile(const cat_etoile & ref) = delete; // copy constructor not allowed for this class
58 cat_etoile(cat_etoile && ref) = delete;
59 cat_etoile & operator = (const cat_etoile & ref) = delete; // assignment not allowed for this class
60 cat_etoile & operator = (cat_etoile && ref) = delete;
61 ~cat_etoile() { delete hosted; };
62
63 void add_ref(void *ref);
64 void drop_ref(void *ref);
65 infinint get_ref_count() const { return refs.size(); };
66 cat_inode *get_inode() const { return hosted; };
67 infinint get_etiquette() const { return etiquette; };
68 void change_etiquette(const infinint & new_val) { etiquette = new_val; };
69 void disable_reduction_to_normal_inode() { tags.reduceable = 0; };
70 bool cannot_reduce_to_normal_inode() const { return tags.reduceable == 0; };
71
72 bool is_counted() const { return tags.counted; };
73 bool is_wrote() const { return tags.wrote; };
74 bool is_dumped() const { return tags.dumped; };
75 void set_counted(bool val) { tags.counted = val ? 1 : 0; };
76 void set_wrote(bool val) { tags.wrote = val ? 1 : 0; };
77 void set_dumped(bool val) { tags.dumped = val ? 1 : 0; };
78
79 // return the address of the first mirage that triggered the creation of this mirage
80 // if this object is destroyed afterward this call returns nullptr
81 const void *get_first_ref() const { if(refs.size() == 0) throw SRC_BUG; return refs.front(); };
82
83
84 private:
86 struct bool_tags
87 {
88 unsigned counted : 1;
89 unsigned wrote : 1;
90 unsigned dumped : 1;
91 unsigned reduceable : 1;
92 unsigned : 4;
93
94 bool_tags() { counted = wrote = dumped = 0; reduceable = 1; };
95 };
96
97 std::list<void *> refs;
98 cat_inode *hosted;
99 infinint etiquette;
100 bool_tags tags;
101 };
102
103
105
106} // end of namespace
107
108#endif
base object for all inode types, managed EA and FSA, dates, permissions, ownership,...
the hard link implementation
cat_etoile(cat_inode *host, const infinint &etiquette_number)
build an object
std::list< void * > refs
list of pointers to the mirages objects, in the order of their creation
the root class for all cat_inode
Definition cat_inode.hpp:53
the arbitrary large positive integer class
include macro defined by the configure script and some specific additional ones
libdar namespace encapsulate all libdar symbols
Definition archive.hpp:47
bitfield used to record pointed to inode information
unsigned wrote
whether the inode has its data copied to archive
unsigned dumped
whether the inode information has been dumped in the catalogue
unsigned counted
whether the inode has been counted
unsigned reduceable
whether the inode can be reduce to normal inode