summaryrefslogtreecommitdiff
path: root/modules/codec/c++
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/c++')
-rw-r--r--modules/codec/c++/data.hpp52
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>