From a0fd3902ebd44b71505c71ab9efcf1b8da74d104 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 17 Oct 2023 02:31:29 +0200 Subject: core: Experimental idea for describing object relations with IDs --- c++/core/id.h | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'c++/core') diff --git a/c++/core/id.h b/c++/core/id.h index f23d206..cebb3bc 100644 --- a/c++/core/id.h +++ b/c++/core/id.h @@ -1,13 +1,25 @@ #pragma once namespace saw { +/** + * ID class which is tied to it's representing class + */ template class id { private: + /** + * Alias for the value type representing the ID + */ using type = uint64_t; + /** + * The low level value + */ type value_; public: + /** + * Basic constructor for the id class + */ id(type val): value_{val} {} @@ -15,16 +27,45 @@ public: SAW_DEFAULT_COPY(id); SAW_DEFAULT_MOVE(id); + /** + * Equal operator for the id. + * Returns true if equal, false otherwise. + */ bool operator==(const id& rhs) const { return value_ == rhs.value_; } + /** + * Unequal operator for the id. + * Returns false if equal, true otherwise. + */ bool operator!=(const id& rhs) const { return !(*this == rhs); } - type get_value() const { + /** + * Returns a const ref of the underlying base type. + * Mostly used for internal purposes. + */ + const type& get_value() const { return value_; } }; + +/** + * @experimental + * Container for a class which has relations to the provided id classes. + * Meant as an idea for a generic class which uses this + */ +template +class obj_owns_ids { +private: + std::tuple children_; + T obj_; +public: + obj_owns_ids(T obj, Ids... children): + obj_{std::move(obj)}, + children_{std::move(children)} + {} +}; } -- cgit v1.2.3