FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
ReferencingMemArray.hpp
1#ifndef __FIBER_REFERENCINGMEMARRAY_HPP
2#define __FIBER_REFERENCINGMEMARRAY_HPP "Created 3.12.2007"
3
4#include "FieldAPI.h"
5#include "MemArrayBase.hpp"
6#include <fiber/vector/MultiArray.hpp>
7#include "TypedArray.hpp"
8
9#include <memcore/Verbose.hpp>
10
11namespace Fiber
12{
13
14template <class T>
15inline std::string element_to_string(const T&element)
16{
17 return std::to_string(element);
18}
19
20template <>
21inline std::string element_to_string(const std::string&element)
22{
23 return "\"" + element + "\"";
24}
25
26
27template<>
28inline std::string element_to_string(const std::vector<unsigned short>&EdgeList)
29{
30std::string retval = "{(" + std::to_string(EdgeList.size()) + ") ";
31
32 if (EdgeList.size()>0)
33 retval += std::to_string(EdgeList[0]);
34
35 for(size_t i = 1; i<EdgeList.size(); i++)
36 {
37 retval += ", " + std::to_string(EdgeList[i]);
38 }
39
40 return retval + " }";
41}
42
43template<>
44inline std::string element_to_string(const std::vector<unsigned int>&EdgeList)
45{
46std::string retval = "{(" + std::to_string(EdgeList.size()) + ") ";
47
48 if (EdgeList.size()>0)
49 retval += std::to_string(EdgeList[0]);
50
51 for(size_t i = 1; i<EdgeList.size(); i++)
52 {
53 retval += ", " + std::to_string(EdgeList[i]);
54 }
55
56 return retval + " }";
57}
58
59template<>
60inline std::string element_to_string(const std::vector<unsigned long>&EdgeList)
61{
62std::string retval = "{(" + std::to_string(EdgeList.size()) + ") ";
63
64 if (EdgeList.size()>0)
65 retval += std::to_string(EdgeList[0]);
66
67 for(size_t i = 1; i<EdgeList.size(); i++)
68 {
69 retval += ", " + std::to_string(EdgeList[i]);
70 }
71
72 return retval + " }";
73}
74
75
76template<>
77inline std::string element_to_string(const std::vector<unsigned long long>&EdgeList)
78{
79std::string retval = "{(" + std::to_string(EdgeList.size()) + ") ";
80
81 if (EdgeList.size()>0)
82 retval += std::to_string(EdgeList[0]);
83
84 for(size_t i = 1; i<EdgeList.size(); i++)
85 {
86 retval += ", " + std::to_string(EdgeList[i]);
87 }
88
89 return retval + " }";
90}
91
92
93
94
95
101template <Dims_t N, class T>
102class ReferencingMemArray : public MemArrayBase<N>, public MultiArray<N, T>,
103 public TypedArray<T>
104{
105protected:
106// RefPtr<MemCore::ChunkBase> myStorage;
108
109public:
112
113
114 using MultiArray<N, T>::begin;
115 using MultiArray<N, T>::end;
116
117
121 const WeakPtr<CreativeArrayBase>&theCreator)
122 : MemBase(FiberType<T>::getFiberType()->getFiberTypeIndex(), theCreator)
123 , MemArrayBase<N>(FiberType<T>::getFiberType()->getFiberTypeIndex(), theCreator)
124 , MultiArray<N, T>(data, Sz)
125 , TypedArray<T>(theCreator)
126 , myStorage(theStorage)
127 {
128 if (!myStorage)
129 Verbose(0) << " Warning: ReferencingMemArray<"<<typeid(T)<<"> constructed with NO storage provided, storage=" << theStorage;
130 }
131
134 : MemBase(FiberType<T>::getFiberType()->getFiberTypeIndex(), theCreator)
135 , MemArrayBase<N>(FiberType<T>::getFiberType()->getFiberTypeIndex(), theCreator)
136 , MultiArray<N, T>( Iterator<T>( data?data->size():0, data?(*data)():0), Sz)
137 , TypedArray<T>(theCreator)
138 , myStorage(data)
139 {
140 if (!myStorage)
141 Verbose(0) << " Warning: ReferencingMemArray<"<<typeid(T)<<">() constructed with NO data provided, data =" << data;
142 }
143
154 : MemBase(FiberType<T>::getFiberType()->getFiberTypeIndex(), theCreator)
155 , MemArrayBase<N>(FiberType<T>::getFiberType()->getFiberTypeIndex(), theCreator)
156 , MultiArray<N, T>( M )
157 , TypedArray<T>(theCreator)
158 , myStorage(theStorage)
159 {
160 if (!myStorage)
161 Verbose(0) << " Warning: ReferencingMemArray<"<<typeid(T)<<">() constructed with NO storage data provided, data =" <<theStorage;
162 }
163
168 : MemBase(FiberType<T>::getFiberType()->getFiberTypeIndex(), RMA.myCreator() )
169 , MemArrayBase<N>(FiberType<T>::getFiberType()->getFiberTypeIndex(), RMA.myCreator() )
170 , MultiArray<N, T>( RMA )
171 , TypedArray<T>(RMA.myCreator() )
172 , myStorage(RMA.myStorage)
173 {
174 if (!myStorage)
175 Verbose(0) << " Warning: ReferencingMemArray<"<<typeid(T)<<"> Copy constructo NO storage provided, storage=" << myStorage;
176 }
177
178protected:
182public:
183
184
185 bool copyFrom(const RefPtr<MemCore::ChunkBase>&theChunk) override
186 {
188 if (!mine) return false;
189
191 if (!compatibleChunk) return false;
192 if (compatibleChunk->nElements() != mine->nElements())
193 return false;
194
195 mine->get_vector() = compatibleChunk->get_vector();
196
197 return true;
198 }
199
200
203 {
204 return this->StoragePtr();
205 }
206
212 {
213 if( myStorage )
214 return myStorage->memsize();
215
216 Verbose(0) << "ReferencingMemArray:memsize() NullPtr for Storage!";
217 return 0;
218
219 }
220
221 index_t nElements() const override
222 {
224 }
225
226 std::string getElementAsString(size_t index) const override
227 {
228 if (!this->myStorage)
229 return {};
230
231 if (index >= this->myStorage->nElements() )
232 return {};
233
234 const auto&Datum = this->myStorage->get_vector()[index];
235
236 return Fiber::element_to_string(Datum);
237 }
238
239
244
246 const type_info&getType() const override
247 {
248 return typeid(T);
249 }
250
252 //TODO: was marked as override, but doesn't
253 const type_info&getBaseType() const
254 {
256 }
257
258 HyperslabParameters&getHyperslabParameters() override
259 {
260 return *this;
261 }
262
263 void*getPtr() override
264 {
265 return this->ptr(); // from Iterator<>
266 }
267
268 const void*OriginPtr() const override
269 {
270 return 0;
271 }
272
273 const void*DeltaPtr() const override
274 {
275 return 0;
276 }
277
278 T first() const override
279 {
280 return MultiArray_t::first();
281 }
282
283 T last() const override
284 {
285 return MultiArray_t::last();
286 }
287
288 CreativeIterator<T>* creativeIterator() override
289 {
290 return this;
291 }
292
293 const CreativeIterator<T>* creativeIterator() const override
294 {
295 return this;
296 }
297
298 const RefPtr<MemCore::TypedChunk<T> >&StoragePtr() const
299 // const RefPtr<MemCore::ChunkBase> StoragePtr() const
300 {
301 return myStorage;
302 }
303
304
305 const RefPtr<MemCore::TypedChunk<T> >&getStorage() const
306// const RefPtr<MemCore::ChunkBase> getStorage() const
307 {
308 return myStorage;
309 }
310
311 const RefPtr<MemCore::TypedChunk<T> >&getTypedStorage() const
312 {
313 return myStorage;
314 }
315
317 MultiIndex<N> Size() const override
318 {
319 return MultiArray_t::Size();
320 }
321};
322
323
324} /* namespace Fiber */
325
326#endif /* __FIBER_REFERENCINGMEMARRAY_HPP */
valarray< size_t > size() const
basic_string< char > string
constexpr size_type size() const noexcept
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
Description of types, which is meta-information like what is the number of elements of some array-lik...
Definition FiberType.hpp:61
A set of integer values which describes how to iterate over a certain set of values.
Definition HyperslabParameters.hpp:34
Implementation of an Iterator to a sequence of elements, which might be contiguous or a projection of...
Definition vector/Iterator.hpp:525
Abstract class for N-dimensional MultiArrays with MemCore memory management.
Definition MemArrayBase.hpp:37
Base class for multidimensional arrays with MemCore memory management.
Definition MemBase.hpp:70
Definition MultiArray.hpp:371
A memory array that may share its data storage with something else.
Definition ReferencingMemArray.hpp:104
ReferencingMemArray(const ReferencingMemArray &RMA)
Copy constructor.
Definition ReferencingMemArray.hpp:167
const void * DeltaPtr() const override
Get pointer to delta of linearly procedural array, if it is linear.
Definition ReferencingMemArray.hpp:273
index_t nElements() const override
return the number of elements in this array
Definition ReferencingMemArray.hpp:221
ReferencingMemArray(const Iterator< T > &data, const MultiIndex< N > &Sz, const RefPtr< MemCore::ChunkBase > &theStorage, const WeakPtr< CreativeArrayBase > &theCreator)
Constructor.
Definition ReferencingMemArray.hpp:119
void DeferredConstructor() override
Virtual deferred reference pointer construction pointer Don't overload if you don't know exactly what...
Definition ReferencingMemArray.hpp:240
void * getPtr() override
Special Array Storage.
Definition ReferencingMemArray.hpp:263
T last() const override
Retrieve the last element.
Definition ReferencingMemArray.hpp:283
T first() const override
Retrieve the first element.
Definition ReferencingMemArray.hpp:278
const type_info & getType() const override
Return the element type of the certain array.
Definition ReferencingMemArray.hpp:246
MemCore::memsize_t memsize() const override
Note: memsize does not return the number of elements here, but the actual memory that is occupied.
Definition ReferencingMemArray.hpp:211
MultiIndex< N > Size() const override
Return the number of dimensions.
Definition ReferencingMemArray.hpp:317
const type_info & getBaseType() const
Return the element type of the certain array.
Definition ReferencingMemArray.hpp:253
RefPtr< MemCore::TypedChunk< T > > myChunk() const override
Return storage type.
Definition ReferencingMemArray.hpp:202
~ReferencingMemArray()
Protected Destructor to avoid static creation.
Definition ReferencingMemArray.hpp:180
const void * OriginPtr() const override
Get pointer to origin of linearly procedural array, if it is linear.
Definition ReferencingMemArray.hpp:268
ReferencingMemArray(const RefPtr< MemCore::ChunkBase > &theStorage, const MultiArray< N, T > &M, const WeakPtr< CreativeArrayBase > &theCreator)
Create referencing mem array from an existing multi array and some memory reference.
Definition ReferencingMemArray.hpp:153
ReferencingMemArray(const RefPtr< Chunk< T > > &data, const MultiIndex< N > &Sz, const WeakPtr< CreativeArrayBase > &theCreator)
Construct from memory chunk and multidimensional index.
Definition ReferencingMemArray.hpp:133
An intermediate class that allows to operate on the pure type information of some memory array.
Definition TypedArray.hpp:58
const WeakPtr< Creature > & myCreator() const
MemSizeConfig< sizeof(void *)>::memsize_t memsize_t
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
string to_string(const Eagle::FixedArray< ElementType, N > &A, const char *OpenBrace="{", const char *CloseBrace="}", const char *Separator=",")