00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00028
00029 #ifndef ELASTIC_HPP
00030 #define ELASTIC_HPP
00031
00032 #include "../my_config.h"
00033
00034 #include "integers.hpp"
00035 #include "erreurs.hpp"
00036 #include "infinint.hpp"
00037 #include "generic_file.hpp"
00038 #include "header_version.hpp"
00039
00040
00041 namespace libdar
00042 {
00043
00044 enum elastic_direction { elastic_forward, elastic_backward };
00045
00047
00052 class elastic
00053 {
00054 public:
00055 elastic(U_32 size);
00056 elastic(const unsigned char *buffer, U_32 size, elastic_direction dir, const dar_version & reading_ver);
00057 elastic(generic_file &f, elastic_direction dir, const dar_version & reading_ver);
00058
00059 U_32 dump(unsigned char *buffer, U_32 size) const;
00060 U_32 get_size() const { return taille; };
00061
00062 static U_I max_length() { return (U_I)(254)*254*254*254 - 1; };
00063
00064 private:
00065 U_32 taille;
00066
00067 void randomize(unsigned char *a) const;
00068 U_I base_from_version(const dar_version & reading_ver) const;
00069 unsigned char get_low_mark(const dar_version & reading_ver) const;
00070 unsigned char get_high_mark(const dar_version & reading_ver) const;
00071 unsigned char get_low_mark() const { return 255; };
00072 unsigned char get_high_mark() const { return 254; };
00073
00074 };
00075
00076 }
00077
00078 #endif