2#ifndef __FIBER_MEMARRAY_HPP
3#define __FIBER_MEMARRAY_HPP
5#ifndef DONT_USE_PRAGMA_ONCE
9#include "ReferencingMemArray.hpp"
10#include <fiber/vector/MultiCopy.hpp>
22 class MemArrayGetSlice;
24template <Dims_t N,
class T>
32template <Dims_t N,
class T>
37static bool TypeIsRegistered;
46#ifdef VERBOSE_MEMARRAY
47 printf(
"MemArray::~MemArray(): releasing %ld bytes\n",
long(
memsize()) );
48 this->MemChunk::speak(
"MemArray::~MemArray() chunk");
81 MemBase::RegisteredTypes++;
83 return TypeIsRegistered;
86 MemArray(
const Iterator<T>&data,
const MultiIndex<N>&Sz,
87 const RefPtr<MemCore::ChunkBase>&MemStorage,
88 const MemBase::Creator_t&C )
89 : MemBase(FiberType<T>::getFiberType()->getFiberTypeIndex() , C)
90 , ReferencingMemArray<N,T>(data, Sz, MemStorage, C)
98 using MultiArray_t::ptr;
102 typedef typename MultiArray_t::component_t component_t;
103 typedef typename MultiArray_t::ValueBase_t ValueBase_t;
105 typedef typename MultiArray_t::MultiArrayBase_t MultiArrayBase_t;
106 typedef typename MultiArray_t::MultiArrayComponent_t MultiArrayComponent_t;
158 friend class MemArrayGetSlice<N>;
159 friend class MemArrayGetSlice<N+1>;
171 RefPtr<MemBase>
getSlice(index_t i,
const MemBase::Creator_t&C)
const override;
176 return MultiArray_t::Size();
238 if (!this->myStorage)
241 return new MemArray(this->myStorage->copy(),
Size(), C );
276inline RefPtr<TypedArray<T>> newMemArray(
const DynamicSize&DS,
277 const MemBase::Creator_t&C =
nullptr )
281 default:
return nullptr;
283 case 1:
return new MemArray<1, T>( DS.getSize<1>(), C );
285 case 2:
return new MemArray<2, T>( DS.getSize<2>(), C );
287 case 3:
return new MemArray<3, T>( DS.getSize<3>(), C );
289 case 4:
return new MemArray<4, T>( DS.getSize<4>(), C );
296inline RefPtr<MemBase> MemArrayAllocator<T>::create(
const DynamicSize&DS)
const
298 return newMemArray<T>(DS);
315template <Dims_t N,
class T>
316bool MemArray<N,T>::TypeIsRegistered = MemArrayAllocator<T>::isRegistered();
330 return new MemArray<N-1,T>(M.StoragePtr(), M[i], C );
347template <Dims_t N,
class T>
361 return ::MemCore::NullPtr();
373 return ::MemCore::NullPtr();
valarray< size_t > size() const
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
Iterator< component_t > getComponent(int n) const
Get an iterator that operates on the nth component.
Definition vector/Iterator.hpp:1307
Definition MemArray.hpp:325
Class for N-dimensional MultiArrays with MemCore memory management.
Definition MemArray.hpp:34
RefPtr< MemArray > createMemArray(const MemCore::MemVector< T > &Data, const MemBase::Creator_t &C) const
Create a memory array of the same dimensions as the current array, but with data as provided by the M...
Definition MemArray.hpp:202
RefPtr< MemBase > copy(const MemBase::Creator_t &C=nullptr) const override
Create a copy of the current array, duplicating all data and allocating new memory for it.
Definition MemArray.hpp:236
@ Dims
The dimensionality of this array.
Definition MemArray.hpp:75
MemArray(const MemCore::MemVector< T > &Data, const MultiIndex< N > &M, const MemBase::Creator_t &C=nullptr)
Construct from size and a MemVector, for convenience, hoping that the memory sizes fit.
Definition MemArray.hpp:122
MultiIndex< N > Size() const override
Return the number of dimensions.
Definition MemArray.hpp:174
MemArray< N, value_base_type > MemArrayOfBaseValues_t
A memory array consisting of types of the base classes for the value type T.
Definition MemArray.hpp:70
META::BaseClass< T >::result value_base_type
The base class of the given type T.
Definition MemArray.hpp:64
MemArray(const RefPtr< MemCore::ChunkBase > &Data, const MultiIndex< N > &Sz, const MemBase::Creator_t &C=NullPtr())
Construct from memory chunk and multidimensional index, hoping that the memory sizes fit.
Definition MemArray.hpp:132
MemArray(const MultiIndex< N > &M, const MemBase::Creator_t &C=nullptr)
Construct from size, allocate new memory during construction.
Definition MemArray.hpp:112
MultiArray< N, T > MultiArray_t
Export multiarray type.
Definition MemArray.hpp:95
RefPtr< MemBase > getSlice(index_t i, const MemBase::Creator_t &C) const override
For a multidimensional array retrieve the nth slice.
Definition MemArray.hpp:348
RefPtr< MemBase > newMemArraynD(const MultiIndex< N > &NewSize, const MemBase::Creator_t &C) const override
Create a new memory array of the same type, initialized with default data values.
Definition MemArray.hpp:192
RefPtr< MemBase > makeMemArray(const MemBase::Creator_t &) const override
Make a memory array, in this case it's already one, so it's a do-nothing operation.
Definition MemArray.hpp:184
RefPtr< MemBase > createEquallySizedMemArray(const RefPtr< MemCore::ChunkBase > &Storage, const MemBase::Creator_t &C) const override
Create a memory array of the same dimensions as the current array, but with data as provided by the S...
Definition MemArray.hpp:231
RefPtr< MemBase > createSubMemArray(const MultiIndex< N > &Offset, const MultiIndex< N > &CopySize, const MemBase::Creator_t &C) const override
Create a new MemArray from a subset of the current array's data.
Definition MemArray.hpp:245
T value_type
Export the type that is operated on here.
Definition MemArray.hpp:59
MemArray< N, element_t > ComponentArray_t
The type of an array that refers to just a component, if the value type is a structure.
Definition MemArray.hpp:56
RefPtr< MemArray > createMemArray(const RefPtr< MemCore::ChunkBase > &Data, const MemBase::Creator_t &C) const
Create a memory array of the same dimensions as the current array, but with data as provided by the S...
Definition MemArray.hpp:216
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
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
const auto & self() const
void CopySubset(const MultiIndex< N > &HowMany, MultiArray< N, Dest > &DestArray, const MultiIndex< N > &DestOffset, const MultiArray< N, Source > &SrcArray, const MultiIndex< N > &SrcOffset, const Converter &C)
Copy a subset of data from the source array to the destination array.
Definition MultiCopy.hpp:114
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
RefPtr< MemArray< 1, T > > makeMemArray1D(const RefPtr< MemCore::TypedChunk< T > > &DataChunk, const MemBase::Creator_t &C=MemCore::NullPtr())
Create one-dimensional MemArray from provided data chunk.
Definition MemArray.hpp:357
IndexTypeConfig< sizeof(void *)>::index_t index_t
Define the index type as according to the size of a pointer, i.e.
Definition Index.hpp:22
Definition MultiCopy.hpp:25