summaryrefslogtreecommitdiff
path: root/ext/mplex/vector.hh
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mplex/vector.hh')
-rw-r--r--ext/mplex/vector.hh71
1 files changed, 71 insertions, 0 deletions
diff --git a/ext/mplex/vector.hh b/ext/mplex/vector.hh
new file mode 100644
index 000000000..9a4f04135
--- /dev/null
+++ b/ext/mplex/vector.hh
@@ -0,0 +1,71 @@
+#ifndef __AUSTREAM_H__
+#define __AUSTREAM_H__
+
+#include <config.h>
+#include <deque>
+#include "mjpeg_logging.h"
+#include "aunit.hh"
+
+class AUStream
+{
+public:
+ AUStream ();
+
+ void init (Aunit * rec);
+
+ void append (Aunit & rec)
+ {
+ if (size == BUF_SIZE)
+ mjpeg_error_exit1 ("INTERNAL ERROR: AU buffer overflow");
+ *buf[cur_wr] = rec;
+ ++size;
+ ++cur_wr;
+ cur_wr = cur_wr >= BUF_SIZE ? 0 : cur_wr;
+ }
+
+ inline Aunit *next ()
+ {
+ if (size == 0) {
+ return 0;
+ } else {
+ Aunit *ret;
+
+ ret = buf[cur_rd];
+ ++cur_rd;
+ ++totalctr;
+ --size;
+ cur_rd = cur_rd >= BUF_SIZE ? 0 : cur_rd;
+ return ret;
+ }
+ }
+
+ inline Aunit *lookahead ()
+ {
+ return size == 0 ? 0 : buf[cur_rd];
+ }
+
+ inline Aunit *last ()
+ {
+ int i = cur_wr - 1 < 0 ? BUF_SIZE - 1 : cur_wr - 1;
+
+ return buf[i];
+ }
+
+ static const unsigned int BUF_SIZE = 128;
+
+ inline unsigned int current ()
+ {
+ return totalctr;
+ }
+//private:
+ unsigned int cur_rd;
+ unsigned int cur_wr;
+ unsigned int totalctr;
+ unsigned int size;
+ Aunit **buf;
+};
+
+
+
+
+#endif // __AUSTREAM_H__