summaryrefslogtreecommitdiffstats
path: root/veslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h
diff options
context:
space:
mode:
Diffstat (limited to 'veslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h')
-rwxr-xr-xveslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/veslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h b/veslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h
new file mode 100755
index 0000000..2168a58
--- /dev/null
+++ b/veslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "XQueue.h"
+#include "leveldb/db.h"
+#include <atomic>
+#include <chrono>
+
+namespace vagt
+{
+ namespace queue
+ {
+ class XDiskQueue : public XQueue
+ {
+ public:
+ XDiskQueue(const std::string& path);
+ ~XDiskQueue();
+ virtual bool empty() override;
+ virtual XErrorCode push(const std::string & val) override;
+ virtual void pop() override;
+ virtual std::string front() override;
+ private:
+ std::string createKey();
+ void tryCompact(const std::string& key);
+
+ std::atomic<long> keyId_;
+ char key[32];
+ std::chrono::system_clock::time_point compactTime_;
+
+ leveldb::DB* db_;
+ leveldb::ReadOptions opt_;
+ leveldb::Iterator* it_;
+ };
+ }
+}