FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
ArrayRef.hpp
1#ifndef __FIBER_ARRAYREF_HPP
2#define __FIBER_ARRAYREF_HPP
3
4#include "MemArray.hpp"
5
6namespace Fiber
7{
8
26template <class T, int N=1>
28{
29public:
33
34 typedef typename MultiArray_t::reference_t reference_t;
35
38
41
44
47
50
53 {
54 return myMemArray->getTypedStorage();
55 }
56
57 ArrayRef() = delete;
58
59 ArrayRef(const ArrayRef&AF)
61 , Data( *myMemArray )
62 , DataStorage( getTypedStorage()->get_vector() )
63 {}
64
66 ArrayRef(const MultiIndex<N>&NumberOfElements, const MemBase::Creator_t&C = MemCore::NullPtr() )
67 : myMemArray(NumberOfElements, C)
68 , Data(*myMemArray )
69 , DataStorage( getTypedStorage()->get_vector() )
70 {
71 Assert( NumberOfElements.size() == size() );
72 Assert( DataStorage.size() == myMemArray->nElements() );
73 Assert( DataStorage.size() == Data.nElements() );
74 Assert( DataStorage.size() == size() );
75 }
76
78 reference_t operator[](const index_t&i)
79 {
80 Assert( i < DataStorage.size() );
81 return DataStorage[i];
82 }
83
85 const reference_t operator[](const index_t&i) const
86 {
87 return DataStorage[i];
88 }
89
91 reference_t operator[](const MultiIndex<N>&I)
92 {
93 return Data[I];
94 }
95
97 const reference_t operator[](const MultiIndex<N>&I) const
98 {
99 return Data[I];
100 }
101
102
104 iterator begin() { return DataStorage.begin(); }
106 iterator end () { return DataStorage.end (); }
108 const_iterator begin() const { return DataStorage.begin(); }
110 const_iterator end () const { return DataStorage.end (); }
111
112
114 const MultiIndex<N>&Size() const
115 {
116 return Data.Size();
117 }
118
120 size_t size() const
121 {
122 return DataStorage.size();
123 }
124
126 MultiArray<N,T> &operator*()
127 {
128 return Data;
129 }
130
132 const MultiArray<N,T>&operator*() const
133 {
134 return Data;
135 }
136
142 operator RefPtr<MemBase> () const
143 {
144 return myMemArray;
145 }
146
147 RefPtr<MemBase> operator->() const
148 {
149 return myMemArray;
150 }
151};
152
153
154} /* namespace Fiber */
155
156#endif /* __FIBER_ARRAYREF_HPP */
constexpr const_iterator begin() const noexcept
constexpr const_iterator end() const noexcept
constexpr size_type size() const noexcept
An array reference class, which is a convenience class for reference pointers to multidimensional mem...
Definition ArrayRef.hpp:28
const reference_t operator[](const index_t &i) const
Read-only element access via one-dimensional index.
Definition ArrayRef.hpp:85
reference_t operator[](const MultiIndex< N > &I)
Element access via multidimensional index.
Definition ArrayRef.hpp:91
std::vector< T >::iterator iterator
Access via std vector iterator.
Definition ArrayRef.hpp:46
MultiArray< N, T > & Data
Reference to multidimensional data array.
Definition ArrayRef.hpp:40
std::vector< T >::const_iterator const_iterator
Access via constant std vector iterator.
Definition ArrayRef.hpp:49
const MemCore::Ref< MemArray< N, T > > myMemArray
Stored memory.
Definition ArrayRef.hpp:37
reference_t operator[](const index_t &i)
Element access via one-dimensional index.
Definition ArrayRef.hpp:78
const reference_t operator[](const MultiIndex< N > &I) const
Read-only element access via multidimensional index.
Definition ArrayRef.hpp:97
Storage_t & DataStorage
Reference to internal storage as std::vector.
Definition ArrayRef.hpp:43
RefPtr< MemCore::TypedChunk< T > > getTypedStorage() const
Return chunk to stored memory.
Definition ArrayRef.hpp:52
ArrayRef(const MultiIndex< N > &NumberOfElements, const MemBase::Creator_t &C=MemCore::NullPtr())
Construct from size, allocate new memory during construction.
Definition ArrayRef.hpp:66
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
T & reference_t
The reference type.
Definition vector/Iterator.hpp:709
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
std::nullptr_t NullPtr