]> git.mdlowis.com Git - archive/parse-utils.git/commitdiff
Added buffer interface class
authorMike D. Lowis <mike@mdlowis.com>
Fri, 22 Jun 2012 18:13:07 +0000 (14:13 -0400)
committerMike D. Lowis <mike@mdlowis.com>
Fri, 22 Jun 2012 18:13:07 +0000 (14:13 -0400)
source/buffer/ibuffer.cpp [new file with mode: 0644]
source/buffer/ibuffer.h [new file with mode: 0644]

diff --git a/source/buffer/ibuffer.cpp b/source/buffer/ibuffer.cpp
new file mode 100644 (file)
index 0000000..c03943f
--- /dev/null
@@ -0,0 +1,46 @@
+#include "ibuffer.h"
+
+IBuffer::IBuffer()
+{
+}
+
+IBuffer::~IBuffer()
+{
+}
+
+void IBuffer::consume(void)
+{
+    advance();
+    if((location() == size()) && !isMarked())
+    {
+        seek(0);
+        clear();
+    }
+    sync(1);
+}
+
+void IBuffer::sync(unsigned int i)
+{
+    unsigned int next_index = location() + i - 1;
+    unsigned int max_index = (size() - 1);
+
+    if( size() == 0 )
+    {
+        fill(i);
+    }
+    else if( next_index >= max_index )
+    {
+        fill( next_index - max_index);
+    }
+}
+
+void IBuffer::fill(unsigned int n)
+{
+    unsigned int i = 0;
+    for (i = 0; i < n; i++)
+    {
+        load();
+    }
+}
+
+
diff --git a/source/buffer/ibuffer.h b/source/buffer/ibuffer.h
new file mode 100644 (file)
index 0000000..31feabe
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef IBUFFER_H
+#define IBUFFER_H
+
+#include <vector>
+#include "imarker.h"
+
+class IBuffer : public IMarker
+{
+    public:
+        IBuffer();
+        virtual ~IBuffer();
+        void consume(void);
+        void sync(unsigned int i);
+        void fill(unsigned int n);
+        virtual unsigned int size() = 0;
+        virtual void clear() = 0;
+        virtual void load() = 0;
+};
+
+#endif