Disk ARchive
2.4.5
|
the cache class implements a very basic read/write caching mechanism More...
#include <cache.hpp>
Inherits libdar::generic_file.
Public Member Functions | |
cache (generic_file &hidden, bool shift_mode, U_I initial_size=10240, U_I unused_read_ratio=10, U_I observation_read_number=100, U_I max_size_hit_read_ratio=50, U_I unused_write_ratio=10, U_I observation_write_number=100, U_I max_size_hit_write_ratio=50) | |
bool | skip (const infinint &pos) |
skip at the absolute position | |
bool | skip_to_eof () |
skip to the end of file | |
bool | skip_relative (S_I x) |
skip relatively to the current position | |
infinint | get_position () |
get the current read/write position | |
Protected Member Functions | |
U_I | inherited_read (char *a, U_I size) |
implementation of read() operation | |
void | inherited_write (const char *a, U_I size) |
implementation of the write() operation | |
void | inherited_sync_write () |
write down any pending data | |
void | inherited_terminate () |
destructor-like call, except that it is allowed to throw exceptions |
the cache class implements a very basic read/write caching mechanism
it is intended to reduce context switches when no compression is used and when reading or writing catalogue through a pipe. The catalogue read and write is done by calling dump/constructor methods of the many objects that a catalogue can contain. This makes a lot of small read or write, which make very poor performances when used over the network through a pipe to ssh. When compression is used, the problem disapears as the compression engine gather these many small read or write into much bigger ones. This in only when there is no compression that that this class is useful (and used).
U_I libdar::cache::inherited_read | ( | char * | a, |
U_I | size | ||
) | [protected, virtual] |
implementation of read() operation
[in,out] | a | where to put the data to read |
[in] | size | says how much data to read |
Implements libdar::generic_file.
void libdar::cache::inherited_sync_write | ( | ) | [inline, protected, virtual] |
write down any pending data
Implements libdar::generic_file.
void libdar::cache::inherited_terminate | ( | ) | [inline, protected, virtual] |
destructor-like call, except that it is allowed to throw exceptions
Implements libdar::generic_file.
void libdar::cache::inherited_write | ( | const char * | a, |
U_I | size | ||
) | [protected, virtual] |
implementation of the write() operation
[in] | a | what data to write |
[in] | size | amount of data to write |
Implements libdar::generic_file.
bool libdar::cache::skip | ( | const infinint & | pos | ) | [virtual] |
skip at the absolute position
[in] | pos | the offset in byte where next read/write operation must start |
Implements libdar::generic_file.