From d2a6c799e2e6aaf58e04ef1304e5cef79f5b2a62 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sat, 7 Nov 2026 19:05:48 +0100 Subject: Adding proper Bool --- modules/codec/c++/data.hpp | 52 +++++++++++++++++++++++++++++++++++++++----- modules/codec/tests/data.cpp | 21 ++++++++++++++++++ 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 { +class data final { public: using Schema = schema::Bool; using MetaSchema = schema::Void; private: bool value_; public: - data():value_{false}{} - data(data):value_{false}{} + constexpr data():value_{false}{} + constexpr data(data):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 + constexpr bool equals(const data& rhs) const { + return get() == rhs.get(); + } + + template + constexpr bool operator==(const data& rhs) const { + return equals(rhs); + } + + template + constexpr bool operator!=(const data& rhs) const { + return get() != rhs.get(); + } + + constexpr data operator!() const { + return {!get()}; + } + + template + constexpr data operator&&(const data& rhs) const { + return {get() && rhs.get()}; + } + + template + constexpr data operator||(const data& rhs) const { + return {get() || rhs.get()}; + } + + /** + * Casts + */ + template + constexpr data cast_to() const { + auto raw_to = static_cast::type>(value_); + return {raw_to}; + } }; template 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 t{true}; + data 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 ct{true}; + static_assert(ct.get(), "Should be usable at compile time"); +} + SAW_TEST("Data Native/Array Access with Data Native"){ using namespace saw; -- cgit v1.3.1