Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00025
00026 #ifndef MEMORY_FILE_HPP
00027 #define MEMORY_FILE_HPP
00028
00029 #include "generic_file.hpp"
00030 #include "storage.hpp"
00031
00032 namespace libdar
00033 {
00034
00037
00038 class memory_file : public generic_file
00039 {
00040 public:
00041
00042
00043
00044
00045
00046 memory_file(gf_mode m) : generic_file(m), data(0) { position = 0; };
00047
00048
00049
00050
00051
00052 bool skip(const infinint & pos);
00053 bool skip_to_eof();
00054 bool skip_relative(S_I x);
00055 infinint get_position() { if(is_terminated()) throw SRC_BUG; return position; };
00056 void reset() { if(is_terminated()) throw SRC_BUG; position = 0; data = storage(0); };
00057
00058
00059
00060
00061
00063 infinint get_data_size() const { if(is_terminated()) throw SRC_BUG; return data.size(); };
00064
00066 const storage & get_raw_data() const { if(is_terminated()) throw SRC_BUG; return data; };
00067 void set_raw_data(const storage & val) { if(is_terminated()) throw SRC_BUG; data = val; position = 0; };
00068
00069 #ifdef LIBDAR_SPECIAL_ALLOC
00070 USE_SPECIAL_ALLOC(memory_file);
00071 #endif
00072
00073 protected:
00074 U_I inherited_read(char *a, U_I size);
00075 void inherited_write(const char *a, U_I size);
00076 void inherited_sync_write() {};
00077 void inherited_terminate() {};
00078
00079 private:
00080 storage data;
00081 infinint position;
00082 };
00083
00085
00086 }
00087
00088 #endif