37#ifndef GENERIC_FILE_HPP
38#define GENERIC_FILE_HPP
40#include "//include/dar/libdar_my_config.h"
44#if LIBDAR_HAS_UNISTD_H
49#include "//include/dar/proto_generic_file.hpp"
50#include "//include/dar/integers.hpp"
51#include "//include/dar/crc.hpp"
52#include "//include/dar/infinint.hpp"
53#include "//include/dar/gf_mode.hpp"
80 generic_file(
gf_mode m) { rw = m; terminated = no_read_ahead =
false; enable_crc(
false); checksum =
nullptr; };
106 bool operator != (
generic_file & ref) {
return ! (*
this == ref); };
126 virtual U_I
read(
char *a, U_I size)
override;
129 virtual void write(
const char *a, U_I size)
override;
134 void write(
const std::string & arg);
143 enum skippability { skip_backward, skip_forward };
248 bool crc_status()
const {
return active_read == &generic_file::read_crc; };
265 void set_mode(
gf_mode x) { rw = x; };
335 void (
generic_file::* active_write)(const char *a, U_I size);
337 void enable_crc(
bool mode);
339 U_I read_crc(
char *a, U_I size);
340 void write_crc(
const char *a, U_I size);
342 void nullifyptr() noexcept { checksum =
nullptr; };
pure virtual class defining interface of a CRC object
this is the interface class from which all other data transfer classes inherit
virtual void write(const char *a, U_I size) override
write data to the generic_file inherited from proto_generic_file
infinint copy_to(generic_file &ref, infinint size)
copy the given amount to the object in argument
virtual bool truncatable(const infinint &pos) const =0
whether the implementation is able to truncate to the given position
void terminate()
destructor-like call, except that it is allowed to throw exceptions
virtual void inherited_truncate(const infinint &pos)=0
truncate file at the give offset
virtual void inherited_sync_write()=0
write down any pending data
~generic_file() noexcept(false)
virtual destructor,
virtual bool skip(const infinint &pos)=0
skip at the absolute position
generic_file(const generic_file &ref)
copy constructor
virtual void truncate(const infinint &pos)
truncate file at the given offset
generic_file(gf_mode m)
main constructor
generic_file & operator=(const generic_file &ref)
assignment operator
virtual void copy_to(generic_file &ref)
copy all data from current position to the object in argument
virtual bool skippable(skippability direction, const infinint &amount)=0
whether the implementation is able to skip
virtual void copy_to(generic_file &ref, const infinint &crc_size, crc *&value)
copy all data from the current position to the object in argument and computes a CRC value of the tra...
bool crc_status() const
to known whether CRC calculation is activated or not
virtual void inherited_read_ahead(const infinint &amount)=0
tells the object that several calls to read() will follow to probably obtain at least the given amoun...
S_I read_back(char &a)
skip back one char, read on char and skip back one char
void read_ahead(const infinint &amount)
S_I read_forward(char &a)
read one char
virtual infinint get_position() const =0
get the current read/write position
void flush_read()
be ready to read at current position, reseting all pending data for reading, cached and in compressio...
virtual bool skip_relative(S_I x)=0
skip relatively to the current position
bool operator==(generic_file &ref)
virtual bool skip_to_eof()=0
skip to the end of file
virtual void inherited_write(const char *a, U_I size)=0
implementation of the write() operation
virtual U_I inherited_read(char *a, U_I size)=0
implementation of read() operation
bool diff(generic_file &f, const infinint &me_read_ahead, const infinint &you_read_ahead, const infinint &crc_size, crc *&value, infinint &err_offset)
bool diff(generic_file &f, const infinint &me_read_ahead, const infinint &you_read_ahead, const infinint &crc_size, crc *&value)
compares the contents with the object in argument
generic_file(generic_file &&ref) noexcept
move constructor
void reset_crc(const infinint &width)
reset CRC on read or writen data
void ignore_read_ahead(bool mode)
bool is_terminated() const
gf_mode get_mode() const
retreive the openning mode for this object
virtual void inherited_terminate()=0
destructor-like call, except that it is allowed to throw exceptions
void write(const std::string &arg)
write a string to the generic_file
crc * get_crc()
get CRC of the transfered date since last reset
void sync_write()
write any pending data
virtual U_I read(char *a, U_I size) override
read data from the generic_file inherited from proto_generic_file
U_32 copy_to(generic_file &ref, U_32 size)
small copy (up to 4GB) with CRC calculation
virtual void inherited_flush_read()=0
reset internal engine, flush caches in order to read the data at current position
the arbitrary large positive integer class
ancestor class of generic_file
gf_mode
generic_file openning modes
libdar namespace encapsulate all libdar symbols