Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
DenseDataHyperRectangle_Vector.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
5#include "Stroika/Foundation/Containers//Private/IteratorImplHelper.h"
8
10
11 /*
12 ********************************************************************************
13 *********** DenseDataHyperRectangle_Vector<T, INDEXES...>::Rep_ ****************
14 ********************************************************************************
15 */
16 template <typename T, typename... INDEXES>
17 class DenseDataHyperRectangle_Vector<T, INDEXES...>::Rep_ : public DenseDataHyperRectangle<T, INDEXES...>::_IRep,
18 public Memory::UseBlockAllocationIfAppropriate<Rep_> {
19 private:
20 using inherited = typename DenseDataHyperRectangle<T, INDEXES...>::_IRep;
21
22 public:
23 Rep_ (INDEXES... dimensions)
24 : fDimensions_ (forward<INDEXES> (dimensions)...)
25 {
26 // AssertNotImplemented ();
27 }
28 Rep_ (const Rep_& from) = default;
29
30 public:
31 nonvirtual Rep_& operator= (const Rep_&) = delete;
32
33 // Iterable<tuple<T, INDEXES...>>::_IRep overrides
34 public:
35 virtual shared_ptr<typename Iterable<tuple<T, INDEXES...>>::_IRep> Clone () const override
36 {
38 return Memory::MakeSharedPtr<Rep_> (*this);
39 }
40 virtual Iterator<tuple<T, INDEXES...>> MakeIterator () const override
41 {
43/// NYI
44#if 0
45 return Iterator<value_type>{Memory::MakeSharedPtr<IteratorRep_> (&fData_, &fChangeCounts_)};
46#endif
47 using RESULT_TYPE = Iterator<tuple<T, INDEXES...>>;
48 return RESULT_TYPE::GetEmptyIterator ();
49 }
50 virtual size_t size () const override
51 {
53 return fData_.size ();
54 }
55 virtual bool empty () const override
56 {
58 return fData_.empty ();
59 }
60 virtual void Apply ([[maybe_unused]] const function<void (ArgByValueType<value_type> item)>& doToElement,
61 [[maybe_unused]] Execution::SequencePolicy seq) const override
62 {
65#if 0
66 fData_.Apply (doToElement);
67#endif
68 }
69 virtual Iterator<tuple<T, INDEXES...>> Find ([[maybe_unused]] const function<bool (ArgByValueType<value_type> item)>& doToElement,
70 [[maybe_unused]] Execution::SequencePolicy se) const override
71 {
73 using RESULT_TYPE = Iterator<tuple<T, INDEXES...>>;
74#if 1
75 /// NYI
76 return RESULT_TYPE::GetEmptyIterator ();
77#else
79 auto iLink = const_cast<DataStructureImplType_&> (fData_).Find (doToElement);
80 if (iLink == fData_.end ()) {
81 return RESULT_TYPE::GetEmptyIterator ();
82 }
83 Traversal::IteratorBase::PtrImplementationTemplate<IteratorRep_> resultRep = make_unique<IteratorRep_> (&fData_, &fChangeCounts_);
84 resultRep->fIterator.SetCurrentLink (iLink);
85 return RESULT_TYPE (move (resultRep));
86#endif
87 }
88
89 // DataHyperRectangle<T, INDEXES...>::_IRep overrides
90 public:
91 virtual shared_ptr<typename DataHyperRectangle<T, INDEXES...>::_IRep> CloneEmpty () const override
92 {
94 // @todo - fix so using differnt CTOR - with no data to remove
95 auto r = Memory::MakeSharedPtr<Rep_> (*this);
96 return r;
97 }
98 DISABLE_COMPILER_MSC_WARNING_START (4100)
99 virtual T GetAt (INDEXES... indexes) const override
100 {
102 /// NYI
103 return T{};
104 }
105 virtual void SetAt ([[maybe_unused]] INDEXES... indexes, [[maybe_unused]] Common::ArgByValueType<T> v) override
106 {
108 fChangeCounts_.PerformedChange ();
109 /// NYI
111 }
112 DISABLE_COMPILER_MSC_WARNING_END (4100)
113
114 private:
115 using DataStructureImplType_ = DataStructures::STLContainerWrapper<vector<T>>;
116 using IteratorRep_ = Private::IteratorImplHelper_<T, DataStructureImplType_>;
117
118 private:
119 tuple<INDEXES...> fDimensions_;
120 DataStructureImplType_ fData_;
121 [[no_unique_address]] Private::ContainerDebugChangeCounts_ fChangeCounts_;
122 };
123
124 /*
125 ********************************************************************************
126 ************** DenseDataHyperRectangle_Vector<T, INDEXES...> *******************
127 ********************************************************************************
128 */
129 template <typename T, typename... INDEXES>
130 DenseDataHyperRectangle_Vector<T, INDEXES...>::DenseDataHyperRectangle_Vector (INDEXES... dimensions)
131 : inherited{Memory::MakeSharedPtr<Rep_> (forward<INDEXES> (dimensions)...)}
132 {
133 AssertRepValidType_ ();
134 }
135 template <typename T, typename... INDEXES>
136 inline DenseDataHyperRectangle_Vector<T, INDEXES...>::DenseDataHyperRectangle_Vector (const DenseDataHyperRectangle_Vector<T, INDEXES...>& src)
137 : inherited{static_cast<const inherited&> (src)}
138 {
139 AssertRepValidType_ ();
140 }
141 template <typename T, typename... INDEXES>
142 inline DenseDataHyperRectangle_Vector<T, INDEXES...>&
143 DenseDataHyperRectangle_Vector<T, INDEXES...>::operator= (const DenseDataHyperRectangle_Vector<T, INDEXES...>& rhs)
144 {
145 AssertRepValidType_ ();
146 inherited::operator= (static_cast<const inherited&> (rhs));
147 AssertRepValidType_ ();
148 return *this;
149 }
150 template <typename T, typename... INDEXES>
151 inline void DenseDataHyperRectangle_Vector<T, INDEXES...>::AssertRepValidType_ () const
152 {
154 typename inherited::template _SafeReadRepAccessor<Rep_> tmp{this}; // for side-effect of AssertMember
155 }
156 }
157
158}
#define AssertNotImplemented()
Definition Assertions.h:401
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
Definition Assertions.h:48
nonvirtual void SetAt(INDEXES... indexes, Common::ArgByValueType< T > v)
DataHyperRectangle(const DataHyperRectangle< T, INDEXES... > &src) noexcept
shared_lock< const AssertExternallySynchronizedMutex > ReadContext
Instantiate AssertExternallySynchronizedMutex::ReadContext to designate an area of code where protect...
unique_lock< AssertExternallySynchronizedMutex > WriteContext
Instantiate AssertExternallySynchronizedMutex::WriteContext to designate an area of code where protec...
nonvirtual void Apply(const function< void(ArgByValueType< T > item)> &doToElement, Execution::SequencePolicy seq=Execution::SequencePolicy::eDEFAULT) const
Run the argument function (or lambda) on each element of the container.
nonvirtual Iterator< T > Find(THAT_FUNCTION &&that, Execution::SequencePolicy seq=Execution::SequencePolicy::eDEFAULT) const
Run the argument bool-returning function (or lambda) on each element of the container,...
nonvirtual size_t size() const
Returns the number of items contained.
Definition Iterable.inl:300
Iterable(const Iterable &) noexcept=default
Iterable are safely copyable (by value). Since Iterable uses COW, this just copies the underlying poi...
nonvirtual bool empty() const
Returns true iff size() == 0.
Definition Iterable.inl:306
nonvirtual Iterator< T > MakeIterator() const
Create an iterator object which can be used to traverse the 'Iterable'.
Definition Iterable.inl:294
SequencePolicy
equivalent which of 4 types being used std::execution::sequenced_policy, parallel_policy,...