00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef CMEMORYSTREAM_H
00029 #define CMEMORYSTREAM_H
00030
00031 #include <mrpt/utils/CStream.h>
00032 #include <mrpt/utils/safe_pointers.h>
00033
00034
00035
00036
00037 namespace mrpt
00038 {
00039 namespace utils
00040 {
00047 class MRPTDLLIMPEXP CMemoryStream : public CStream
00048 {
00049 protected:
00052 size_t Read(void *Buffer, size_t Count);
00053
00057 size_t Write(const void *Buffer, size_t Count);
00058
00061 void_ptr_noncopy m_memory;
00062 size_t m_size, m_position, m_bytesWritten;
00063 size_t m_alloc_block_size;
00064
00067 void resize(size_t newSize);
00068 public:
00071 CMemoryStream();
00072
00075 CMemoryStream( const void *data, const size_t nBytesInData );
00076
00079 virtual ~CMemoryStream();
00080
00083 void Clear();
00084
00088 void changeSize( size_t newSize );
00089
00093 size_t Seek(long Offset, CStream::TSeekOrigin Origin = sFromBeginning);
00094
00097 size_t getTotalBytesCount();
00098
00101 size_t getPosition();
00102
00106 void* getRawBufferData();
00107
00108
00112 bool saveBufferToFile( const std::string &file_name );
00113
00117 bool loadBufferFromFile( const std::string &file_name );
00118
00120 void setAllocBlockSize( size_t alloc_block_size )
00121 {
00122 ASSERT_(alloc_block_size>0)
00123 m_alloc_block_size = alloc_block_size;
00124 }
00125
00126 };
00127
00128 }
00129 }
00130 #endif