00001 //*************************************************************************************** 00002 // File supervisor: Crosswalk team 00012 //*************************************************************************************** 00013 00014 #ifndef _MEMORYFILTER_H_ 00015 #define _MEMORYFILTER_H_ 00016 00017 #include <SIBCUtil.h> 00018 #include <SIBCString.h> 00019 #include "SIBCArray.h" 00020 00021 #include "CXSIFilter.h" 00022 00023 #define MEMORY_FILTER_NAME "MEMORY" 00024 #define MEMORY_FILTER_ID "mem" 00025 00026 #define BUFFER_SIZE (128 * 1024) 00027 00034 class CMemoryFilter : public CXSIFilter 00035 { 00036 public: 00039 CMemoryFilter(); 00042 virtual ~CMemoryFilter(); 00043 00049 int Open ( CSIBCString in_szFilename, _SI_FILE_MODE in_Mode ); 00053 int Close (); 00054 00060 int Read ( SI_Char * out_pBuffer, SI_Long in_lSize ); 00066 int Write( SI_Char * in_pBuffer, SI_Long in_lSize ); 00067 00068 00073 int Eof(); 00077 int Tell(); 00078 00079 void WriteHeader(); 00080 void SetHeader ( CSIBCString in_szHeader ); 00081 CSIBCString GetHeader () { return GetLastHeader(); } 00082 static CSIBCString GetLastHeader(); 00083 private: 00084 void Flush(); 00085 void FillBuffer(); 00086 00087 char *m_pBuffer; 00088 int m_lPosition; 00089 SI_Long m_lSizeRead; 00090 bool m_bHeaderSkipped; 00091 bool m_bReadMode; 00092 static SI_Char m_cHeader[17]; 00093 static CSIBCArray<SI_Char*> m_blocks; 00094 static CSIBCArray<SI_Int> m_blockSize; 00095 SI_Long m_lBufIndex; 00096 }; 00097 00098 #endif