summaryrefslogtreecommitdiff
path: root/ringbuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'ringbuffer.h')
-rw-r--r--ringbuffer.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/ringbuffer.h b/ringbuffer.h
new file mode 100644
index 00000000..605f553f
--- /dev/null
+++ b/ringbuffer.h
@@ -0,0 +1,55 @@
+/*
+ * ringbuffer.h: A threaded ring buffer
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: ringbuffer.h 1.1 2001/03/18 16:47:00 kls Exp $
+ */
+
+#ifndef __RINGBUFFER_H
+#define __RINGBUFFER_H
+
+#include "thread.h"
+
+typedef unsigned char uchar;
+
+class cRingBufferInputThread;
+class cRingBufferOutputThread;
+
+class cRingBuffer {
+ friend class cRingBufferInputThread;
+ friend class cRingBufferOutputThread;
+private:
+ cRingBufferInputThread *inputThread;
+ cRingBufferOutputThread *outputThread;
+ cMutex mutex;
+ int size, head, tail;
+ uchar *buffer;
+ int maxFill;
+ bool busy;
+protected:
+ bool Busy(void) { return busy; }
+ void Clear(void);
+ // Immediately clears the ring buffer.
+ int Put(const uchar *Data, int Count);
+ // Puts at most Count bytes of Data into the ring buffer.
+ // Returns the number of bytes actually stored.
+ int Get(uchar *Data, int Count);
+ // Gets at most Count bytes of Data from the ring buffer.
+ // Returns the number of bytes actually retrieved.
+ virtual void Input(void) = 0;
+ // Runs as a separate thread and shall continuously read data from
+ // a source and call Put() to store the data in the ring buffer.
+ virtual void Output(void) = 0;
+ // Runs as a separate thread and shall continuously call Get() to
+ // retrieve data from the ring buffer and write it to a destination.
+public:
+ cRingBuffer(int Size);
+ virtual ~cRingBuffer();
+ bool Start(void);
+ bool Active(void);
+ void Stop(void);
+ };
+
+#endif // __RINGBUFFER_H