X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingMemArray.hxx;h=d70be4d273dfebab3911a6ea885c988e9500fb93;hb=e047259d4379db94f72d88eb21596f08f4ca6613;hp=501cea75e7e63e29d8b7ebecb79a7982ba71ff5e;hpb=b607ffc713080a567fb90595118069ac18181e99;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingMemArray.hxx b/src/MEDCoupling/MEDCouplingMemArray.hxx index 501cea75e..d70be4d27 100755 --- a/src/MEDCoupling/MEDCouplingMemArray.hxx +++ b/src/MEDCoupling/MEDCouplingMemArray.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2020 CEA/DEN, EDF R&D +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -33,6 +33,7 @@ #include #include #include +#include namespace MEDCoupling { @@ -45,7 +46,7 @@ namespace MEDCoupling // -- WARNING this enum must be synchronized with MEDCouplingCommon.i file ! -- class PartDefinition; - + template class MEDCouplingPointer { @@ -197,6 +198,7 @@ namespace MEDCoupling static mcIdType GetNumberOfItemGivenBES(mcIdType begin, mcIdType end, mcIdType step, const std::string& msg); static mcIdType GetNumberOfItemGivenBESRelative(mcIdType begin, mcIdType end, mcIdType step, const std::string& msg); static mcIdType GetPosOfItemGivenBESRelativeNoThrow(mcIdType value, mcIdType begin, mcIdType end, mcIdType step); + static std::vector SplitStringInChuncks(const std::string st, std::size_t sz); static std::string GetVarNameFromInfo(const std::string& info); static std::string GetUnitFromInfo(const std::string& info); static std::string BuildInfoFromVarAndUnit(const std::string& var, const std::string& unit); @@ -235,6 +237,13 @@ namespace MEDCoupling 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 { } // @@ -254,7 +263,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; @@ -329,6 +339,7 @@ namespace MEDCoupling public: MCAuto convertToDblArr() const; MCAuto convertToIntArr() const; + MCAuto convertToInt64Arr() const; MCAuto convertToFloatArr() const; void applyLin(T a, T b, std::size_t compoId); void applyLin(T a, T b); @@ -377,7 +388,7 @@ namespace MEDCoupling template void somethingEqual(const typename Traits::ArrayType *other); }; - + template class DataArrayTemplateFP : public DataArrayTemplateClassic { @@ -487,6 +498,7 @@ namespace MEDCoupling DataArrayDouble *trace() const; DataArrayDouble *deviator() const; DataArrayDouble *magnitude() const; + DataArrayDouble *minPerTuple() const; DataArrayDouble *maxPerTuple() const; DataArrayDouble *maxPerTupleWithCompoId(DataArrayIdType* &compoIdOfMaxPerTuple) const; DataArrayDouble *buildEuclidianDistanceDenseMatrix() const; @@ -527,13 +539,15 @@ namespace MEDCoupling bool resizeForUnserialization(const std::vector& tinyInfoI); void finishUnserialization(const std::vector& tinyInfoI, const std::vector& tinyInfoS); public: - template + template void findCommonTuplesAlg(const double *bbox, mcIdType nbNodes, mcIdType limitNodeId, double prec, DataArrayIdType *c, DataArrayIdType *cI) const; - template + template static void FindClosestTupleIdAlg(const BBTreePts& myTree, double dist, const double *pos, mcIdType nbOfTuples, const double *thisPt, mcIdType thisNbOfTuples, mcIdType *res); - template + template static void FindTupleIdsNearTuplesAlg(const BBTreePts& myTree, const double *pos, mcIdType nbOfTuples, double eps, DataArrayIdType *c, DataArrayIdType *cI); + private: + DataArrayDouble *operatePerTuple(std::function func) const; private: ~DataArrayDouble() { } DataArrayDouble() { } @@ -589,6 +603,7 @@ namespace MEDCoupling T checkUniformAndGuess() const; bool hasUniqueValues() const; void setSelectedComponents(const DataArrayType *a, const std::vector& compoIds); + DataArrayIdType *locateComponentId(const DataArrayType *valToSearchIntoTuples, const DataArrayIdType *tupleIdHint) const; DataArrayIdType *findIdsNotEqual(T val) const; DataArrayIdType *findIdsEqualTuple(const T *tupleBg, const T *tupleEnd) const; DataArrayIdType *findIdsEqualList(const T *valsBg, const T *valsEnd) const; @@ -638,6 +653,7 @@ namespace MEDCoupling DataArrayIdType *findRangeIdForEachTuple(const DataArrayType *ranges) const; DataArrayType *findIdInRangeForEachTuple(const DataArrayType *ranges) const; void sortEachPairToMakeALinkedList(); + void sortToHaveConsecutivePairs(); MCAuto fromLinkedListOfPairToList() const; DataArrayType *getDifferentValues() const; std::vector partitionByDifferentValues(std::vector& differentIds) const; @@ -691,7 +707,7 @@ namespace MEDCoupling protected: ~DataArrayDiscrete() { } }; - + template class DataArrayDiscreteSigned : public DataArrayDiscrete { @@ -710,6 +726,7 @@ namespace MEDCoupling DataArrayInt32 *deepCopy() const; DataArrayInt32 *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } DataArrayInt32 *buildNewEmptyInstance() const { return DataArrayInt32::New(); } + MCAuto convertToInt64Arr() const; 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); } @@ -732,6 +749,7 @@ namespace MEDCoupling DataArrayInt64 *deepCopy() const; DataArrayInt64 *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } DataArrayInt64 *buildNewEmptyInstance() const { return DataArrayInt64::New(); }//ok + MCAuto convertToInt32Arr() const; public: DataArrayInt64 *selectByTupleId(const mcIdType *new2OldBg, const mcIdType *new2OldEnd) const { return this->mySelectByTupleId(new2OldBg,new2OldEnd); } DataArrayInt64 *selectByTupleId(const DataArrayIdType& di) const { return this->mySelectByTupleId(di); } @@ -820,7 +838,7 @@ namespace MEDCoupling DataArrayChar *buildEmptySpecializedDAChar() const; DataArrayByteIterator *iterator(); DataArrayByte *deepCopy() const; - DataArrayByte *copySorted(bool asc=true) const override { return this->copySortedImpl(asc); } + 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; @@ -850,7 +868,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 *copySorted(bool asc=true) const override { (void)asc;throw INTERP_KERNEL::Exception("DataArrayAsciiChar::copySorted : not implemented for DataArrayByte"); } DataArrayAsciiChar *performCopyOrIncrRef(bool deepCopy) const; DataArrayAsciiChar *buildNewEmptyInstance() const { return DataArrayAsciiChar::New(); } char asciiCharValue() const; @@ -937,7 +955,7 @@ namespace MEDCoupling float floatValue() const; DataArrayFloat *buildDAFloat(std::size_t nbOfTuples, std::size_t nbOfCompo) const; }; - + class MEDCOUPLING_EXPORT DataArrayInt32Iterator : public DataArrayIterator { public: @@ -1002,7 +1020,7 @@ namespace MEDCoupling char *_pt; std::size_t _nb_of_compo; }; - + class DataArrayByteTuple; class MEDCOUPLING_EXPORT DataArrayByteIterator