4#ifndef _Stroika_Foundation_Containers_DataHyperRectangle_h_
5#define _Stroika_Foundation_Containers_DataHyperRectangle_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
10#include "Stroika/Foundation/Containers/Common.h"
35 using Traversal::Iterable;
36 using Traversal::Iterator;
60 template <
typename T,
typename... INDEXES>
104 nonvirtual T GetAt (INDEXES... indexes)
const;
113 template <
typename INDEX,
typename... REST_OF_INDEXES>
114 struct TemporarySliceReference_ {
116 tuple<REST_OF_INDEXES...> fSliceIdxes;
117 T operator[] (INDEX i)
const
119 return fCube.GetAt (i, forward<REST_OF_INDEXES> (fSliceIdxes)...);
129 template <
typename INDEX,
typename... REST_OF_INDEXES>
130 nonvirtual TemporarySliceReference_<REST_OF_INDEXES...> operator[] (INDEX i1)
const;
133 template <
typename ELEMENT_EQUALS_COMPARER = equal_to<T>>
134 struct EqualsComparer;
140 requires (equality_comparable<T>);
145 template <
typename T2>
146 using _SafeReadRepAccessor =
typename inherited::template _SafeReadRepAccessor<T2>;
151 template <
typename T2>
152 using _SafeReadWriteRepAccessor =
typename inherited::template _SafeReadWriteRepAccessor<T2>;
155 nonvirtual
void _AssertRepValidType ()
const;
164 template <
typename T,
typename... INDEXES>
173 virtual ~_IRep () =
default;
176 virtual shared_ptr<_IRep> CloneEmpty ()
const = 0;
177 virtual T GetAt (INDEXES... indexes)
const = 0;
183 template <
typename T,
typename... INDEXES>
184 template <
typename ELEMENT_EQUALS_COMPARER>
186 constexpr EqualsComparer (
const ELEMENT_EQUALS_COMPARER& elementComparer = {});
188 ELEMENT_EQUALS_COMPARER fElementComparer_;
191 namespace Private_DataHyperRectangle_ {
192 template <
typename T,
template <
typename,
typename...>
class BASE_TEMPLATE>
196 template <
size_t... S>
197 struct Helper_<index_sequence<S...>> {
198 using CombinedType = BASE_TEMPLATE<T,
decltype (S)...>;
206 template <
typename T,
size_t N>
208 typename Private_DataHyperRectangle_::template NTemplate<T, DataHyperRectangle>::template Helper_<make_index_sequence<N>>::CombinedType;
218#include "DataHyperRectangle.inl"
Implementation detail for DataHyperRectangle<T, INDEXES...> implementors.
nonvirtual void SetAt(INDEXES... indexes, Common::ArgByValueType< T > v)
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
T value_type
value_type is an alias for the type iterated over - like vector<T>::value_type
conditional_t<(sizeof(CHECK_T)<=2 *sizeof(void *)) and is_trivially_copyable_v< CHECK_T >, CHECK_T, const CHECK_T & > ArgByValueType
This is an alias for 'T' - but how we want to pass it on stack as formal parameter.
typename Private_DataHyperRectangle_::template NTemplate< T, DataHyperRectangle >::template Helper_< make_index_sequence< N > >::CombinedType DataHyperRectangleN