Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
DataHyperRectangle.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5#include "Stroika/Foundation/Common/Concepts.h"
6#include "Stroika/Foundation/Containers/Private/IterableUtils.h"
8
10
11 /*
12 ********************************************************************************
13 ************************ DataHyperRectangle<T, INDEXES> ************************
14 ********************************************************************************
15 */
16 template <typename T, typename... INDEXES>
18 : inherited{src}
19 {
20 _AssertRepValidType ();
21 }
22 template <typename T, typename... INDEXES>
23 inline DataHyperRectangle<T, INDEXES...>::DataHyperRectangle (DataHyperRectangle<T, INDEXES...>&& src) noexcept
24 : inherited{move (src)}
25 {
26 _AssertRepValidType ();
27 }
28 template <typename T, typename... INDEXES>
29 inline DataHyperRectangle<T, INDEXES...>::DataHyperRectangle (const shared_ptr<_IRep>& src) noexcept
30 : inherited{src}
31 {
32 RequireNotNull (src);
33 _AssertRepValidType ();
34 }
35 template <typename T, typename... INDEXES>
36 inline DataHyperRectangle<T, INDEXES...>::DataHyperRectangle (shared_ptr<_IRep>&& src) noexcept
37 : inherited{(RequireExpression (src != nullptr), move (src))}
38 {
39 _AssertRepValidType ();
40 }
41 template <typename T, typename... INDEXES>
42 inline T DataHyperRectangle<T, INDEXES...>::GetAt (INDEXES... indexes) const
43 {
44 return _SafeReadRepAccessor<_IRep>{this}._ConstGetRep ().GetAt (forward<INDEXES> (indexes)...);
45 }
46 template <typename T, typename... INDEXES>
48 {
49 _SafeReadWriteRepAccessor<_IRep>{this}._GetWriteableRep ().SetAt (forward<INDEXES> (indexes)..., v);
50 }
51 template <typename T, typename... INDEXES>
53 {
55 _SafeReadRepAccessor<_IRep>{this};
56 }
57 }
58 template <typename T, typename... INDEXES>
59 constexpr bool DataHyperRectangle<T, INDEXES...>::operator== (const DataHyperRectangle& rhs) const
60 requires (equality_comparable<T>)
61 {
62 return EqualsComparer<>{}(*this, rhs);
63 }
64
65 /*
66 ********************************************************************************
67 ************* DataHyperRectangle<T, INDEXES...>::EqualsComparer ****************
68 ********************************************************************************
69 */
70 template <typename T, typename... INDEXES>
71 template <typename ELEMENT_EQUALS_COMPARER>
72 constexpr DataHyperRectangle<T, INDEXES...>::EqualsComparer<ELEMENT_EQUALS_COMPARER>::EqualsComparer (const ELEMENT_EQUALS_COMPARER& elementComparer)
73 : fElementComparer_{elementComparer}
74 {
75 }
76 template <typename T, typename... INDEXES>
77 template <typename ELEMENT_EQUALS_COMPARER>
78 inline bool DataHyperRectangle<T, INDEXES...>::EqualsComparer<ELEMENT_EQUALS_COMPARER>::operator() (const DataHyperRectangle& lhs,
79 const DataHyperRectangle& rhs) const
80 {
81 return lhs.SequenceEquals (rhs, fElementComparer_);
82 }
83
84}
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
Definition Assertions.h:48
#define RequireNotNull(p)
Definition Assertions.h:347
#define RequireExpression(c)
Definition Assertions.h:267
nonvirtual void SetAt(INDEXES... indexes, Common::ArgByValueType< T > v)
DataHyperRectangle(const DataHyperRectangle< T, INDEXES... > &src) noexcept
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
Definition Iterable.h:237
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.
Definition TypeHints.h:32