summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/CSource.h
Side-by-side diff
Diffstat (limited to 'noncore/apps/opie-reader/CSource.h') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-reader/CSource.h62
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