X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingMemArray.txx;h=a536810981ffd0428c786b6b4ac05e9437d19dcd;hb=04f1c450d57b28c7c473bdc59dc87eeef7393ca5;hp=373e9201b1e7ca1975973ea5c66e4a720d19d31a;hpb=1c9761aeac9192f62f324ad7a04430f2482bc843;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingMemArray.txx b/src/MEDCoupling/MEDCouplingMemArray.txx index 373e9201b..a53681098 100755 --- a/src/MEDCoupling/MEDCouplingMemArray.txx +++ b/src/MEDCoupling/MEDCouplingMemArray.txx @@ -593,7 +593,7 @@ namespace MEDCoupling std::ostringstream oss; oss << "DataArray::GetSlice : sliceId (" << nbOfSlices << ") must be in [0 , nbOfSlices (" << nbOfSlices << ") ) !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); } - mcIdType nbElems=DataArrayTemplate::GetNumberOfItemGivenBESRelative(start,stop,step,"DataArray::GetSlice"); + mcIdType nbElems=DataArrayTools::GetNumberOfItemGivenBESRelative(start,stop,step,"DataArray::GetSlice"); mcIdType minNbOfElemsPerSlice=nbElems/nbOfSlices; startSlice=start+minNbOfElemsPerSlice*step*sliceId; if(sliceId + MCAuto< typename Traits::ArrayTypeCh > DataArrayTemplate::NewFromArray(const T *arrBegin, const T *arrEnd) + { + using DataArrayT = typename Traits::ArrayTypeCh; + MCAuto< DataArrayT > ret(DataArrayT::New()); + std::size_t nbElts(std::distance(arrBegin,arrEnd)); + ret->alloc(nbElts,1); + std::copy(arrBegin,arrEnd,ret->getPointer()); + return ret; + } template std::vector< MCAuto< typename Traits::ArrayTypeCh > > DataArrayTemplate::explodeComponents() const @@ -1059,8 +1073,6 @@ namespace MEDCoupling * For more info on renumbering see \ref numbering. * \param [in] new2Old - C array of length equal to \a this->getNumberOfTuples() * giving a previous position of i-th new value. - * \return DataArrayDouble * - the new instance of DataArrayDouble that the caller - * is to delete using decrRef() as it is no more needed. */ template void DataArrayTemplate::renumberInPlaceR(const mcIdType *new2Old) @@ -1087,10 +1099,12 @@ namespace MEDCoupling } /*! - * Sorts values of the array. + * Sorts values of the array. \b Warning, this method is not const, it alterates \a this content. + * * \param [in] asc - \a true means ascending order, \a false, descending. * \throw If \a this is not allocated. * \throw If \a this->getNumberOfComponents() != 1. + * \sa copySorted */ template void DataArrayTemplate::sort(bool asc) @@ -1105,6 +1119,23 @@ namespace MEDCoupling declareAsNew(); } + /*! + * Sorts values of the array and put the result in a newly allocated returned array. + * This method does not alterate \a this content. + * + * \param [in] asc - \a true means ascending order, \a false, descending. + * \throw If \a this is not allocated. + * \throw If \a this->getNumberOfComponents() != 1. + * \sa sort + */ + template + typename Traits::ArrayTypeCh *DataArrayTemplate::copySortedImpl(bool asc) const + { + MCAuto::ArrayTypeCh> ret(static_cast::ArrayTypeCh *>(this->deepCopy())); + ret->sort(asc); + return ret.retn(); + } + /*! * Returns a copy of \a this array with values permuted as required by \a old2New array. * The values are permuted so that \c new[ \a old2New[ i ]] = \c old[ i ]. @@ -1321,7 +1352,7 @@ namespace MEDCoupling * Changes the number of components within \a this array so that its raw data **does * not** change, instead splitting this data into tuples changes. * \warning This method erases all (name and unit) component info set before! - * \param [in] newNbOfComp - number of components for \a this array to have. + * \param [in] newNbOfCompo - number of components for \a this array to have. * \throw If \a this is not allocated * \throw If getNbOfElems() % \a newNbOfCompo != 0. * \throw If \a newNbOfCompo is lower than 1. @@ -1436,7 +1467,7 @@ namespace MEDCoupling std::size_t newNbOfCompo=compoIds.size(); std::size_t oldNbOfCompo=getNumberOfComponents(); for(std::vector::const_iterator it=compoIds.begin();it!=compoIds.end();it++) - if((*it)<0 || (*it)>=oldNbOfCompo) + if((*it)>=oldNbOfCompo) // (*it) >= 0 (it is a size_t) { std::ostringstream oss; oss << Traits::ArrayTypeName << "::keepSelectedComponents : invalid requested component : " << *it << " whereas it should be in [0," << oldNbOfCompo << ") !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); @@ -3634,19 +3665,6 @@ struct NotInRange return new typename Traits::ArrayType; } - /*! - * Returns a newly created array containing a copy of the input array defined by [ \a arrBegin, \a arrEnd ) - */ - template - MCAuto< typename Traits::ArrayType > DataArrayDiscrete::NewFromArray(const T *arrBegin, const T *arrEnd) - { - MCAuto< typename Traits::ArrayType > ret(DataArrayDiscrete::New()); - std::size_t nbElts(std::distance(arrBegin,arrEnd)); - ret->alloc(nbElts,1); - std::copy(arrBegin,arrEnd,ret->getPointer()); - return ret; - } - /*! * Checks if values of \a this and another DataArrayInt are equal. For more info see * \ref MEDCouplingArrayBasicsCompare. @@ -4443,7 +4461,7 @@ struct NotInRange * from values of \a this array, which is supposed to contain a renumbering map in * "New to Old" mode. The result array contains a renumbering map in "Old to New" mode. * To know how to use the renumbering maps see \ref numbering. - * \param [in] newNbOfElem - the number of tuples in the result array. + * \param [in] oldNbOfElem - the number of tuples in the result array. * \return DataArrayInt * - the new instance of DataArrayInt. * The caller is to delete this result array using decrRef() as it is no more * needed. @@ -4513,7 +4531,6 @@ struct NotInRange * from values of \a this array, which is supposed to contain a renumbering map in * "New to Old" mode. The result array contains a renumbering map in "Old to New" mode. * To know how to use the renumbering maps see \ref numbering. - * \param [in] newNbOfElem - the number of tuples in the result array. * \return MapII - the new instance of Map. * * \if ENABLE_EXAMPLES @@ -5235,7 +5252,7 @@ struct NotInRange const T *ptr=this->getConstPointer(); mcIdType nbTuple(this->getNumberOfTuples()); std::size_t nbComps(this->getNumberOfComponents()); - if(compId<0 || compId>=nbComps) + if(compId>=nbComps) // compId >= 0 (it is a size_t) throw INTERP_KERNEL::Exception("DataArrayInt::accumulate : Invalid compId specified : No such nb of components !"); T ret=0; for(mcIdType i=0;i @@ -5725,11 +5742,8 @@ struct NotInRange this->checkAllocated(); if(this->getNumberOfComponents()!=1) throw INTERP_KERNEL::Exception("DataArrayInt::indexOfSameConsecutiveValueGroups : only single component allowed !"); - if(this->getNumberOfTuples()==0) - throw INTERP_KERNEL::Exception("DataArrayInt::indexOfSameConsecutiveValueGroups : number of tuples must be > 0 !"); const T *pt(this->begin()); const T *const ptEnd(this->end()) , * const ptBg(this->begin()); - const T *oldPt(pt); // first find nb of different values in this std::size_t nbOfTuplesOut(0); while( pt != ptEnd ) @@ -7198,7 +7212,7 @@ struct NotInRange * * \param [in] idsOfSelectStart begin of set of ids of the input extraction (included) * \param [in] idsOfSelectStop end of set of ids of the input extraction (excluded) - * \param [in] idsOfSelectStep + * \param [in] idsOfSelectStep step of set of ids of the input extraction * \param [in] arrIn arr origin array from which the extraction will be done. * \param [in] arrIndxIn is the input index array allowing to walk into \b arrIn * \param [out] arrOut the resulting array