//
// Author : Anthony Geay (CEA/DEN)
-#ifndef __PARAMEDMEM_MEDCOUPLINGMEMARRAY_HXX__
-#define __PARAMEDMEM_MEDCOUPLINGMEMARRAY_HXX__
+#ifndef __MEDCOUPLING_MEDCOUPLINGMEMARRAY_HXX__
+#define __MEDCOUPLING_MEDCOUPLINGMEMARRAY_HXX__
#include "MEDCoupling.hxx"
+#include "MCAuto.hxx"
#include "MEDCouplingTimeLabel.hxx"
#include "MEDCouplingRefCountObject.hxx"
#include "InterpKernelException.hxx"
MEDCOUPLING_EXPORT std::string getVarOnComponent(int i) const;
MEDCOUPLING_EXPORT std::string getUnitOnComponent(int i) const;
MEDCOUPLING_EXPORT void setInfoOnComponent(int i, const std::string& info);
- MEDCOUPLING_EXPORT int getNumberOfComponents() const { return (int)_info_on_compo.size(); }
+ MEDCOUPLING_EXPORT std::size_t getNumberOfComponents() const { return _info_on_compo.size(); }
MEDCOUPLING_EXPORT void setPartOfValuesBase3(const DataArray *aBase, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare=true);
+ MEDCOUPLING_EXPORT virtual void *getVoidStarPointer() = 0;
MEDCOUPLING_EXPORT virtual DataArray *deepCopy() const = 0;
MEDCOUPLING_EXPORT virtual DataArray *buildNewEmptyInstance() const = 0;
MEDCOUPLING_EXPORT virtual bool isAllocated() const = 0;
MEDCOUPLING_EXPORT virtual int getNumberOfTuples() const = 0;
MEDCOUPLING_EXPORT virtual std::size_t getNbOfElems() const = 0;
MEDCOUPLING_EXPORT virtual std::size_t getNbOfElemAllocated() const = 0;
- MEDCOUPLING_EXPORT virtual void alloc(int nbOfTuple, int nbOfCompo=1) = 0;
- MEDCOUPLING_EXPORT virtual void reAlloc(int newNbOfTuple) = 0;
+ MEDCOUPLING_EXPORT virtual void alloc(std::size_t nbOfTuple, std::size_t nbOfCompo=1) = 0;
+ MEDCOUPLING_EXPORT virtual void reAlloc(std::size_t newNbOfTuple) = 0;
MEDCOUPLING_EXPORT virtual void renumberInPlace(const int *old2New) = 0;
MEDCOUPLING_EXPORT virtual void renumberInPlaceR(const int *new2Old) = 0;
MEDCOUPLING_EXPORT virtual void setContigPartOfSelectedValues(int tupleIdStart, const DataArray *aBase, const DataArrayInt *tuplesSelec) = 0;
MEDCOUPLING_EXPORT virtual DataArray *selectByTupleIdSafe(const int *new2OldBg, const int *new2OldEnd) const = 0;
MEDCOUPLING_EXPORT virtual DataArray *selectByTupleIdSafeSlice(int bg, int end2, int step) const = 0;
MEDCOUPLING_EXPORT virtual void rearrange(int newNbOfCompo) = 0;
+ MEDCOUPLING_EXPORT virtual void circularPermutation(int nbOfShift=1) = 0;
+ MEDCOUPLING_EXPORT virtual void circularPermutationPerTuple(int nbOfShift=1) = 0;
+ MEDCOUPLING_EXPORT virtual void reversePerTuple() = 0;
MEDCOUPLING_EXPORT void checkNbOfTuples(int nbOfTuples, const std::string& msg) const;
MEDCOUPLING_EXPORT void checkNbOfComps(int nbOfCompo, const std::string& msg) const;
MEDCOUPLING_EXPORT void checkNbOfTuplesAndComp(const DataArray& other, const std::string& msg) const;
DataArray() { }
~DataArray() { }
protected:
- static void CheckValueInRange(int ref, int value, const std::string& msg);
- static void CheckValueInRangeEx(int value, int start, int end, const std::string& msg);
- static void CheckClosingParInRange(int ref, int value, const std::string& msg);
+ MEDCOUPLING_EXPORT static void CheckValueInRange(int ref, int value, const std::string& msg);
+ MEDCOUPLING_EXPORT static void CheckValueInRangeEx(int value, int start, int end, const std::string& msg);
+ MEDCOUPLING_EXPORT static void CheckClosingParInRange(int ref, int value, const std::string& msg);
+ MEDCOUPLING_EXPORT static int EffectiveCircPerm(int nbOfShift, int nbOfTuples);
protected:
std::string _name;
std::vector<std::string> _info_on_compo;
class DataArrayTemplate : public DataArray
{
public:
- MEDCOUPLING_EXPORT std::size_t getHeapMemorySizeWithoutChildren() const;
+ MEDCOUPLING_EXPORT static MCAuto< typename Traits<T>::ArrayTypeCh > NewFromStdVector(const typename std::vector<T>& v);
+ MEDCOUPLING_EXPORT std::vector< MCAuto< typename Traits<T>::ArrayTypeCh > > explodeComponents() const;
+ //
+ std::size_t getHeapMemorySizeWithoutChildren() const;
//
MEDCOUPLING_EXPORT int getNumberOfTuples() const { return _info_on_compo.empty()?0:_mem.getNbOfElem()/getNumberOfComponents(); }
MEDCOUPLING_EXPORT std::size_t getNbOfElems() const { return _mem.getNbOfElem(); }
- MEDCOUPLING_EXPORT bool empty() const;
+ bool empty() const;
+ MEDCOUPLING_EXPORT void *getVoidStarPointer() { return getPointer(); }
MEDCOUPLING_EXPORT const T *getConstPointer() const { return _mem.getConstPointer(); }
MEDCOUPLING_EXPORT const T *begin() const { return getConstPointer(); }
MEDCOUPLING_EXPORT const T *end() const { return getConstPointer()+getNbOfElems(); }
- MEDCOUPLING_EXPORT void alloc(int nbOfTuple, int nbOfCompo=1);
- MEDCOUPLING_EXPORT void useArray(const T *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo);
- MEDCOUPLING_EXPORT void useExternalArrayWithRWAccess(const T *array, int nbOfTuple, int nbOfCompo);
- MEDCOUPLING_EXPORT T getIJSafe(int tupleId, int compoId) const;
+ void alloc(std::size_t nbOfTuple, std::size_t nbOfCompo=1);
+ void useArray(const T *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo);
+ void useExternalArrayWithRWAccess(const T *array, int nbOfTuple, int nbOfCompo);
+ T getIJSafe(int tupleId, int compoId) const;
MEDCOUPLING_EXPORT T getIJ(int tupleId, int compoId) const { return _mem[tupleId*_info_on_compo.size()+compoId]; }
MEDCOUPLING_EXPORT void setIJ(int tupleId, int compoId, T newVal) { _mem[tupleId*_info_on_compo.size()+compoId]=newVal; declareAsNew(); }
MEDCOUPLING_EXPORT void setIJSilent(int tupleId, int compoId, T newVal) { _mem[tupleId*_info_on_compo.size()+compoId]=newVal; }
MEDCOUPLING_EXPORT T *getPointer() { return _mem.getPointer(); declareAsNew(); }
- MEDCOUPLING_EXPORT void pack() const;
- MEDCOUPLING_EXPORT bool isAllocated() const;
- MEDCOUPLING_EXPORT void checkAllocated() const;
- MEDCOUPLING_EXPORT void desallocate();
- MEDCOUPLING_EXPORT void reserve(std::size_t nbOfElems);
- MEDCOUPLING_EXPORT void rearrange(int newNbOfCompo);
- MEDCOUPLING_EXPORT void transpose();
- MEDCOUPLING_EXPORT void pushBackSilent(T val);
- MEDCOUPLING_EXPORT void pushBackValsSilent(const T *valsBg, const T *valsEnd);
- MEDCOUPLING_EXPORT T popBackSilent();
- MEDCOUPLING_EXPORT T front() const;
- MEDCOUPLING_EXPORT T back() const;
- MEDCOUPLING_EXPORT std::size_t getNbOfElemAllocated() const { return _mem.getNbOfElemAllocated(); }
- MEDCOUPLING_EXPORT void allocIfNecessary(int nbOfTuple, int nbOfCompo);
- MEDCOUPLING_EXPORT void deepCopyFrom(const DataArrayTemplate<T>& other);
- MEDCOUPLING_EXPORT void reverse();
- MEDCOUPLING_EXPORT void fillWithValue(T val);
- MEDCOUPLING_EXPORT void reAlloc(int newNbOfTuple);
- MEDCOUPLING_EXPORT void renumberInPlace(const int *old2New);
- MEDCOUPLING_EXPORT void renumberInPlaceR(const int *new2Old);
- MEDCOUPLING_EXPORT void sort(bool asc=true);
- MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *renumber(const int *old2New) const;
- MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *renumberR(const int *new2Old) const;
- MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *renumberAndReduce(const int *old2New, int newNbOfTuple) const;
- MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *changeNbOfComponents(int newNbOfComp, T dftValue) const;
- MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *subArray(int tupleIdBg, int tupleIdEnd=-1) const;
- MEDCOUPLING_EXPORT void setPartOfValues1(const typename Traits<T>::ArrayType *a, int bgTuples, int endTuples, int stepTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare=true);
- MEDCOUPLING_EXPORT void setPartOfValuesSimple1(T a, int bgTuples, int endTuples, int stepTuples, int bgComp, int endComp, int stepComp);
- MEDCOUPLING_EXPORT void setPartOfValues2(const typename Traits<T>::ArrayType *a, const int *bgTuples, const int *endTuples, const int *bgComp, const int *endComp, bool strictCompoCompare=true);
- MEDCOUPLING_EXPORT void setPartOfValuesSimple2(T a, const int *bgTuples, const int *endTuples, const int *bgComp, const int *endComp);
- MEDCOUPLING_EXPORT void setPartOfValues3(const typename Traits<T>::ArrayType *a, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare=true);
- MEDCOUPLING_EXPORT void setPartOfValuesSimple3(T a, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp);
- MEDCOUPLING_EXPORT void setPartOfValues4(const typename Traits<T>::ArrayType *a, int bgTuples, int endTuples, int stepTuples, const int *bgComp, const int *endComp, bool strictCompoCompare=true);
- MEDCOUPLING_EXPORT void setPartOfValuesSimple4(T a, int bgTuples, int endTuples, int stepTuples, const int *bgComp, const int *endComp);
- MEDCOUPLING_EXPORT void setPartOfValuesAdv(const typename Traits<T>::ArrayType *a, const DataArrayInt *tuplesSelec);
- MEDCOUPLING_EXPORT void setContigPartOfSelectedValues(int tupleIdStart, const DataArray *aBase, const DataArrayInt *tuplesSelec);
- MEDCOUPLING_EXPORT void setContigPartOfSelectedValuesSlice(int tupleIdStart, const DataArray *aBase, int bg, int end2, int step);
- MEDCOUPLING_EXPORT T getMaxValue(int& tupleId) const;
- MEDCOUPLING_EXPORT T getMaxValueInArray() const;
- MEDCOUPLING_EXPORT T getMinValue(int& tupleId) const;
- MEDCOUPLING_EXPORT T getMinValueInArray() const;
+ void pack() const;
+ bool isAllocated() const;
+ void checkAllocated() const;
+ void desallocate();
+ void reserve(std::size_t nbOfElems);
+ void rearrange(int newNbOfCompo);
+ void transpose();
+ void pushBackSilent(T val);
+ void pushBackValsSilent(const T *valsBg, const T *valsEnd);
+ T popBackSilent();
+ T front() const;
+ T back() const;
+ std::size_t getNbOfElemAllocated() const { return _mem.getNbOfElemAllocated(); }
+ void allocIfNecessary(int nbOfTuple, int nbOfCompo);
+ void deepCopyFrom(const DataArrayTemplate<T>& other);
+ void reverse();
+ void fillWithValue(T val);
+ void reAlloc(std::size_t newNbOfTuple);
+ void renumberInPlace(const int *old2New);
+ void renumberInPlaceR(const int *new2Old);
+ void sort(bool asc=true);
+ typename Traits<T>::ArrayType *renumber(const int *old2New) const;
+ typename Traits<T>::ArrayType *renumberR(const int *new2Old) const;
+ typename Traits<T>::ArrayType *renumberAndReduce(const int *old2New, int newNbOfTuple) const;
+ typename Traits<T>::ArrayType *changeNbOfComponents(int newNbOfComp, T dftValue) const;
+ typename Traits<T>::ArrayType *subArray(int tupleIdBg, int tupleIdEnd=-1) const;
+ void circularPermutation(int nbOfShift=1);
+ void circularPermutationPerTuple(int nbOfShift=1);
+ void reversePerTuple();
+ void setPartOfValues1(const typename Traits<T>::ArrayType *a, int bgTuples, int endTuples, int stepTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare=true);
+ void setPartOfValuesSimple1(T a, int bgTuples, int endTuples, int stepTuples, int bgComp, int endComp, int stepComp);
+ void setPartOfValues2(const typename Traits<T>::ArrayType *a, const int *bgTuples, const int *endTuples, const int *bgComp, const int *endComp, bool strictCompoCompare=true);
+ void setPartOfValuesSimple2(T a, const int *bgTuples, const int *endTuples, const int *bgComp, const int *endComp);
+ void setPartOfValues3(const typename Traits<T>::ArrayType *a, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare=true);
+ void setPartOfValuesSimple3(T a, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp);
+ void setPartOfValues4(const typename Traits<T>::ArrayType *a, int bgTuples, int endTuples, int stepTuples, const int *bgComp, const int *endComp, bool strictCompoCompare=true);
+ void setPartOfValuesSimple4(T a, int bgTuples, int endTuples, int stepTuples, const int *bgComp, const int *endComp);
+ void setPartOfValuesAdv(const typename Traits<T>::ArrayType *a, const DataArrayInt *tuplesSelec);
+ void setContigPartOfSelectedValues(int tupleIdStart, const DataArray *aBase, const DataArrayInt *tuplesSelec);
+ void setContigPartOfSelectedValuesSlice(int tupleIdStart, const DataArray *aBase, int bg, int end2, int step);
+ T getMaxValue(int& tupleId) const;
+ T getMaxValueInArray() const;
+ T getMinValue(int& tupleId) const;
+ T getMinValueInArray() const;
protected:
typename Traits<T>::ArrayType *mySelectByTupleId(const int *new2OldBg, const int *new2OldEnd) const;
typename Traits<T>::ArrayType *mySelectByTupleId(const DataArrayInt& di) const;
MEDCOUPLING_EXPORT DataArrayDouble *fromCylToCart() const;
MEDCOUPLING_EXPORT DataArrayDouble *fromSpherToCart() const;
MEDCOUPLING_EXPORT DataArrayDouble *cartesianize(MEDCouplingAxisType atOfThis) const;
+ MEDCOUPLING_EXPORT DataArrayDouble *fromCartToPolar() const;
+ MEDCOUPLING_EXPORT DataArrayDouble *fromCartToCyl() const;
+ MEDCOUPLING_EXPORT DataArrayDouble *fromCartToSpher() const;
+ MEDCOUPLING_EXPORT DataArrayDouble *fromCartToCylGiven(const DataArrayDouble *coords, const double center[3], const double vect[3]) const;
MEDCOUPLING_EXPORT DataArrayDouble *doublyContractedProduct() const;
MEDCOUPLING_EXPORT DataArrayDouble *determinant() const;
MEDCOUPLING_EXPORT DataArrayDouble *eigenValues() const;
MEDCOUPLING_EXPORT DataArrayDouble *applyFuncNamedCompo(int nbOfComp, const std::vector<std::string>& varsOrder, const std::string& func, bool isSafe=true) const;
MEDCOUPLING_EXPORT void applyFuncFast32(const std::string& func);
MEDCOUPLING_EXPORT void applyFuncFast64(const std::string& func);
+ MEDCOUPLING_EXPORT MCAuto<DataArrayDouble> symmetry3DPlane(const double point[3], const double normalVector[3]) const;
MEDCOUPLING_EXPORT DataArrayInt *findIdsInRange(double vmin, double vmax) const;
MEDCOUPLING_EXPORT DataArrayInt *findIdsNotInRange(double vmin, double vmax) const;
MEDCOUPLING_EXPORT static DataArrayDouble *Aggregate(const DataArrayDouble *a1, const DataArrayDouble *a2);
MEDCOUPLING_EXPORT MemArray<double>& accessToMemArray() { return _mem; }
MEDCOUPLING_EXPORT const MemArray<double>& accessToMemArray() const { return _mem; }
MEDCOUPLING_EXPORT std::vector<bool> toVectorOfBool(double eps) const;
+ MEDCOUPLING_EXPORT static void Rotate2DAlg(const double *center, double angle, int nbNodes, const double *coordsIn, double *coordsOut);
+ MEDCOUPLING_EXPORT static void Rotate3DAlg(const double *center, const double *vect, double angle, int nbNodes, const double *coordsIn, double *coordsOut);
+ MEDCOUPLING_EXPORT static void Symmetry3DPlane(const double point[3], const double normalVector[3], int nbNodes, const double *coordsIn, double *coordsOut);
+ MEDCOUPLING_EXPORT static void GiveBaseForPlane(const double normalVector[3], double baseOfPlane[9]);
public:
MEDCOUPLING_EXPORT void getTinySerializationIntInformation(std::vector<int>& tinyInfo) const;
MEDCOUPLING_EXPORT void getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const;
MEDCOUPLING_EXPORT void switchOnTupleEqualTo(int val, std::vector<bool>& vec) const;
MEDCOUPLING_EXPORT void switchOnTupleNotEqualTo(int val, std::vector<bool>& vec) const;
MEDCOUPLING_EXPORT DataArrayInt *buildPermutationArr(const DataArrayInt& other) const;
+ MEDCOUPLING_EXPORT DataArrayInt *indicesOfSubPart(const DataArrayInt& partOfThis) const;
MEDCOUPLING_EXPORT DataArrayInt *sumPerTuple() const;
MEDCOUPLING_EXPORT void checkMonotonic(bool increasing) const;
MEDCOUPLING_EXPORT bool isMonotonic(bool increasing) const;
};
}
-#include "MEDCouplingMemArray.txx"
-
namespace MEDCoupling
{
+ template<class T>
+ template<class InputIterator>
+ void MemArray<T>::insertAtTheEnd(InputIterator first, InputIterator last)
+ {
+ T *pointer=_pointer.getPointer();
+ while(first!=last)
+ {
+ if(_nb_of_elem>=_nb_of_elem_alloc)
+ {
+ reserve(_nb_of_elem_alloc>0?2*_nb_of_elem_alloc:1);
+ pointer=_pointer.getPointer();
+ }
+ pointer[_nb_of_elem++]=*first++;
+ }
+ }
+
template<class InputIterator>
void DataArrayDouble::insertAtTheEnd(InputIterator first, InputIterator last)
{