summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2023-10-19 20:46:31 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2023-10-19 20:46:31 +0200
commit11fc30c02087768c90650c53be4a6e76b5f879e0 (patch)
tree1eef14107e3cc426bdf78c034dc40320ac929f16
parent378b5e1941337f89e324e878ffafc354c9435172 (diff)
core: Fixed compilation issues
-rw-r--r--c++/core/id.h17
-rw-r--r--c++/core/id_map.h22
-rw-r--r--tests/core.cpp35
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");
+ }
+}
}