diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-10-19 20:46:31 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-10-19 20:46:31 +0200 |
commit | 11fc30c02087768c90650c53be4a6e76b5f879e0 (patch) | |
tree | 1eef14107e3cc426bdf78c034dc40320ac929f16 | |
parent | 378b5e1941337f89e324e878ffafc354c9435172 (diff) |
core: Fixed compilation issues
-rw-r--r-- | c++/core/id.h | 17 | ||||
-rw-r--r-- | c++/core/id_map.h | 22 | ||||
-rw-r--r-- | tests/core.cpp | 35 |
3 files changed, 37 insertions, 37 deletions
diff --git a/c++/core/id.h b/c++/core/id.h index cebb3bc..d836648 100644 --- a/c++/core/id.h +++ b/c++/core/id.h @@ -51,21 +51,4 @@ public: 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<typename T, typename... Ids> -class obj_owns_ids { -private: - std::tuple<Ids...> children_; - T obj_; -public: - obj_owns_ids(T obj, Ids... children): - obj_{std::move(obj)}, - children_{std::move(children)} - {} -}; } diff --git a/c++/core/id_map.h b/c++/core/id_map.h index 2ca3025..d8329cf 100644 --- a/c++/core/id_map.h +++ b/c++/core/id_map.h @@ -36,7 +36,7 @@ private: break; } - if((free_ids_.front() + 1) < data_.size()){ + if((free_ids_.front().get_value() + 1) < data_.size()){ break; } @@ -63,7 +63,7 @@ public: /// @todo Fix size_t and id base type if(free_ids_.empty()){ try { - size_t i = data._size(); + size_t i = data_.size(); data_.emplace_back(std::move(val)); return saw::id<T>{i}; } catch(std::exception& e) { @@ -72,15 +72,7 @@ public: } else { auto f_id = std::move(free_ids_.back()); free_ids_.pop_back(); - if(free_ids_.size()*2 <= free_ids_.capacity()){ - try{ - free_ids_.shrink_to_fit(); - }catch(std::exception& e){ - free_ids_.push_back(f_id); - return make_error<err::out_of_memory>(); - } - } - data_.at(f_id.get_value()) = std::move(dat); + data_.at(f_id.get_value()) = std::move(val); return f_id; } @@ -107,14 +99,6 @@ public: if((val.get_value() + 1) == data_.size()){ data_.pop_back(); this->reduce_free_ids(); - if(free_ids_.size()*2 <= free_ids_.capacity()){ - try { - free_ids_.shrink_to_fit(); - }catch(std::exception& e){ - return make_error<err::out_of_memory>(); - } - - } if(data_.size()*2 <= data_.capacity()){ try { data_.shrink_to_fit(); diff --git a/tests/core.cpp b/tests/core.cpp index 485e601..e8d106b 100644 --- a/tests/core.cpp +++ b/tests/core.cpp @@ -1,8 +1,9 @@ #include <forstio/test/suite.h> #include <forstio/core/id.h> +#include <forstio/core/id_map.h> namespace { -SAW_TEST("Basic ID functionality") { +SAW_TEST("ID functionality") { using namespace saw; struct foo {}; @@ -10,8 +11,40 @@ SAW_TEST("Basic ID functionality") { id<foo> b{1}; id<foo> c{2}; + /** + * The following doesn't compile, so it's commented out as an example + */ + /** + * struct bar {}; + * + * id<bar> d{1}; + * + * SAW_EXPECT(a == d, "Shouldn't compile"); + */ + SAW_EXPECT(a == b, "Should be equal"); SAW_EXPECT(a != c, "Shouldn't be equal"); + SAW_EXPECT(b != c, "Shouldn't be equal"); SAW_EXPECT(a.get_value() == 1, "Lost original value"); } + +SAW_TEST("ID Map Insert"){ + using namespace saw; + + struct foo {}; + + id_map<foo> map; + { + auto eoid = map.insert(foo{}); + SAW_EXPECT(eoid.is_value(), "First insert failed"); + + auto& id = eoid.get_value(); + + auto eoid_2 = map.insert(foo{}); + SAW_EXPECT(eoid_2.is_value(), "Second Insert failed"); + + auto eov = map.erase(id); + SAW_EXPECT(eov.is_value(), "Erase failed"); + } +} } |