X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2FMEDCoupling%2FMEDCouplingMemArray.hxx;h=ba49d508476d757d1fcb6bb943b4f7cd37c668bc;hb=84031c1872103b9a0c9546ea12c4ebd03838034d;hp=f9a847cc4b4cac7f722cbf78d86ea27710d87267;hpb=1c9761aeac9192f62f324ad7a04430f2482bc843;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingMemArray.hxx b/src/MEDCoupling/MEDCouplingMemArray.hxx index f9a847cc4..ba49d5084 100755 --- a/src/MEDCoupling/MEDCouplingMemArray.hxx +++ b/src/MEDCoupling/MEDCouplingMemArray.hxx @@ -165,6 +165,7 @@ namespace MEDCoupling void setPartOfValuesBase3(const DataArray *aBase, const mcIdType *bgTuples, const mcIdType *endTuples, mcIdType bgComp, mcIdType endComp, mcIdType stepComp, bool strictCompoCompare=true); virtual void *getVoidStarPointer() = 0; virtual DataArray *deepCopy() const = 0; + virtual DataArray *copySorted(bool asc=true) const = 0; virtual DataArray *buildNewEmptyInstance() const = 0; virtual bool isAllocated() const = 0; virtual void checkAllocated() const = 0; @@ -231,8 +232,16 @@ namespace MEDCoupling typedef T Type; public: static MCAuto< typename Traits::ArrayTypeCh > NewFromStdVector(const typename std::vector& v); + static MCAuto< typename Traits::ArrayTypeCh > NewFromArray(const T *arrBegin, const T *arrEnd); std::vector< MCAuto< typename Traits::ArrayTypeCh > > explodeComponents() const; // + void printForDebug(std::ostream& oss) const + { + this->checkAllocated(); + char comma[3] = {'\0',' ','\0'}; + std::for_each(this->begin(),this->end(),[&comma,&oss](const T& elt) { oss << comma << elt; comma[0]=','; } ); + oss << std::endl; + } std::size_t getHeapMemorySizeWithoutChildren() const; void updateTime() const { } // @@ -252,7 +261,8 @@ namespace MEDCoupling T getIJ(std::size_t tupleId, std::size_t compoId) const { return _mem[tupleId*_info_on_compo.size()+compoId]; } void setIJ(std::size_t tupleId, std::size_t compoId, T newVal) { _mem[tupleId*_info_on_compo.size()+compoId]=newVal; declareAsNew(); } void setIJSilent(std::size_t tupleId, std::size_t compoId, T newVal) { _mem[tupleId*_info_on_compo.size()+compoId]=newVal; } - T *getPointer() { return _mem.getPointer(); declareAsNew(); } + T *getPointer() { declareAsNew(); return getPointerSilent(); } + T *getPointerSilent() { return _mem.getPointer(); } void pack() const; bool isAllocated() const override; void checkAllocated() const; @@ -310,6 +320,7 @@ namespace MEDCoupling MemArray& accessToMemArray() { return _mem; } const MemArray& accessToMemArray() const { return _mem; } protected: + typename Traits::ArrayTypeCh *copySortedImpl(bool asc) const; typename Traits::ArrayType *mySelectByTupleId(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const; typename Traits::ArrayType *mySelectByTupleId(const DataArrayIdType& di) const; typename Traits::ArrayType *mySelectByTupleIdSafe(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const; @@ -392,6 +403,7 @@ namespace MEDCoupling static DataArrayFloat *New(); public:// abstract method overload DataArrayFloat *deepCopy() const; + DataArrayFloat *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } std::string getClassName() const override { return std::string("DataArrayFloat"); } DataArrayFloat *buildNewEmptyInstance() const { return DataArrayFloat::New(); } DataArrayFloat *selectByTupleRanges(const std::vector >& ranges) const { return DataArrayTemplateFP::mySelectByTupleRanges(ranges); } @@ -423,6 +435,7 @@ namespace MEDCoupling static DataArrayDouble *New(); double doubleValue() const; DataArrayDouble *deepCopy() const; + DataArrayDouble *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } std::string getClassName() const override { return std::string("DataArrayDouble"); } DataArrayDouble *buildNewEmptyInstance() const { return DataArrayDouble::New(); } void checkMonotonic(bool increasing, double eps) const; @@ -544,7 +557,6 @@ namespace MEDCoupling using DataArrayType = typename Traits::ArrayType; public: static DataArrayType *New(); - static MCAuto NewFromArray(const T *arrBegin, const T *arrEnd); T intValue() const; bool isEqual(const DataArrayDiscrete& other) const; bool isEqualIfNotWhy(const DataArrayDiscrete& other, std::string& reason) const; @@ -703,8 +715,9 @@ namespace MEDCoupling { friend class DataArrayDiscrete; public: - DataArrayInt32 *deepCopy() const;//ok - DataArrayInt32 *buildNewEmptyInstance() const { return DataArrayInt32::New(); }//ok + DataArrayInt32 *deepCopy() const; + DataArrayInt32 *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } + DataArrayInt32 *buildNewEmptyInstance() const { return DataArrayInt32::New(); } public: DataArrayInt32 *selectByTupleId(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const { return this->mySelectByTupleId(new2OldBg,new2OldEnd); } DataArrayInt32 *selectByTupleId(const DataArrayIdType& di) const { return this->mySelectByTupleId(di); } @@ -725,6 +738,7 @@ namespace MEDCoupling friend class DataArrayDiscrete; public: DataArrayInt64 *deepCopy() const; + DataArrayInt64 *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } DataArrayInt64 *buildNewEmptyInstance() const { return DataArrayInt64::New(); }//ok public: DataArrayInt64 *selectByTupleId(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const { return this->mySelectByTupleId(new2OldBg,new2OldEnd); } @@ -814,6 +828,7 @@ namespace MEDCoupling DataArrayChar *buildEmptySpecializedDAChar() const; DataArrayByteIterator *iterator(); DataArrayByte *deepCopy() const; + DataArrayByte *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } DataArrayByte *performCopyOrIncrRef(bool deepCopy) const; DataArrayByte *buildNewEmptyInstance() const { return DataArrayByte::New(); } char byteValue() const; @@ -843,6 +858,7 @@ namespace MEDCoupling DataArrayChar *buildEmptySpecializedDAChar() const; DataArrayAsciiCharIterator *iterator(); DataArrayAsciiChar *deepCopy() const; + DataArrayAsciiChar *copySorted(bool asc=true) const override { throw INTERP_KERNEL::Exception("DataArrayAsciiChar::copySorted : not implemented for DataArrayByte"); } DataArrayAsciiChar *performCopyOrIncrRef(bool deepCopy) const; DataArrayAsciiChar *buildNewEmptyInstance() const { return DataArrayAsciiChar::New(); } char asciiCharValue() const;