Stroika Library 3.0d24
 
Loading...
Searching...
No Matches
DenseDataHyperRectangle_Vector.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. 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,
62 {
65#if 0
66 fData_.Apply (doToElement);
67#endif
68 }
69 virtual Iterator<tuple<T, INDEXES...>> Find ([[maybe_unused]] bool findFirst,
70 [[maybe_unused]] const function<bool (ArgByValueType<value_type> item)>& doToElement,
71 [[maybe_unused]] Execution::SequencePolicy se) const override
72 {
74 using RESULT_TYPE = Iterator<tuple<T, INDEXES...>>;
75#if 1
76 /// NYI
77 return RESULT_TYPE::GetEmptyIterator ();
78#else
80 auto iLink = const_cast<DataStructureImplType_&> (fData_).Find (doToElement);
81 if (iLink == fData_.end ()) {
82 return RESULT_TYPE::GetEmptyIterator ();
83 }
84 Traversal::IteratorBase::PtrImplementationTemplate<IteratorRep_> resultRep = make_unique<IteratorRep_> (&fData_, &fChangeCounts_);
85 resultRep->fIterator.SetCurrentLink (iLink);
86 return RESULT_TYPE (move (resultRep));
87#endif
88 }
89
90 // DataHyperRectangle<T, INDEXES...>::_IRep overrides
91 public:
92 virtual shared_ptr<typename DataHyperRectangle<T, INDEXES...>::_IRep> CloneEmpty () const override
93 {
95 // @todo - fix so using differnt CTOR - with no data to remove
96 auto r = Memory::MakeSharedPtr<Rep_> (*this);
97 return r;
98 }
99 DISABLE_COMPILER_MSC_WARNING_START (4100)
100 virtual T GetAt (INDEXES... indexes) const override
101 {
103 /// NYI
104 return T{};
105 }
106 virtual void SetAt ([[maybe_unused]] INDEXES... indexes, [[maybe_unused]] Common::ArgByValueType<T> v) override
107 {
109 fChangeCounts_.PerformedChange ();
110 /// NYI
112 }
113 DISABLE_COMPILER_MSC_WARNING_END (4100)
114
115 private:
116 using DataStructureImplType_ = DataStructures::STLContainerWrapper<vector<T>>;
117 using IteratorRep_ = Private::IteratorImplHelper_<T, DataStructureImplType_>;
118
119 private:
120 tuple<INDEXES...> fDimensions_;
121 DataStructureImplType_ fData_;
122 qStroika_ATTRIBUTE_NO_UNIQUE_ADDRESS_VCFORCE Private::ContainerDebugChangeCounts_ fChangeCounts_;
123 };
124
125 /*
126 ********************************************************************************
127 ************** DenseDataHyperRectangle_Vector<T, INDEXES...> *******************
128 ********************************************************************************
129 */
131 DenseDataHyperRectangle_Vector<T, INDEXES...>::DenseDataHyperRectangle_Vector (INDEXES... dimensions)
132 : inherited{Memory::MakeSharedPtr<Rep_> (forward<INDEXES> (dimensions)...)}
133 {
134 AssertRepValidType_ ();
135 }
136 template <typename T, typename... INDEXES>
137 inline DenseDataHyperRectangle_Vector<T, INDEXES...>::DenseDataHyperRectangle_Vector (const DenseDataHyperRectangle_Vector<T, INDEXES...>& src)
138 : inherited{static_cast<const inherited&> (src)}
139 {
140 AssertRepValidType_ ();
141 }
142 template <typename T, typename... INDEXES>
143 inline DenseDataHyperRectangle_Vector<T, INDEXES...>&
144 DenseDataHyperRectangle_Vector<T, INDEXES...>::operator= (const DenseDataHyperRectangle_Vector<T, INDEXES...>& rhs)
145 {
146 AssertRepValidType_ ();
147 inherited::operator= (static_cast<const inherited&> (rhs));
148 AssertRepValidType_ ();
149 return *this;
150 }
151 template <typename T, typename... INDEXES>
152 inline void DenseDataHyperRectangle_Vector<T, INDEXES...>::AssertRepValidType_ () const
153 {
155 typename inherited::template _SafeReadRepAccessor<Rep_> tmp{this}; // for side-effect of AssertMember
156 }
157 }
158
159}
#define AssertNotImplemented()
Definition Assertions.h:402
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
Definition Assertions.h:49
#define qStroika_ATTRIBUTE_NO_UNIQUE_ADDRESS_VCFORCE
[[msvc::no_unique_address]] isn't always broken in MSVC. Annotate with this on things where its not b...
Definition StdCompat.h:443
nonvirtual void SetAt(INDEXES... indexes, Common::ArgByValueType< T > v)
DataHyperRectangle(const DataHyperRectangle< T, INDEXES... > &src) noexcept
unique_lock< AssertExternallySynchronizedChecker > WriteContext
Instantiate AssertExternallySynchronizedChecker::WriteContext to designate an area of code where prot...
shared_lock< const AssertExternallySynchronizedChecker > ReadContext
Instantiate AssertExternallySynchronizedChecker::ReadContext to designate an area of code where prote...
nonvirtual Iterator< T > Find(THAT_FUNCTION &&that) const
Run the argument bool-returning function (or lambda) on the elements of the container,...
nonvirtual CONTAINER_OF_T As(CONTAINER_OF_T_CONSTRUCTOR_ARGS... args) const
nonvirtual size_t size() const
Returns the number of items contained.
Definition Iterable.inl:311
nonvirtual void Apply(const function< void(ArgByValueType< T > item)> &doToElement) const
Run the argument function (or lambda) on each element of the container.
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:317
nonvirtual Iterator< T > MakeIterator() const
Create an iterator object which can be used to traverse the 'Iterable'.
Definition Iterable.inl:305
SequencePolicy
equivalent which of 4 types being used std::execution::sequenced_policy, parallel_policy,...