14#ifndef __FIELD_ARRAYLIST_HPP
15#define __FIELD_ARRAYLIST_HPP
17#include <vecal/ipol/CopyMultiArray.hpp>
18#include <vecal/ipol/ViewMultiArray.hpp>
19#include "MemArray.hpp"
20#include "CreativeArray.hpp"
27template <
class T,
class S=T*>
62 typedef MultiArray<4, T, CreativeArray<4, T, S, CreativeArray<3, T, S, CreativeArray<2, T, S, S> > > >
M4D_3D_2D_1D;
67template <
class SrcMemArrayType>
72 enum { Dims = SrcMemArrayType::Dims };
74 const MultiIndex<Dims> &DstOffset;
75 const RefPtr<MemArray<Dims> > &Dst;
76 const MultiIndex<Dims> &SrcOffset;
78 CopyMemArraySourceTypeIterator(
const RefPtr<MemArray<Dims> > &pDst,
79 const MultiIndex<Dims> &pDstOffset,
81 const MultiIndex<Dims> &pSrcOffset)
83 , DstOffset(pDstOffset), SrcOffset(pSrcOffset)
89 template <
typename Storage>
92 static bool CouldCopy(CopyMemArraySourceTypeIterator&It)
94 if (
RefPtr<MemArrayStorage<Dims, T, Storage> > D = It.Dst)
96 Xerox<MultiArray<Dims, T, Storage>, SrcMemArrayType>
::
97 Copy( D->myArray(), It.DstOffset, It.Src, It.SrcOffset);
106 static inline bool Break(CopyMemArraySourceTypeIterator&It)
108 if (DstStorage< T* >::CouldCopy(It) )
return true;
109 if (DstStorage<ViewPtr<T> >::CouldCopy(It) )
return true;
111 if (DstStorage<vector <T*> >::CouldCopy(It) )
return true;
130struct CopyMemArrayIterator
132 const RefPtr<MemArray<Dims> > &Dst;
133 const MultiIndex<Dims> &DstOffset;
134 const RefPtr<MemArray<Dims> > &Src;
135 const MultiIndex<Dims> &SrcOffset;
138 CopyMemArrayIterator(
const RefPtr<MemArray<Dims> >&pDst,
const MultiIndex<Dims>&pDstOffset,
139 const RefPtr<MemArray<Dims> >&pSrc,
const MultiIndex<Dims>&pSrcOffset)
140 : Dst(pDst), DstOffset(pDstOffset)
141 , Src(pSrc), SrcOffset(pSrcOffset)
144 template <
typename T>
147 template <
typename Storage>
150 static bool CouldCopy(CopyMemArrayIterator&It)
152 if (
RefPtr<MemArrayStorage<Dims, T, Storage> > Src = It.Src)
154 typedef MultiArray<Dims, T, Storage> SrcMultiArray_t;
156 CopyMemArraySourceTypeIterator<SrcMultiArray_t>
157 cm( It.Dst, It.DstOffset, Src->myArray(), It.SrcOffset );
159 bool ok = FOREACH<CopyMemArraySourceTypeIterator<SrcMultiArray_t>,
170 static inline bool Break(CopyMemArrayIterator&It)
172 if (SrcStorage<const T* >::CouldCopy(It) )
return true;
173 if (SrcStorage< T* >::CouldCopy(It) )
return true;
174 if (SrcStorage<ViewPtr<const T> >::CouldCopy(It) )
return true;
175 if (SrcStorage<ViewPtr< T> >::CouldCopy(It) )
return true;
176 if (SrcStorage<vector < T> >::CouldCopy(It) )
return true;
177 if (SrcStorage<vector < T*> >::CouldCopy(It) )
return true;
Definition ArrayList.hpp:29
MultiArray< 1, T, S > M1D
A onedimensional array that is stored contiguously.
Definition ArrayList.hpp:32
MultiArray< 4, T, S > M4D
A fourdimensional array that is stored contiguously.
Definition ArrayList.hpp:53
MultiArray< 4, T, CreativeArray< 4, T, S, CreativeArray< 3, T, S, S > > > M4D_3D_2D
A fourdimensional array that is stored as contiguous 3D arrays that are build from 2D arrays created ...
Definition ArrayList.hpp:59
MultiArray< 3, T, CreativeArray< 3, T, S, CreativeArray< 2, T, S, S > > > M3D_2D_1D
A threedimensional array that is stored as contiguous 2D arrays that are build from 1D arrays created...
Definition ArrayList.hpp:49
MultiArray< 2, T, CreativeArray< 2, T, S, S > > M2D_1D
A twodimensional array that is stored as contiguous 1D arrays that are created on demand.
Definition ArrayList.hpp:39
MultiArray< 2, T, S > M2D
A twodimensional array that is stored contiguously.
Definition ArrayList.hpp:36
MultiArray< 4, T, CreativeArray< 4, T, S, CreativeArray< 3, T, S, CreativeArray< 2, T, S, S > > > > M4D_3D_2D_1D
A fourdimensional array that is stored as contiguous 3D arrays that are build from 1D arrays created ...
Definition ArrayList.hpp:62
MultiArray< 3, T, S > M3D
A threedimensional array that is stored contiguously.
Definition ArrayList.hpp:43
MultiArray< 4, T, CreativeArray< 4, T, S, S > > M4D_3D
A fourdimensional array that is stored as contiguous 3D arrays that are created on demand.
Definition ArrayList.hpp:56
MultiArray< 3, T, CreativeArray< 3, T, S, S > > M3D_2D
A threedimensional array that is stored as contiguous 2D arrays that are created on demand.
Definition ArrayList.hpp:46
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
void Copy(MultiArray< N, Dest > &DestArray, const MultiArray< N, Source > &SrcArray, const Converter &C)
Copy data from the source array to the destination array, whereby the destination array must be large...
Definition MultiCopy.hpp:46
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
StrongPtr< Object, ObjectBase > RefPtr
Definition CopyMemArray.hpp:54