- added BaseObject class, a CRTP approach to get unique ids and a hierarchy (also...
authorAkiko <akiko@linux-addicted.net>
Wed, 16 Oct 2013 09:14:37 +0000 (11:14 +0200)
committerAkiko <akiko@linux-addicted.net>
Wed, 16 Oct 2013 09:14:37 +0000 (11:14 +0200)
common/BaseObject.hxx [new file with mode: 0644]

diff --git a/common/BaseObject.hxx b/common/BaseObject.hxx
new file mode 100644 (file)
index 0000000..aac6b25
--- /dev/null
@@ -0,0 +1,69 @@
+#pragma once
+
+#include <chrono>
+#include <string>
+#include <typeindex>
+
+template <typename Class>
+class BaseObject {
+private:
+    using HRC = std::chrono::high_resolution_clock;
+    using TP = std::chrono::time_point<HRC>;
+
+    const TP _pcid;              // parent class id
+    const TP _cid;               // class id
+    const std::type_index _cidx; // unique identifier
+
+public:
+    BaseObject()
+    : _pcid(TP::duration::zero()), _cid(HRC::now()), _cidx(typeid (Class))
+    {
+    }
+
+    BaseObject(const BaseObject& rhs)
+    : _pcid(rhs._cid), _cid(HRC::now()), _cidx(rhs._cidx)
+    {
+    }
+
+    BaseObject(const BaseObject&& rhs)
+    : _pcid(std::move(rhs._pcid)), _cid(std::move(rhs._cid)), _cidx(rhs._cidx)
+    {
+    }
+
+    virtual ~BaseObject()
+    {
+    }
+
+    BaseObject& operator=(const BaseObject& rhs)
+    {
+        _pcid = rhs._cid;
+        _cid = HRC::now();
+        _cidx = rhs._cidx;
+
+        return *this;
+    }
+
+    BaseObject& operator=(const BaseObject&& rhs)
+    {
+        _pcid = std::move(rhs._pcid);
+        _cid = std::move(rhs._cid);
+        _cidx = std::move(rhs._cidx);
+
+        return *this;
+    }
+
+    size_t pcid() const
+    {
+        return _pcid;
+    }
+
+    size_t cid() const
+    {
+        return _cid;
+    }
+
+    std::type_index cindex() const
+    {
+        return _cidx;
+    }
+};