00001 //*************************************************************************************** 00002 // 00003 // File supervisor: Robert Belanger 00004 // 00005 // (c) Copyright 2003 Avid Technology, Inc. . All rights reserved. 00006 // 00007 // 00008 // @doc 00009 // 00010 // @module MemoryFilter.h | Main header file for MemoryFilter implementation 00011 //*************************************************************************************** 00012 00013 /**************************************************************************************** 00014 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS". 00015 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE 00016 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 00017 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 00018 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 00019 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE . 00020 00021 COPYRIGHT NOTICE. Copyright © 1999-2003 Avid Technology Inc. . All rights reserved. 00022 00023 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries 00024 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other 00025 trademarks contained herein are the property of their respective owners. 00026 ****************************************************************************************/ 00027 00028 #ifndef _MEMORYFILTER_H_ 00029 #define _MEMORYFILTER_H_ 00030 00031 #include <SIBCUtil.h> 00032 #include <SIBCString.h> 00033 #include "SIBCArray.h" 00034 00035 #include "CXSIFilter.h" 00036 00037 #define MEMORY_FILTER_NAME "MEMORY" 00038 #define MEMORY_FILTER_ID "mem" 00039 00040 #define BUFFER_SIZE (128 * 1024) 00041 00043 /* 00044 * This class will gather up to a certain size of data until it calls its subfilter to 00045 * write or it will read up to a certain size in one go and answer to request until it 00046 * has exhausted the data at which point it will ask its subfilter for more data. 00047 */ 00048 class CMemoryFilter : public CXSIFilter 00049 { 00050 public: 00054 CMemoryFilter(); 00058 virtual ~CMemoryFilter(); 00059 00064 int Open ( CSIBCString in_szFilename, _SI_FILE_MODE in_Mode ); 00067 int Close (); 00068 00074 int Read ( SI_Char * out_pBuffer, SI_Long in_lSize ); 00080 int Write( SI_Char * in_pBuffer, SI_Long in_lSize ); 00081 00082 00086 int Eof(); 00090 int Tell(); 00091 00092 void WriteHeader(); 00093 void SetHeader ( CSIBCString in_szHeader ); 00094 CSIBCString GetHeader () { return GetLastHeader(); } 00095 static CSIBCString GetLastHeader(); 00096 private: 00097 void Flush(); 00098 void FillBuffer(); 00099 00100 char *m_pBuffer; 00101 int m_lPosition; 00102 SI_Long m_lSizeRead; 00103 bool m_bHeaderSkipped; 00104 bool m_bReadMode; 00105 static SI_Char m_cHeader[17]; 00106 static CSIBCArray<SI_Char*> m_blocks; 00107 static CSIBCArray<SI_Int> m_blockSize; 00108 SI_Long m_lBufIndex; 00109 }; 00110 00111 #endif