diff options
author | Claudius Holeksa <mail@keldu.de> | 2023-06-14 12:51:20 +0200 |
---|---|---|
committer | Claudius Holeksa <mail@keldu.de> | 2023-06-14 12:51:20 +0200 |
commit | 7779119ea724987128ebd4bb4c0433dee8b5f877 (patch) | |
tree | fa982e320eb93bfd5fb7ff6440739b77273359f8 /src/codec | |
parent | 85398a9410a3ab36786c1e436986309ee6163f2f (diff) |
c++: Let test run in test-case derivation and ammend changed schema
dimension changes
Diffstat (limited to 'src/codec')
-rw-r--r-- | src/codec/data.h | 25 | ||||
-rw-r--r-- | src/codec/schema.h | 6 |
2 files changed, 26 insertions, 5 deletions
diff --git a/src/codec/data.h b/src/codec/data.h index 469e214..5e6fd25 100644 --- a/src/codec/data.h +++ b/src/codec/data.h @@ -76,6 +76,27 @@ private: }; template<typename... T, string_literal... literals> +class data<schema::Union<schema::Member<T, literals>...>, encode::Native> { +private: + std::variant<data<T,encode::Native>...> value_; +public: + data() = default; + + SAW_DEFAULT_COPY(data); + SAW_DEFAULT_MOVE(data); + + template<string_literal lit> + bool holds_alternative() const { + return std::holds_alternative<parameter_key_pack_index<lit, literals...>::value>(value_); + } + + template<string_literal lit> + data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value>::type, encode::Native>& get(){ + return std::get<parameter_key_pack_index<lit, literals...>::value>(value_); + } +}; + +template<typename... T, string_literal... literals> class data<schema::Struct<schema::Member<T, literals>...>, encode::Native> { private: std::tuple<data<T,encode::Native>...> value_; @@ -135,8 +156,8 @@ public: } }; -template<typename T> -class data<schema::Array<T>, encode::Native> { +template<typename T, size_t Dim> +class data<schema::Array<T,Dim>, encode::Native> { private: std::vector<data<T, encode::Native>> value_; public: diff --git a/src/codec/schema.h b/src/codec/schema.h index df9f443..2a548df 100644 --- a/src/codec/schema.h +++ b/src/codec/schema.h @@ -26,17 +26,17 @@ template <typename... T> struct Union { template <typename... V, string_literal... K> struct Union<Member<V, K>...> {}; -template <typename T> struct Array {}; +template <typename T, size_t Dim = 1> struct Array {}; template <class T> struct is_array { constexpr static bool value = false; }; -template <class T> struct is_array<schema::Array<T>> { +template <class T, size_t Dim> struct is_array<schema::Array<T,Dim>> { constexpr static bool value = true; }; -template<typename T, size_t S> struct FixedArray {}; +template<typename T, size_t... S> struct FixedArray {}; template <typename... T> struct Tuple {}; |