From ee644efa0c6bf9e5e31e5eb59df49f99d4175876 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 14 Feb 2024 19:57:38 +0100 Subject: clean up the vector wrapper --- compat/vector-wrapper-fwd.hpp | 5 ++--- compat/vector-wrapper.hpp | 15 +++++++++------ loader/ground-cell.cpp | 1 - src/path-search-result.cpp | 2 +- src/path-search-result.hpp | 2 +- 5 files changed, 13 insertions(+), 12 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 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 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 namespace floormat { -template +template struct vector_wrapper_traits; + +template struct vector_wrapper_traits { using vector_type = std::vector&; }; +template struct vector_wrapper_traits { using vector_type = const std::vector&; }; +template struct vector_wrapper_traits { using vector_type = std::vector; }; + +template struct vector_wrapper final { - using vector_type = std::conditional_t, const std::vector>, std::vector>; - using qualified_type = std::conditional_t, vector_type, vector_type&>; - - qualified_type vec; + typename vector_wrapper_traits::vector_type vec; }; } // namespace floormat diff --git a/loader/ground-cell.cpp b/loader/ground-cell.cpp index 82829b62..21982bd0 100644 --- a/loader/ground-cell.cpp +++ b/loader/ground-cell.cpp @@ -1,5 +1,4 @@ #include "ground-cell.hpp" -#include "compat/vector-wrapper.hpp" #include "loader/loader.hpp" #include "serialize/json-helper.hpp" //#include "serialize/corrade-string.hpp" diff --git a/src/path-search-result.cpp b/src/path-search-result.cpp index d805bd31..afc4bf59 100644 --- a/src/path-search-result.cpp +++ b/src/path-search-result.cpp @@ -93,7 +93,7 @@ const point& path_search_result::operator[](size_t index) const fm_debug_assert(index < _node->vec.size()); return data()[index]; } -vector_wrapper path_search_result::raw_path() { fm_assert(_node); return {_node->vec}; } +vector_wrapper path_search_result::raw_path() { fm_assert(_node); return {_node->vec}; } ArrayView path_search_result::path() const { fm_assert(_node); return {_node->vec.data(), _node->vec.size()}; } } // namespace floormat diff --git a/src/path-search-result.hpp b/src/path-search-result.hpp index b12b23d3..d29fdc44 100644 --- a/src/path-search-result.hpp +++ b/src/path-search-result.hpp @@ -24,7 +24,7 @@ struct path_search_result final uint32_t distance() const; void set_distance(uint32_t dist); - vector_wrapper raw_path(); + vector_wrapper raw_path(); ArrayView path() const; explicit operator ArrayView() const; explicit operator bool() const; -- cgit v1.2.3