diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-02-14 19:57:38 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-02-14 19:57:38 +0100 |
commit | ee644efa0c6bf9e5e31e5eb59df49f99d4175876 (patch) | |
tree | 7715c418977f37f139ca89465df471cd2d8589f4 /compat | |
parent | c775f4a2b2ade7767d0028ec69f847006805c6b7 (diff) |
clean up the vector wrapper
Diffstat (limited to 'compat')
-rw-r--r-- | compat/vector-wrapper-fwd.hpp | 5 | ||||
-rw-r--r-- | compat/vector-wrapper.hpp | 15 |
2 files changed, 11 insertions, 9 deletions
diff --git a/compat/vector-wrapper-fwd.hpp b/compat/vector-wrapper-fwd.hpp index 4e4ab371..f3da48bc 100644 --- a/compat/vector-wrapper-fwd.hpp +++ b/compat/vector-wrapper-fwd.hpp @@ -2,15 +2,14 @@ namespace floormat { -template<typename T> struct vector_wrapper; - enum class vector_wrapper_repr : uint8_t // todo! use this { invalid, lvalue_reference_to_vector, const_reference_to_vector, vector, - //rvalue_reference_to_vector, }; +template<typename T, vector_wrapper_repr> struct vector_wrapper; + } // namespace floormat diff --git a/compat/vector-wrapper.hpp b/compat/vector-wrapper.hpp index cb6e7549..5bbb8677 100644 --- a/compat/vector-wrapper.hpp +++ b/compat/vector-wrapper.hpp @@ -1,16 +1,19 @@ #pragma once -#include "vector-wrapper-fwd.hpp" // todo! +#include "vector-wrapper-fwd.hpp" #include <vector> namespace floormat { -template<typename T> +template<typename T, vector_wrapper_repr> struct vector_wrapper_traits; + +template<typename T> struct vector_wrapper_traits<T, vector_wrapper_repr::lvalue_reference_to_vector> { using vector_type = std::vector<T>&; }; +template<typename T> struct vector_wrapper_traits<T, vector_wrapper_repr::const_reference_to_vector> { using vector_type = const std::vector<T>&; }; +template<typename T> struct vector_wrapper_traits<T, vector_wrapper_repr::vector> { using vector_type = std::vector<T>; }; + +template<typename T, vector_wrapper_repr R> struct vector_wrapper final { - using vector_type = std::conditional_t<std::is_const_v<T>, const std::vector<std::remove_const_t<T>>, std::vector<T>>; - using qualified_type = std::conditional_t<std::is_const_v<T>, vector_type, vector_type&>; - - qualified_type vec; + typename vector_wrapper_traits<T, R>::vector_type vec; }; } // namespace floormat |