From dee24810c09d05ff227b5488b88d690e23edd211 Mon Sep 17 00:00:00 2001 From: Akiko Date: Wed, 16 Oct 2013 11:14:37 +0200 Subject: [PATCH] - added BaseObject class, a CRTP approach to get unique ids and a hierarchy (also useful for doing item tracking *hint*) --- common/BaseObject.hxx | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 common/BaseObject.hxx diff --git a/common/BaseObject.hxx b/common/BaseObject.hxx new file mode 100644 index 0000000..aac6b25 --- /dev/null +++ b/common/BaseObject.hxx @@ -0,0 +1,69 @@ +#pragma once + +#include +#include +#include + +template +class BaseObject { +private: + using HRC = std::chrono::high_resolution_clock; + using TP = std::chrono::time_point; + + 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; + } +}; -- 2.15.1