00001 #ifndef __CSOURCE_H 00002 #define __CSOURCE_H 00003 00004 class CInfo 00005 { 00006 public: 00007 virtual unsigned long size() = 0; 00008 }; 00009 00010 class CSource : public CInfo 00011 { 00012 public: 00013 virtual int get() = 0; 00014 }; 00015 00016 class CSink : public CInfo 00017 { 00018 public: 00019 virtual void put(unsigned char c) = 0; 00020 }; 00021 00022 class CMemSource : public CSource 00023 { 00024 unsigned long m_total_size; 00025 unsigned long m_current; 00026 unsigned char* m_buffer; 00027 public: 00028 CMemSource(unsigned char* _buffer, unsigned long _size) 00029 : 00030 m_total_size(_size), 00031 m_current(0), 00032 m_buffer(_buffer) 00033 {} 00034 unsigned long size() { return m_current; } 00035 int get() 00036 { 00037 return ((m_current < m_total_size) ? m_buffer[m_current++] : -1); 00038 } 00039 }; 00040 00041 class CMemSink : public CSink 00042 { 00043 unsigned long m_total_size; 00044 unsigned long m_current; 00045 unsigned char* m_buffer; 00046 public: 00047 CMemSink(unsigned char* _buffer, unsigned long _size) 00048 : 00049 m_total_size(_size), 00050 m_current(0), 00051 m_buffer(_buffer) 00052 {} 00053 unsigned long size() { return m_current; } 00054 void put(unsigned char c) 00055 { 00056 if (m_current < m_total_size) 00057 { 00058 m_buffer[m_current++] = c; 00059 } 00060 } 00061 }; 00062 #endif
1.4.2