diff options
Diffstat (limited to 'modules/codec/c++/data.hpp')
| -rw-r--r-- | modules/codec/c++/data.hpp | 52 |
1 files changed, 47 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> |
