Disk ARchive  2.6.0
Full featured and portable backup and archiving tool
generic_to_global_file.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2018 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 //
19 // to contact the author : http://dar.linux.free.fr/email.html
20 /*********************************************************************/
21 
30 
31 #ifndef GENERIC_TO_GLOBAL_FILE_HPP
32 #define GENERIC_TO_GLOBAL_FILE_HPP
33 
34 #include "fichier_global.hpp"
35 
36 namespace libdar
37 {
38 
41 
43 
45  {
46  public:
47 
49 
54  generic_to_global_file(const std::shared_ptr<user_interaction> & dialog,
55  generic_file *d,
56  gf_mode mode):
57  fichier_global(dialog, mode)
58  { if(d == nullptr) throw SRC_BUG; if(d->get_mode() != gf_read_write && d->get_mode() != mode) throw SRC_BUG; data = d; };
59 
60  generic_to_global_file(const generic_to_global_file & ref) = default;
61  generic_to_global_file(generic_to_global_file && ref) noexcept = default;
62  generic_to_global_file & operator = (const generic_to_global_file & ref) = default;
63  generic_to_global_file & operator = (generic_to_global_file && ref) noexcept = default;
64  ~generic_to_global_file() = default;
65 
66  // virtual method inherited from generic_file
67  virtual bool skippable(skippability direction, const infinint & amount) override { return data->skippable(direction, amount); }
68  virtual bool skip(const infinint & pos) override { return data->skip(pos); };
69  virtual bool skip_to_eof() override { return data->skip_to_eof(); };
70  virtual bool skip_relative(S_I x) override { return data->skip_relative(x); };
71  virtual infinint get_position() const override { return data->get_position(); };
72 
73 
74  // virtual method inherited from fichier_global
75  virtual void change_ownership(const std::string & user, const std::string & group) override {};
76  virtual void change_permission(U_I perm) override {};
77  virtual infinint get_size() const override { return data->get_position(); }; //< yes, this is the drawback of this template class convertion, get_size() does not return the real size of the object
78  virtual void fadvise(advise adv) const override {};
79 
80 
81  protected:
82 
83  // virtual method inherited from generic_file
84  virtual void inherited_read_ahead(const infinint & amount) override {}; // no optimization can be done here, we rely on the OS here
85  virtual void inherited_sync_write() override {};
86  virtual void inherited_flush_read() override {};
87  virtual void inherited_terminate() override {};
88 
89  // inherited from fichier_global
90  virtual U_I fichier_global_inherited_write(const char *a, U_I size) override { data->write(a, size); return size; };
91  virtual bool fichier_global_inherited_read(char *a, U_I size, U_I & read, std::string & message) override { read = data->read(a, size); message = "THIS IS A BUG IN GENERIC_TO_GLOBAL_FILE, PLEASE REPORT TO THE MAINTAINER!"; return true; };
92 
93  private:
94  generic_file *data;
95  };
96 
98 
99 } // end of namespace
100 
101 #endif
virtual infinint get_position() const override
get the current read/write position
virtual bool fichier_global_inherited_read(char *a, U_I size, U_I &read, std::string &message) override
replaces generic_file::inherited_read() method, to allow the return of partial reading ...
virtual void write(const char *a, U_I size) override
write data to the generic_file inherited from proto_generic_file
virtual void fadvise(advise adv) const override
set posix_fadvise for the whole file
virtual infinint get_position() const =0
get the current read/write position
virtual bool skip(const infinint &pos)=0
skip at the absolute position
virtual void inherited_terminate() override
destructor-like call, except that it is allowed to throw exceptions
virtual bool skip_to_eof() override
skip to the end of file
virtual bool skippable(skippability direction, const infinint &amount) override
whether the implementation is able to skip
gf_mode
generic_file openning modes
Definition: gf_mode.hpp:43
virtual bool skip_relative(S_I x)=0
skip relatively to the current position
virtual U_I fichier_global_inherited_write(const char *a, U_I size) override
replaces generic_file::inherited_write() method, to allow the return of partial writings ...
virtual bool skip(const infinint &pos) override
skip at the absolute position
virtual bool skip_relative(S_I x) override
skip relatively to the current position
generic_to_global_file(const std::shared_ptr< user_interaction > &dialog, generic_file *d, gf_mode mode)
Constructors & Destructor.
class fichier_global definition. This class is a pure virtual class class fichier_global is an abstra...
abstraction of filesystem files for entrepot
virtual void inherited_sync_write() override
write down any pending data
provides a fichier_global interface for any type of generic_file
virtual U_I read(char *a, U_I size) override
read data from the generic_file inherited from proto_generic_file
virtual void change_permission(U_I perm) override
change the permission of the file
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 amoun...
this is the interface class from which all other data transfer classes inherit
virtual void change_ownership(const std::string &user, const std::string &group) override
set the ownership of the file
read and write access
Definition: gf_mode.hpp:47
virtual infinint get_size() const override
return the size of the file
virtual void inherited_flush_read() override
reset internal engine, flush caches in order to read the data at current position ...
the arbitrary large positive integer class
gf_mode get_mode() const
retreive the openning mode for this object
virtual bool skip_to_eof()=0
skip to the end of file
libdar namespace encapsulate all libdar symbols
Definition: archive.hpp:46
virtual bool skippable(skippability direction, const infinint &amount)=0
whether the implementation is able to skip