summaryrefslogtreecommitdiffstats
path: root/src/OrderedQueue.h
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2017-02-12 19:02:45 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2017-02-12 19:02:45 +0100
commitb396a7eff34173fd4a9e48d8e4cfa5bab7fa603f (patch)
tree34e1d78c8c358cf329aa6c049e5ca02bcf87d82f /src/OrderedQueue.h
downloadODR-SourceCompanion-b396a7eff34173fd4a9e48d8e4cfa5bab7fa603f.tar.gz
ODR-SourceCompanion-b396a7eff34173fd4a9e48d8e4cfa5bab7fa603f.tar.bz2
ODR-SourceCompanion-b396a7eff34173fd4a9e48d8e4cfa5bab7fa603f.zip
Add initial copy-pasted code
Diffstat (limited to 'src/OrderedQueue.h')
-rw-r--r--src/OrderedQueue.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/OrderedQueue.h b/src/OrderedQueue.h
new file mode 100644
index 0000000..5b4a965
--- /dev/null
+++ b/src/OrderedQueue.h
@@ -0,0 +1,65 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 2017 AVT GmbH - Fabien Vercasson
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifndef _ORDERED_QUEUE_H_
+#define _ORDERED_QUEUE_H_
+
+#include <stdint.h>
+#include <stdio.h>
+#include <string>
+#include <map>
+#include <vector>
+
+class OrderedQueueData;
+
+class OrderedQueue
+{
+ public:
+ OrderedQueue(int32_t countModulo, size_t capacity);
+ ~OrderedQueue();
+
+ void push(int32_t count, const uint8_t* buf, size_t size);
+ bool availableData();
+ size_t pop(std::vector<uint8_t>& buf, int32_t* retCount=NULL);
+
+ private:
+ int32_t _countModulo;
+ size_t _capacity;
+ uint64_t _duplicated;
+ uint64_t _overruns;
+ int32_t _lastCount;
+
+ std::map<int, OrderedQueueData*> _stock;
+ typedef std::map<int, OrderedQueueData*>::iterator StockIterator;
+};
+
+class OrderedQueueData
+{
+ public:
+ OrderedQueueData(const uint8_t* data, size_t size);
+ ~OrderedQueueData();
+
+ uint8_t* getData() { return _data; }
+ size_t getSize() { return _size; }
+
+ private:
+ uint8_t* _data;
+ size_t _size;
+};
+
+#endif // _ORDERED_QUEUE_H_