MemoryFilter.h

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