summaryrefslogtreecommitdiffhomepage
path: root/compat/vector-wrapper.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'compat/vector-wrapper.hpp')
-rw-r--r--compat/vector-wrapper.hpp15
1 files changed, 9 insertions, 6 deletions
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