summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2026-11-07 19:05:48 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2026-11-07 19:05:48 +0100
commitd2a6c799e2e6aaf58e04ef1304e5cef79f5b2a62 (patch)
tree84c38bb076197e9eef6187ac5ea6d41da18905f6
parent2e836ead5c10f00917560e9a98d46b59b2f977d4 (diff)
downloadforstio-forstio-d2a6c799e2e6aaf58e04ef1304e5cef79f5b2a62.tar.gz
Adding proper Booldev
-rw-r--r--modules/codec/c++/data.hpp52
-rw-r--r--modules/codec/tests/data.cpp21
2 files changed, 68 insertions, 5 deletions
diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp
index a8b7836..6413bb7 100644
--- a/modules/codec/c++/data.hpp
+++ b/modules/codec/c++/data.hpp
@@ -101,26 +101,68 @@ public:
};
template<>
-class data<schema::Bool, encode::Native> {
+class data<schema::Bool, encode::Native> final {
public:
using Schema = schema::Bool;
using MetaSchema = schema::Void;
private:
bool value_;
public:
- data():value_{false}{}
- data(data<MetaSchema, encode::Native>):value_{false}{}
+ constexpr data():value_{false}{}
+ constexpr data(data<MetaSchema, encode::Native>):value_{false}{}
SAW_DEFAULT_COPY(data);
SAW_DEFAULT_MOVE(data);
- void set(bool val){
+ constexpr data(bool value__):
+ value_{value__}
+ {}
+
+ constexpr void set(bool val){
value_ = val;
}
- bool get() const {
+ constexpr bool get() const {
return value_;
}
+
+ template<typename Enc = encode::Native>
+ constexpr bool equals(const data<Schema, Enc>& rhs) const {
+ return get() == rhs.get();
+ }
+
+ template<typename Enc>
+ constexpr bool operator==(const data<Schema, Enc>& rhs) const {
+ return equals(rhs);
+ }
+
+ template<typename Enc>
+ constexpr bool operator!=(const data<Schema, Enc>& rhs) const {
+ return get() != rhs.get();
+ }
+
+ constexpr data<Schema, encode::Native> operator!() const {
+ return {!get()};
+ }
+
+ template<typename Enc>
+ constexpr data<Schema, encode::Native> operator&&(const data<Schema, Enc>& rhs) const {
+ return {get() && rhs.get()};
+ }
+
+ template<typename Enc>
+ constexpr data<Schema, encode::Native> operator||(const data<Schema, Enc>& rhs) const {
+ return {get() || rhs.get()};
+ }
+
+ /**
+ * Casts
+ */
+ template<typename Target>
+ constexpr data<Target, encode::Native> cast_to() const {
+ auto raw_to = static_cast<typename saw::native_data_type<Target>::type>(value_);
+ return {raw_to};
+ }
};
template<typename T, size_t N>
diff --git a/modules/codec/tests/data.cpp b/modules/codec/tests/data.cpp
index a686b6d..57c56d3 100644
--- a/modules/codec/tests/data.cpp
+++ b/modules/codec/tests/data.cpp
@@ -10,6 +10,27 @@ using Int32Array = Array<
>;
}
+SAW_TEST("Data Native/Bool"){
+ using namespace saw;
+
+ data<sch::Bool> t{true};
+ data<sch::Bool> f;
+
+ SAW_EXPECT(t.get(), "Should hold true");
+ SAW_EXPECT(!f.get(), "Should default to false");
+
+ SAW_EXPECT((t != f), "Should not be equal");
+ SAW_EXPECT(((t && f).get() == false), "Wrong conjunction");
+ SAW_EXPECT(((t || f).get() == true), "Wrong disjunction");
+ SAW_EXPECT(((!f).get() == true), "Wrong negation");
+
+ f.set(true);
+ SAW_EXPECT((t == f), "Should be equal");
+
+ constexpr data<sch::Bool> ct{true};
+ static_assert(ct.get(), "Should be usable at compile time");
+}
+
SAW_TEST("Data Native/Array Access with Data Native"){
using namespace saw;