diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2024-04-11 15:29:04 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2024-04-11 15:29:04 +0200 |
commit | 188692a048b28361f91150b2e93804dfb944bf9c (patch) | |
tree | 83ddf60264bda299d4be075728f8e6213f1404d5 /modules/codec/c++/data.hpp | |
parent | 5c6ceae33853af5c04adf9d46804e878f58e7893 (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.hpp | 28 |
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> { |