summaryrefslogtreecommitdiff
path: root/modules/codec/c++/data.hpp
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2024-04-11 15:29:04 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2024-04-11 15:29:04 +0200
commit188692a048b28361f91150b2e93804dfb944bf9c (patch)
tree83ddf60264bda299d4be075728f8e6213f1404d5 /modules/codec/c++/data.hpp
parent5c6ceae33853af5c04adf9d46804e878f58e7893 (diff)
codec: Added mixed precision schema and implemented their native data
type
Diffstat (limited to 'modules/codec/c++/data.hpp')
-rw-r--r--modules/codec/c++/data.hpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp
index a10ee9d..2adb5b7 100644
--- a/modules/codec/c++/data.hpp
+++ b/modules/codec/c++/data.hpp
@@ -126,8 +126,36 @@ public:
bool operator<(const data<schema::Primitive<T,N>, Enc>& rhs) const {
return get() < rhs.get();
}
+
+ /**
+ * Casts
+ */
+ template<typename Target>
+ data<Target, encode::Native> cast_to(){
+ auto raw_to = static_cast<typename saw::native_data_type<Target>::type>(value_);
+ return {raw_to};
+ }
};
+template<typename TA, uint64_t NA, typename TB, uint64_t NB>
+class data<schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>, encode::Native>{
+public:
+ using Schema = schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>;
+private:
+ data<typename Schema::StorageSchema, encode::Native> value_;
+public:
+ data():value_{}{}
+
+ data(typename saw::native_data_type<typename Schema::InterfaceSchema>::type val__):value_{static_cast<typename saw::native_data_type<typename Schema::StorageSchema>::type>(val__)}{}
+
+ typename saw::native_data_type<typename Schema::InterfaceSchema>::type get() const {
+ return value_.template cast_to<typename Schema::InterfaceSchema>().get();
+ }
+
+ void set(typename saw::native_data_type<typename Schema::InterfaceSchema>::type val){
+ value_.set(val.template cast_to<typename Schema::StorageSchema>().get());
+ }
+};
template<typename... T, string_literal... literals>
class data<schema::Union<schema::Member<T, literals>...>, encode::Native> {