Diffstat (limited to 'noncore/apps/opie-reader/CSource.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/CSource.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/noncore/apps/opie-reader/CSource.h b/noncore/apps/opie-reader/CSource.h new file mode 100644 index 0000000..2885f72 --- a/dev/null +++ b/noncore/apps/opie-reader/CSource.h @@ -0,0 +1,62 @@ +#ifndef __CSOURCE_H +#define __CSOURCE_H + +class CInfo +{ + public: + virtual unsigned long size() = 0; +}; + +class CSource : public CInfo +{ + public: + virtual int get() = 0; +}; + +class CSink : public CInfo +{ + public: + virtual void put(unsigned char c) = 0; +}; + +class CMemSource : public CSource +{ + unsigned long m_total_size; + unsigned long m_current; + unsigned char* m_buffer; + public: + CMemSource(unsigned char* _buffer, unsigned long _size) + : + m_total_size(_size), + m_current(0), + m_buffer(_buffer) + {} + unsigned long size() { return m_current; } + int get() + { + return ((m_current < m_total_size) ? m_buffer[m_current++] : -1); + } +}; + +class CMemSink : public CSink +{ + unsigned long m_total_size; + unsigned long m_current; + unsigned char* m_buffer; + public: + CMemSink(unsigned char* _buffer, unsigned long _size) + : + m_total_size(_size), + m_current(0), + m_buffer(_buffer) + {} + unsigned long size() { return m_current; } + void put(unsigned char c) + { + if (m_current < m_total_size) + { + m_buffer[m_current++] = c; + } + } +}; +#endif |