X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingMemArrayChar.cxx;h=4c44edb3bc0e1aeb12be75b1c53157469eed2bc5;hb=75006818415ac26dc594b6abb806ba3c292a545c;hp=d363454bb77108e96ae37a6ab66a6d610f70d059;hpb=c6fa7c58b5a305b1752e788b930c68cedac29b64;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingMemArrayChar.cxx b/src/MEDCoupling/MEDCouplingMemArrayChar.cxx index d363454bb..4c44edb3b 100644 --- a/src/MEDCoupling/MEDCouplingMemArrayChar.cxx +++ b/src/MEDCoupling/MEDCouplingMemArrayChar.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D +// Copyright (C) 2007-2016 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 // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,7 +19,7 @@ // Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMemArray.txx" -#include "MEDCouplingAutoRefCountObjectPtr.hxx" +#include "MCAuto.hxx" #include #include @@ -28,43 +28,10 @@ #include #include -using namespace ParaMEDMEM; +using namespace MEDCoupling; -/*! - * Checks if raw data is allocated. Read more on the raw data - * in \ref MEDCouplingArrayBasicsTuplesAndCompo "DataArrays infos" for more information. - * \return bool - \a true if the raw data is allocated, \a false else. - */ -bool DataArrayChar::isAllocated() const throw(INTERP_KERNEL::Exception) -{ - return getConstPointer()!=0; -} - -/*! - * Checks if raw data is allocated and throws an exception if it is not the case. - * \throw If the raw data is not allocated. - */ -void DataArrayChar::checkAllocated() const throw(INTERP_KERNEL::Exception) -{ - if(!isAllocated()) - throw INTERP_KERNEL::Exception("DataArrayChar::checkAllocated : Array is defined but not allocated ! Call alloc or setValues method first !"); -} - -/*! - * This method desallocated \a this without modification of informations relative to the components. - * After call of this method, DataArrayChar::isAllocated will return false. - * If \a this is already not allocated, \a this is let unchanged. - */ -void DataArrayChar::desallocate() throw(INTERP_KERNEL::Exception) -{ - _mem.destroy(); -} - -std::size_t DataArrayChar::getHeapMemorySize() const -{ - std::size_t sz=_mem.getNbOfElemAllocated(); - return DataArray::getHeapMemorySize()+sz; -} +template class MEDCoupling::MemArray; +template class MEDCoupling::DataArrayTemplate; /*! * Returns an integer value characterizing \a this array, which is useful for a quick @@ -72,7 +39,7 @@ std::size_t DataArrayChar::getHeapMemorySize() const * \return int - the hash value. * \throw If \a this is not allocated. */ -int DataArrayChar::getHashCode() const throw(INTERP_KERNEL::Exception) +int DataArrayChar::getHashCode() const { checkAllocated(); std::size_t nbOfElems=getNbOfElems(); @@ -87,172 +54,13 @@ int DataArrayChar::getHashCode() const throw(INTERP_KERNEL::Exception) return ret+ret0; } -/*! - * Checks the number of tuples. - * \return bool - \a true if getNumberOfTuples() == 0, \a false else. - * \throw If \a this is not allocated. - */ -bool DataArrayChar::empty() const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - return getNumberOfTuples()==0; -} - -/*! - * Copies all the data from another DataArrayChar. For more info see - * \ref MEDCouplingArrayBasicsCopyDeepAssign. - * \param [in] other - another instance of DataArrayChar to copy data from. - * \throw If the \a other is not allocated. - */ -void DataArrayChar::cpyFrom(const DataArrayChar& other) throw(INTERP_KERNEL::Exception) -{ - other.checkAllocated(); - int nbOfTuples=other.getNumberOfTuples(); - int nbOfComp=other.getNumberOfComponents(); - allocIfNecessary(nbOfTuples,nbOfComp); - std::size_t nbOfElems=(std::size_t)nbOfTuples*nbOfComp; - char *pt=getPointer(); - const char *ptI=other.getConstPointer(); - for(std::size_t i=0;igetNumberOfComponents() < 1. - * \throw If \a this is not allocated. - */ -void DataArrayChar::reverse() throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - _mem.reverse(getNumberOfComponents()); - declareAsNew(); -} - -/*! - * Assign zero to all values in \a this array. To know more on filling arrays see - * \ref MEDCouplingArrayFill. - * \throw If \a this is not allocated. - */ -void DataArrayChar::fillWithZero() throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - _mem.fillWithValue(0); - declareAsNew(); -} - -/*! - * Assign \a val to all values in \a this array. To know more on filling arrays see - * \ref MEDCouplingArrayFill. - * \param [in] val - the value to fill with. - * \throw If \a this is not allocated. - */ -void DataArrayChar::fillWithValue(char val) throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - _mem.fillWithValue(val); - declareAsNew(); -} - /*! * Returns a textual and human readable representation of \a this instance of * DataArrayChar. This text is shown when a DataArrayChar is printed in Python. * \return std::string - text describing \a this DataArrayChar. */ -std::string DataArrayChar::repr() const throw(INTERP_KERNEL::Exception) +std::string DataArrayChar::repr() const { std::ostringstream ret; reprStream(ret); return ret.str(); } -std::string DataArrayChar::reprZip() const throw(INTERP_KERNEL::Exception) +std::string DataArrayChar::reprZip() const { std::ostringstream ret; reprZipStream(ret); return ret.str(); } -/*! - * Changes number of tuples in the array. If the new number of tuples is smaller - * than the current number the array is truncated, otherwise the array is extended. - * \param [in] nbOfTuples - new number of tuples. - * \throw If \a this is not allocated. - * \throw If \a nbOfTuples is negative. - */ -void DataArrayChar::reAlloc(int nbOfTuples) throw(INTERP_KERNEL::Exception) -{ - if(nbOfTuples<0) - throw INTERP_KERNEL::Exception("DataArrayChar::reAlloc : input new number of tuples should be >=0 !"); - checkAllocated(); - _mem.reAlloc(getNumberOfComponents()*(std::size_t)nbOfTuples); - declareAsNew(); -} - /*! * Creates a new DataArrayInt and assigns all (textual and numerical) data of \a this * array to the new one. * \return DataArrayInt * - the new instance of DataArrayChar. */ -DataArrayInt *DataArrayChar::convertToIntArr() const throw(INTERP_KERNEL::Exception) +DataArrayInt *DataArrayChar::convertToIntArr() const { checkAllocated(); DataArrayInt *ret=DataArrayInt::New(); @@ -375,229 +130,6 @@ DataArrayInt *DataArrayChar::convertToIntArr() const throw(INTERP_KERNEL::Except return ret; } -/*! - * Permutes values of \a this array as required by \a old2New array. The values are - * permuted so that \c new[ \a old2New[ i ]] = \c old[ i ]. Number of tuples remains - * the same as in \this one. - * If a permutation reduction is needed, substr() or selectByTupleId() should be used. - * For more info on renumbering see \ref MEDCouplingArrayRenumbering. - * \param [in] old2New - C array of length equal to \a this->getNumberOfTuples() - * giving a new position for i-th old value. - */ -void DataArrayChar::renumberInPlace(const int *old2New) throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbTuples=getNumberOfTuples(); - int nbOfCompo=getNumberOfComponents(); - char *tmp=new char[nbTuples*nbOfCompo]; - const char *iptr=getConstPointer(); - for(int i=0;igetNumberOfTuples() - * giving a previous position of i-th new value. - */ -void DataArrayChar::renumberInPlaceR(const int *new2Old) throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbTuples=getNumberOfTuples(); - int nbOfCompo=getNumberOfComponents(); - char *tmp=new char[nbTuples*nbOfCompo]; - const char *iptr=getConstPointer(); - for(int i=0;igetNumberOfTuples() - * giving a new position for i-th old value. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - * \throw If \a this is not allocated. - */ -DataArrayChar *DataArrayChar::renumber(const int *old2New) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbTuples=getNumberOfTuples(); - int nbOfCompo=getNumberOfComponents(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(nbTuples,nbOfCompo); - ret->copyStringInfoFrom(*this); - const char *iptr=getConstPointer(); - char *optr=ret->getPointer(); - for(int i=0;icopyStringInfoFrom(*this); - return ret.retn(); -} - -/*! - * Returns a copy of \a this array with values permuted as required by \a new2Old array. - * The values are permuted so that \c new[ i ] = \c old[ \a new2Old[ i ]]. Number of - * tuples in the result array remains the same as in \this one. - * If a permutation reduction is needed, substr() or selectByTupleId() should be used. - * For more info on renumbering see \ref MEDCouplingArrayRenumbering. - * \param [in] new2Old - C array of length equal to \a this->getNumberOfTuples() - * giving a previous position of i-th new value. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - */ -DataArrayChar *DataArrayChar::renumberR(const int *new2Old) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbTuples=getNumberOfTuples(); - int nbOfCompo=getNumberOfComponents(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(nbTuples,nbOfCompo); - ret->copyStringInfoFrom(*this); - const char *iptr=getConstPointer(); - char *optr=ret->getPointer(); - for(int i=0;icopyStringInfoFrom(*this); - return ret.retn(); -} - -/*! - * Returns a shorten and permuted copy of \a this array. The new DataArrayChar is - * of size \a newNbOfTuple and it's values are permuted as required by \a old2New array. - * The values are permuted so that \c new[ \a old2New[ i ]] = \c old[ i ] for all - * \a old2New[ i ] >= 0. In other words every i-th tuple in \a this array, for which - * \a old2New[ i ] is negative, is missing from the result array. - * For more info on renumbering see \ref MEDCouplingArrayRenumbering. - * \param [in] old2New - C array of length equal to \a this->getNumberOfTuples() - * giving a new position for i-th old tuple and giving negative position for - * for i-th old tuple that should be omitted. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - */ -DataArrayChar *DataArrayChar::renumberAndReduce(const int *old2New, int newNbOfTuple) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbTuples=getNumberOfTuples(); - int nbOfCompo=getNumberOfComponents(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(newNbOfTuple,nbOfCompo); - const char *iptr=getConstPointer(); - char *optr=ret->getPointer(); - for(int i=0;i=0) - std::copy(iptr+i*nbOfCompo,iptr+(i+1)*nbOfCompo,optr+w*nbOfCompo); - } - ret->copyStringInfoFrom(*this); - return ret.retn(); -} - -/*! - * Returns a shorten and permuted copy of \a this array. The new DataArrayChar is - * of size \a new2OldEnd - \a new2OldBg and it's values are permuted as required by - * \a new2OldBg array. - * The values are permuted so that \c new[ i ] = \c old[ \a new2OldBg[ i ]]. - * This method is equivalent to renumberAndReduce() except that convention in input is - * \c new2old and \b not \c old2new. - * For more info on renumbering see \ref MEDCouplingArrayRenumbering. - * \param [in] new2OldBg - pointer to the beginning of a permutation array that gives a - * tuple index in \a this array to fill the i-th tuple in the new array. - * \param [in] new2OldEnd - specifies the end of the permutation array that starts at - * \a new2OldBg, so that pointer to a tuple index (\a pi) varies as this: - * \a new2OldBg <= \a pi < \a new2OldEnd. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - */ -DataArrayChar *DataArrayChar::selectByTupleId(const int *new2OldBg, const int *new2OldEnd) const -{ - return selectByTupleIdSafe(new2OldBg,new2OldEnd); -} - -/*! - * Returns a shorten and permuted copy of \a this array. The new DataArrayChar is - * of size \a new2OldEnd - \a new2OldBg and it's values are permuted as required by - * \a new2OldBg array. - * The values are permuted so that \c new[ i ] = \c old[ \a new2OldBg[ i ]]. - * This method is equivalent to renumberAndReduce() except that convention in input is - * \c new2old and \b not \c old2new. - * This method is equivalent to selectByTupleId() except that it prevents coping data - * from behind the end of \a this array. - * For more info on renumbering see \ref MEDCouplingArrayRenumbering. - * \param [in] new2OldBg - pointer to the beginning of a permutation array that gives a - * tuple index in \a this array to fill the i-th tuple in the new array. - * \param [in] new2OldEnd - specifies the end of the permutation array that starts at - * \a new2OldBg, so that pointer to a tuple index (\a pi) varies as this: - * \a new2OldBg <= \a pi < \a new2OldEnd. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - * \throw If \a new2OldEnd - \a new2OldBg > \a this->getNumberOfTuples(). - */ -DataArrayChar *DataArrayChar::selectByTupleIdSafe(const int *new2OldBg, const int *new2OldEnd) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - int nbComp=getNumberOfComponents(); - int oldNbOfTuples=getNumberOfTuples(); - ret->alloc((int)std::distance(new2OldBg,new2OldEnd),nbComp); - ret->copyStringInfoFrom(*this); - char *pt=ret->getPointer(); - const char *srcPt=getConstPointer(); - int i=0; - for(const int *w=new2OldBg;w!=new2OldEnd;w++,i++) - if(*w>=0 && *wgetNumberOfTuples) !"); - ret->copyStringInfoFrom(*this); - return ret.retn(); -} - -/*! - * Returns a shorten copy of \a this array. The new DataArrayChar contains every - * (\a bg + \c i * \a step)-th tuple of \a this array located before the \a end2-th - * tuple. Indices of the selected tuples are the same as ones returned by the Python - * command \c range( \a bg, \a end2, \a step ). - * This method is equivalent to selectByTupleIdSafe() except that the input array is - * not constructed explicitly. - * For more info on renumbering see \ref MEDCouplingArrayRenumbering. - * \param [in] bg - index of the first tuple to copy from \a this array. - * \param [in] end2 - index of the tuple before which the tuples to copy are located. - * \param [in] step - index increment to get index of the next tuple to copy. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - * \throw If (\a end2 < \a bg) or (\a step <= 0). - * \sa DataArrayChar::substr. - */ -DataArrayChar *DataArrayChar::selectByTupleId2(int bg, int end2, int step) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - int nbComp=getNumberOfComponents(); - int newNbOfTuples=GetNumberOfItemGivenBESRelative(bg,end2,step,"DataArrayInt::selectByTupleId2 : "); - ret->alloc(newNbOfTuples,nbComp); - char *pt=ret->getPointer(); - const char *srcPt=getConstPointer()+bg*nbComp; - for(int i=0;icopyStringInfoFrom(*this); - return ret.retn(); -} - /*! * Checks if all values in \a this array are equal to \a val. * \param [in] val - value to check equality of array values to. @@ -605,7 +137,7 @@ DataArrayChar *DataArrayChar::selectByTupleId2(int bg, int end2, int step) const * \throw If \a this is not allocated. * \throw If \a this->getNumberOfComponents() != 1 */ -bool DataArrayChar::isUniform(char val) const throw(INTERP_KERNEL::Exception) +bool DataArrayChar::isUniform(char val) const { checkAllocated(); if(getNumberOfComponents()!=1) @@ -619,142 +151,6 @@ bool DataArrayChar::isUniform(char val) const throw(INTERP_KERNEL::Exception) return true; } -/*! - * Changes the number of components within \a this array so that its raw data **does - * not** change, instead splitting this data into tuples changes. - * \param [in] newNbOfComp - 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. - * \throw If the rearrange method would lead to a number of tuples higher than 2147483647 (maximal capacity of int32 !). - * \warning This method erases all (name and unit) component info set before! - */ -void DataArrayChar::rearrange(int newNbOfCompo) throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - if(newNbOfCompo<1) - throw INTERP_KERNEL::Exception("DataArrayChar::rearrange : input newNbOfCompo must be > 0 !"); - std::size_t nbOfElems=getNbOfElems(); - if(nbOfElems%newNbOfCompo!=0) - throw INTERP_KERNEL::Exception("DataArrayChar::rearrange : nbOfElems%newNbOfCompo!=0 !"); - if(nbOfElems/newNbOfCompo>(std::size_t)std::numeric_limits::max()) - throw INTERP_KERNEL::Exception("DataArrayChar::rearrange : the rearrangement leads to too high number of tuples (> 2147483647) !"); - _info_on_compo.clear(); - _info_on_compo.resize(newNbOfCompo); - declareAsNew(); -} - -/*! - * Returns a shorten copy of \a this array. The new DataArrayChar contains all - * tuples starting from the \a tupleIdBg-th tuple and including all tuples located before - * the \a tupleIdEnd-th one. This methods has a similar behavior as std::string::substr(). - * This method is a specialization of selectByTupleId2(). - * \param [in] tupleIdBg - index of the first tuple to copy from \a this array. - * \param [in] tupleIdEnd - index of the tuple before which the tuples to copy are located. - * If \a tupleIdEnd == -1, all the tuples till the end of \a this array are copied. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - * \throw If \a tupleIdBg < 0. - * \throw If \a tupleIdBg > \a this->getNumberOfTuples(). - \throw If \a tupleIdEnd != -1 && \a tupleIdEnd < \a this->getNumberOfTuples(). - * \sa DataArrayChar::selectByTupleId2 - */ -DataArrayChar *DataArrayChar::substr(int tupleIdBg, int tupleIdEnd) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbt=getNumberOfTuples(); - if(tupleIdBg<0) - throw INTERP_KERNEL::Exception("DataArrayChar::substr : The tupleIdBg parameter must be greater than 0 !"); - if(tupleIdBg>nbt) - throw INTERP_KERNEL::Exception("DataArrayChar::substr : The tupleIdBg parameter is greater than number of tuples !"); - int trueEnd=tupleIdEnd; - if(tupleIdEnd!=-1) - { - if(tupleIdEnd>nbt) - throw INTERP_KERNEL::Exception("DataArrayChar::substr : The tupleIdBg parameter is greater or equal than number of tuples !"); - } - else - trueEnd=nbt; - int nbComp=getNumberOfComponents(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(trueEnd-tupleIdBg,nbComp); - ret->copyStringInfoFrom(*this); - std::copy(getConstPointer()+tupleIdBg*nbComp,getConstPointer()+trueEnd*nbComp,ret->getPointer()); - return ret.retn(); -} - -/*! - * Returns a shorten or extended copy of \a this array. If \a newNbOfComp is less - * than \a this->getNumberOfComponents() then the result array is shorten as each tuple - * is truncated to have \a newNbOfComp components, keeping first components. If \a - * newNbOfComp is more than \a this->getNumberOfComponents() then the result array is - * expanded as each tuple is populated with \a dftValue to have \a newNbOfComp - * components. - * \param [in] newNbOfComp - number of components for the new array to have. - * \param [in] dftValue - value assigned to new values added to the new array. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - * \throw If \a this is not allocated. - */ -DataArrayChar *DataArrayChar::changeNbOfComponents(int newNbOfComp, char dftValue) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(getNumberOfTuples(),newNbOfComp); - const char *oldc=getConstPointer(); - char *nc=ret->getPointer(); - int nbOfTuples=getNumberOfTuples(); - int oldNbOfComp=getNumberOfComponents(); - int dim=std::min(oldNbOfComp,newNbOfComp); - for(int i=0;isetName(getName().c_str()); - for(int i=0;isetInfoOnComponent(i,getInfoOnComponent(i).c_str()); - ret->setName(getName().c_str()); - return ret.retn(); -} - -/*! - * Returns a copy of \a this array composed of selected components. - * The new DataArrayChar has the same number of tuples but includes components - * specified by \a compoIds parameter. So that getNbOfElems() of the result array - * can be either less, same or more than \a this->getNbOfElems(). - * \param [in] compoIds - sequence of zero based indices of components to include - * into the new array. - * \return DataArrayChar * - the new instance of DataArrayChar that the caller - * is to delete using decrRef() as it is no more needed. - * \throw If \a this is not allocated. - * \throw If a component index (\a i) is not valid: - * \a i < 0 || \a i >= \a this->getNumberOfComponents(). - * - * \ref py_mcdataarrayint_keepselectedcomponents "Here is a Python example". - */ -DataArray *DataArrayChar::keepSelectedComponents(const std::vector& compoIds) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - MEDCouplingAutoRefCountObjectPtr ret(buildEmptySpecializedDAChar()); - int newNbOfCompo=(int)compoIds.size(); - int oldNbOfCompo=getNumberOfComponents(); - for(std::vector::const_iterator it=compoIds.begin();it!=compoIds.end();it++) - DataArray::CheckValueInRange(oldNbOfCompo,(*it),"keepSelectedComponents invalid requested component"); - int nbOfTuples=getNumberOfTuples(); - ret->alloc(nbOfTuples,newNbOfCompo); - ret->copyPartOfStringInfoFrom(*this,compoIds); - const char *oldc=getConstPointer(); - char *nc=ret->getPointer(); - for(int i=0;i& compoId * \throw If \a this is not allocated. * \throw If \a this and \a other arrays have different number of tuples. * + * \if ENABLE_EXAMPLES * \ref cpp_mcdataarrayint_meldwith "Here is a C++ example". * * \ref py_mcdataarrayint_meldwith "Here is a Python example". + * \endif */ -void DataArrayChar::meldWith(const DataArrayChar *other) throw(INTERP_KERNEL::Exception) +void DataArrayChar::meldWith(const DataArrayChar *other) { if(!other) throw INTERP_KERNEL::Exception("DataArrayChar::meldWith : DataArrayChar pointer in input is NULL !"); @@ -794,738 +192,6 @@ void DataArrayChar::meldWith(const DataArrayChar *other) throw(INTERP_KERNEL::Ex copyPartOfStringInfoFrom2(compIds,*other); } -/*! - * Copy all values from another DataArrayChar into specified tuples and components - * of \a this array. Textual data is not copied. - * The tree parameters defining set of indices of tuples and components are similar to - * the tree parameters of the Python function \c range(\c start,\c stop,\c step). - * \param [in] a - the array to copy values from. - * \param [in] bgTuples - index of the first tuple of \a this array to assign values to. - * \param [in] endTuples - index of the tuple before which the tuples to assign to - * are located. - * \param [in] stepTuples - index increment to get index of the next tuple to assign to. - * \param [in] bgComp - index of the first component of \a this array to assign values to. - * \param [in] endComp - index of the component before which the components to assign - * to are located. - * \param [in] stepComp - index increment to get index of the next component to assign to. - * \param [in] strictCompoCompare - if \a true (by default), then \a a->getNumberOfComponents() - * must be equal to the number of columns to assign to, else an - * exception is thrown; if \a false, then it is only required that \a - * a->getNbOfElems() equals to number of values to assign to (this condition - * must be respected even if \a strictCompoCompare is \a true). The number of - * values to assign to is given by following Python expression: - * \a nbTargetValues = - * \c len(\c range(\a bgTuples,\a endTuples,\a stepTuples)) * - * \c len(\c range(\a bgComp,\a endComp,\a stepComp)). - * \throw If \a a is NULL. - * \throw If \a a is not allocated. - * \throw If \a this is not allocated. - * \throw If parameters specifying tuples and components to assign to do not give a - * non-empty range of increasing indices. - * \throw If \a a->getNbOfElems() != \a nbTargetValues. - * \throw If \a strictCompoCompare == \a true && \a a->getNumberOfComponents() != - * \c len(\c range(\a bgComp,\a endComp,\a stepComp)). - * - * \ref py_mcdataarrayint_setpartofvalues1 "Here is a Python example". - */ -void DataArrayChar::setPartOfValues1(const DataArrayChar *a, int bgTuples, int endTuples, int stepTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare) throw(INTERP_KERNEL::Exception) -{ - if(!a) - throw INTERP_KERNEL::Exception("DataArrayChar::setPartOfValues1 : DataArrayChar pointer in input is NULL !"); - const char msg[]="DataArrayChar::setPartOfValues1"; - checkAllocated(); - a->checkAllocated(); - int newNbOfTuples=DataArray::GetNumberOfItemGivenBES(bgTuples,endTuples,stepTuples,msg); - int newNbOfComp=DataArray::GetNumberOfItemGivenBES(bgComp,endComp,stepComp,msg); - int nbComp=getNumberOfComponents(); - int nbOfTuples=getNumberOfTuples(); - DataArray::CheckValueInRangeEx(nbOfTuples,bgTuples,endTuples,"invalid tuple value"); - DataArray::CheckValueInRangeEx(nbComp,bgComp,endComp,"invalid component value"); - bool assignTech=true; - if(a->getNbOfElems()==(std::size_t)newNbOfTuples*newNbOfComp) - { - if(strictCompoCompare) - a->checkNbOfTuplesAndComp(newNbOfTuples,newNbOfComp,msg); - } - else - { - a->checkNbOfTuplesAndComp(1,newNbOfComp,msg); - assignTech=false; - } - char *pt=getPointer()+bgTuples*nbComp+bgComp; - const char *srcPt=a->getConstPointer(); - if(assignTech) - { - for(int i=0;igetNbOfElems() equals to number of values to assign to, then every value - * of \a a is assigned to its own location within \a this array. - * - If \a a includes one tuple, then all values of \a a are assigned to the specified - * components of every specified tuple of \a this array. In this mode it is required - * that \a a->getNumberOfComponents() equals to the number of specified components. - * - * \param [in] a - the array to copy values from. - * \param [in] bgTuples - pointer to an array of tuple indices of \a this array to - * assign values of \a a to. - * \param [in] endTuples - specifies the end of the array \a bgTuples, so that - * pointer to a tuple index (pi) varies as this: - * \a bgTuples <= \a pi < \a endTuples. - * \param [in] bgComp - pointer to an array of component indices of \a this array to - * assign values of \a a to. - * \param [in] endComp - specifies the end of the array \a bgTuples, so that - * pointer to a component index (pi) varies as this: - * \a bgComp <= \a pi < \a endComp. - * \param [in] strictCompoCompare - this parameter is checked only if the - * *mode of usage* is the first; if it is \a true (default), - * then \a a->getNumberOfComponents() must be equal - * to the number of specified columns, else this is not required. - * \throw If \a a is NULL. - * \throw If \a a is not allocated. - * \throw If \a this is not allocated. - * \throw If any index of tuple/component given by bgTuples / bgComp is - * out of a valid range for \a this array. - * \throw In the first *mode of usage*, if strictCompoCompare == true and - * if a->getNumberOfComponents() != (endComp - bgComp) . - * \throw In the second *mode of usage*, if \a a->getNumberOfTuples() != 1 or - * a->getNumberOfComponents() != (endComp - bgComp). - * - * \ref py_mcdataarrayint_setpartofvalues2 "Here is a Python example". - */ -void DataArrayChar::setPartOfValues2(const DataArrayChar *a, const int *bgTuples, const int *endTuples, const int *bgComp, const int *endComp, bool strictCompoCompare) throw(INTERP_KERNEL::Exception) -{ - if(!a) - throw INTERP_KERNEL::Exception("DataArrayChar::setPartOfValues2 : DataArrayChar pointer in input is NULL !"); - const char msg[]="DataArrayChar::setPartOfValues2"; - checkAllocated(); - a->checkAllocated(); - int nbComp=getNumberOfComponents(); - int nbOfTuples=getNumberOfTuples(); - for(const int *z=bgComp;z!=endComp;z++) - DataArray::CheckValueInRange(nbComp,*z,"invalid component id"); - int newNbOfTuples=(int)std::distance(bgTuples,endTuples); - int newNbOfComp=(int)std::distance(bgComp,endComp); - bool assignTech=true; - if(a->getNbOfElems()==(std::size_t)newNbOfTuples*newNbOfComp) - { - if(strictCompoCompare) - a->checkNbOfTuplesAndComp(newNbOfTuples,newNbOfComp,msg); - } - else - { - a->checkNbOfTuplesAndComp(1,newNbOfComp,msg); - assignTech=false; - } - char *pt=getPointer(); - const char *srcPt=a->getConstPointer(); - if(assignTech) - { - for(const int *w=bgTuples;w!=endTuples;w++) - { - DataArray::CheckValueInRange(nbOfTuples,*w,"invalid tuple id"); - for(const int *z=bgComp;z!=endComp;z++,srcPt++) - { - pt[(std::size_t)(*w)*nbComp+(*z)]=*srcPt; - } - } - } - else - { - for(const int *w=bgTuples;w!=endTuples;w++) - { - const char *srcPt2=srcPt; - DataArray::CheckValueInRange(nbOfTuples,*w,"invalid tuple id"); - for(const int *z=bgComp;z!=endComp;z++,srcPt2++) - { - pt[(std::size_t)(*w)*nbComp+(*z)]=*srcPt2; - } - } - } -} - -/*! - * Assign a given value to values at specified tuples and components of \a this array. - * The tuples and components to assign to are defined by C arrays of indices. - * \param [in] a - the value to assign. - * \param [in] bgTuples - pointer to an array of tuple indices of \a this array to - * assign \a a to. - * \param [in] endTuples - specifies the end of the array \a bgTuples, so that - * pointer to a tuple index (\a pi) varies as this: - * \a bgTuples <= \a pi < \a endTuples. - * \param [in] bgComp - pointer to an array of component indices of \a this array to - * assign \a a to. - * \param [in] endComp - specifies the end of the array \a bgTuples, so that - * pointer to a component index (\a pi) varies as this: - * \a bgComp <= \a pi < \a endComp. - * \throw If \a this is not allocated. - * \throw If any index of tuple/component given by bgTuples / bgComp is - * out of a valid range for \a this array. - * - * \ref py_mcdataarrayint_setpartofvaluessimple2 "Here is a Python example". - */ -void DataArrayChar::setPartOfValuesSimple2(char a, const int *bgTuples, const int *endTuples, const int *bgComp, const int *endComp) throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbComp=getNumberOfComponents(); - int nbOfTuples=getNumberOfTuples(); - for(const int *z=bgComp;z!=endComp;z++) - DataArray::CheckValueInRange(nbComp,*z,"invalid component id"); - char *pt=getPointer(); - for(const int *w=bgTuples;w!=endTuples;w++) - for(const int *z=bgComp;z!=endComp;z++) - { - DataArray::CheckValueInRange(nbOfTuples,*w,"invalid tuple id"); - pt[(std::size_t)(*w)*nbComp+(*z)]=a; - } -} - -/*! - * Copy all values from another DataArrayChar (\a a) into specified tuples and - * components of \a this array. Textual data is not copied. - * The tuples to assign to are defined by a C array of indices. - * The components to assign to are defined by three values similar to parameters of - * the Python function \c range(\c start,\c stop,\c step). - * There are two *modes of usage*: - * - If \a a->getNbOfElems() equals to number of values to assign to, then every value - * of \a a is assigned to its own location within \a this array. - * - If \a a includes one tuple, then all values of \a a are assigned to the specified - * components of every specified tuple of \a this array. In this mode it is required - * that \a a->getNumberOfComponents() equals to the number of specified components. - * - * \param [in] a - the array to copy values from. - * \param [in] bgTuples - pointer to an array of tuple indices of \a this array to - * assign values of \a a to. - * \param [in] endTuples - specifies the end of the array \a bgTuples, so that - * pointer to a tuple index (pi) varies as this: - * \a bgTuples <= \a pi < \a endTuples. - * \param [in] bgComp - index of the first component of \a this array to assign to. - * \param [in] endComp - index of the component before which the components to assign - * to are located. - * \param [in] stepComp - index increment to get index of the next component to assign to. - * \param [in] strictCompoCompare - this parameter is checked only in the first - * *mode of usage*; if \a strictCompoCompare is \a true (default), - * then \a a->getNumberOfComponents() must be equal - * to the number of specified columns, else this is not required. - * \throw If \a a is NULL. - * \throw If \a a is not allocated. - * \throw If \a this is not allocated. - * \throw If any index of tuple given by \a bgTuples is out of a valid range for - * \a this array. - * \throw In the first *mode of usage*, if strictCompoCompare == true and - * if a->getNumberOfComponents() is unequal to the number of components - * defined by (bgComp,endComp,stepComp). - * \throw In the second *mode of usage*, if \a a->getNumberOfTuples() != 1 or - * a->getNumberOfComponents() is unequal to the number of components - * defined by (bgComp,endComp,stepComp). - * \throw If parameters specifying components to assign to, do not give a - * non-empty range of increasing indices or indices are out of a valid range - * for \this array. - * - * \ref py_mcdataarrayint_setpartofvalues3 "Here is a Python example". - */ -void DataArrayChar::setPartOfValues3(const DataArrayChar *a, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp, bool strictCompoCompare) throw(INTERP_KERNEL::Exception) -{ - if(!a) - throw INTERP_KERNEL::Exception("DataArrayChar::setPartOfValues3 : DataArrayChar pointer in input is NULL !"); - const char msg[]="DataArrayChar::setPartOfValues3"; - checkAllocated(); - a->checkAllocated(); - int newNbOfComp=DataArray::GetNumberOfItemGivenBES(bgComp,endComp,stepComp,msg); - int nbComp=getNumberOfComponents(); - int nbOfTuples=getNumberOfTuples(); - DataArray::CheckValueInRangeEx(nbComp,bgComp,endComp,"invalid component value"); - int newNbOfTuples=(int)std::distance(bgTuples,endTuples); - bool assignTech=true; - if(a->getNbOfElems()==(std::size_t)newNbOfTuples*newNbOfComp) - { - if(strictCompoCompare) - a->checkNbOfTuplesAndComp(newNbOfTuples,newNbOfComp,msg); - } - else - { - a->checkNbOfTuplesAndComp(1,newNbOfComp,msg); - assignTech=false; - } - char *pt=getPointer()+bgComp; - const char *srcPt=a->getConstPointer(); - if(assignTech) - { - for(const int *w=bgTuples;w!=endTuples;w++) - for(int j=0;j(pi) varies as this: - * \a bgTuples <= \a pi < \a endTuples. - * \param [in] bgComp - index of the first component of \a this array to assign to. - * \param [in] endComp - index of the component before which the components to assign - * to are located. - * \param [in] stepComp - index increment to get index of the next component to assign to. - * \throw If \a this is not allocated. - * \throw If any index of tuple given by \a bgTuples is out of a valid range for - * \a this array. - * \throw If parameters specifying components to assign to, do not give a - * non-empty range of increasing indices or indices are out of a valid range - * for \this array. - * - * \ref py_mcdataarrayint_setpartofvaluessimple3 "Here is a Python example". - */ -void DataArrayChar::setPartOfValuesSimple3(char a, const int *bgTuples, const int *endTuples, int bgComp, int endComp, int stepComp) throw(INTERP_KERNEL::Exception) -{ - const char msg[]="DataArrayChar::setPartOfValuesSimple3"; - checkAllocated(); - int newNbOfComp=DataArray::GetNumberOfItemGivenBES(bgComp,endComp,stepComp,msg); - int nbComp=getNumberOfComponents(); - int nbOfTuples=getNumberOfTuples(); - DataArray::CheckValueInRangeEx(nbComp,bgComp,endComp,"invalid component value"); - char *pt=getPointer()+bgComp; - for(const int *w=bgTuples;w!=endTuples;w++) - for(int j=0;jcheckAllocated(); - int newNbOfTuples=DataArray::GetNumberOfItemGivenBES(bgTuples,endTuples,stepTuples,msg); - int newNbOfComp=(int)std::distance(bgComp,endComp); - int nbComp=getNumberOfComponents(); - for(const int *z=bgComp;z!=endComp;z++) - DataArray::CheckValueInRange(nbComp,*z,"invalid component id"); - int nbOfTuples=getNumberOfTuples(); - DataArray::CheckValueInRangeEx(nbOfTuples,bgTuples,endTuples,"invalid tuple value"); - bool assignTech=true; - if(a->getNbOfElems()==(std::size_t)newNbOfTuples*newNbOfComp) - { - if(strictCompoCompare) - a->checkNbOfTuplesAndComp(newNbOfTuples,newNbOfComp,msg); - } - else - { - a->checkNbOfTuplesAndComp(1,newNbOfComp,msg); - assignTech=false; - } - const char *srcPt=a->getConstPointer(); - char *pt=getPointer()+bgTuples*nbComp; - if(assignTech) - { - for(int i=0;ithis->getNumberOfComponents() != a->getNumberOfComponents(). - * \throw If \a tuplesSelec->getNumberOfComponents() != 2. - * \throw If any tuple index given by \a tuplesSelec is out of a valid range for - * the corresponding (\a this or \a a) array. - */ -void DataArrayChar::setPartOfValuesAdv(const DataArrayChar *a, const DataArrayChar *tuplesSelec) throw(INTERP_KERNEL::Exception) -{ - if(!a || !tuplesSelec) - throw INTERP_KERNEL::Exception("DataArrayChar::setPartOfValuesAdv : DataArrayChar pointer in input is NULL !"); - checkAllocated(); - a->checkAllocated(); - tuplesSelec->checkAllocated(); - int nbOfComp=getNumberOfComponents(); - if(nbOfComp!=a->getNumberOfComponents()) - throw INTERP_KERNEL::Exception("DataArrayChar::setPartOfValuesAdv : This and a do not have the same number of components !"); - if(tuplesSelec->getNumberOfComponents()!=2) - throw INTERP_KERNEL::Exception("DataArrayChar::setPartOfValuesAdv : Expecting to have a tuple selector DataArrayChar instance with exactly 2 components !"); - int thisNt=getNumberOfTuples(); - int aNt=a->getNumberOfTuples(); - char *valsToSet=getPointer(); - const char *valsSrc=a->getConstPointer(); - for(const char *tuple=tuplesSelec->begin();tuple!=tuplesSelec->end();tuple+=2) - { - if(tuple[1]>=0 && tuple[1]=0 && tuple[0]begin(),tuple)/2; - oss << " of 'tuplesSelec' request of tuple id #" << tuple[0] << " in 'this' ! It should be in [0," << thisNt << ") !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - } - else - { - std::ostringstream oss; oss << "DataArrayChar::setPartOfValuesAdv : Tuple #" << std::distance(tuplesSelec->begin(),tuple)/2; - oss << " of 'tuplesSelec' request of tuple id #" << tuple[1] << " in 'a' ! It should be in [0," << aNt << ") !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - } -} - -/*! - * Copy some tuples from another DataArrayChar (\a aBase) into contiguous tuples - * of \a this array. Textual data is not copied. Both arrays must have equal number of - * components. - * The tuples to assign to are defined by index of the first tuple, and - * their number is defined by \a tuplesSelec->getNumberOfTuples(). - * The tuples to copy are defined by values of a DataArrayChar. - * All components of selected tuples are copied. - * \param [in] tupleIdStart - index of the first tuple of \a this array to assign - * values to. - * \param [in] aBase - the array to copy values from. - * \param [in] tuplesSelec - the array specifying tuples of \a aBase to copy. - * \throw If \a this is not allocated. - * \throw If \a aBase is NULL. - * \throw If \a aBase is not allocated. - * \throw If \a tuplesSelec is NULL. - * \throw If \a tuplesSelec is not allocated. - * \throw If this->getNumberOfComponents() != aBase->getNumberOfComponents(). - * \throw If \a tuplesSelec->getNumberOfComponents() != 1. - * \throw If tupleIdStart + tuplesSelec->getNumberOfTuples() > this->getNumberOfTuples(). - * \throw If any tuple index given by \a tuplesSelec is out of a valid range for - * \a aBase array. - */ -void DataArrayChar::setContigPartOfSelectedValues(int tupleIdStart, const DataArray *aBase, const DataArrayInt *tuplesSelec) throw(INTERP_KERNEL::Exception) -{ - if(!aBase || !tuplesSelec) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues : input DataArray is NULL !"); - const DataArrayChar *a=dynamic_cast(aBase); - if(!a) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues : input DataArray aBase is not a DataArrayChar !"); - checkAllocated(); - a->checkAllocated(); - tuplesSelec->checkAllocated(); - int nbOfComp=getNumberOfComponents(); - if(nbOfComp!=a->getNumberOfComponents()) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues : This and a do not have the same number of components !"); - if(tuplesSelec->getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues : Expecting to have a tuple selector DataArrayChar instance with exactly 1 component !"); - int thisNt=getNumberOfTuples(); - int aNt=a->getNumberOfTuples(); - int nbOfTupleToWrite=tuplesSelec->getNumberOfTuples(); - char *valsToSet=getPointer()+tupleIdStart*nbOfComp; - if(tupleIdStart+nbOfTupleToWrite>thisNt) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues : invalid number range of values to write !"); - const char *valsSrc=a->getConstPointer(); - for(const int *tuple=tuplesSelec->begin();tuple!=tuplesSelec->end();tuple++,valsToSet+=nbOfComp) - { - if(*tuple>=0 && *tuplebegin(),tuple); - oss << " of 'tuplesSelec' request of tuple id #" << *tuple << " in 'a' ! It should be in [0," << aNt << ") !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - } -} - -/*! - * Copy some tuples from another DataArrayChar (\a aBase) into contiguous tuples - * of \a this array. Textual data is not copied. Both arrays must have equal number of - * components. - * The tuples to copy are defined by three values similar to parameters of - * the Python function \c range(\c start,\c stop,\c step). - * The tuples to assign to are defined by index of the first tuple, and - * their number is defined by number of tuples to copy. - * All components of selected tuples are copied. - * \param [in] tupleIdStart - index of the first tuple of \a this array to assign - * values to. - * \param [in] aBase - the array to copy values from. - * \param [in] bg - index of the first tuple to copy of the array \a aBase. - * \param [in] end2 - index of the tuple of \a aBase before which the tuples to copy - * are located. - * \param [in] step - index increment to get index of the next tuple to copy. - * \throw If \a this is not allocated. - * \throw If \a aBase is NULL. - * \throw If \a aBase is not allocated. - * \throw If this->getNumberOfComponents() != aBase->getNumberOfComponents(). - * \throw If tupleIdStart + len(range(bg,end2,step)) > this->getNumberOfTuples(). - * \throw If parameters specifying tuples to copy, do not give a - * non-empty range of increasing indices or indices are out of a valid range - * for the array \a aBase. - */ -void DataArrayChar::setContigPartOfSelectedValues2(int tupleIdStart, const DataArray *aBase, int bg, int end2, int step) throw(INTERP_KERNEL::Exception) -{ - if(!aBase) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues2 : input DataArray is NULL !"); - const DataArrayChar *a=dynamic_cast(aBase); - if(!a) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues2 : input DataArray aBase is not a DataArrayChar !"); - checkAllocated(); - a->checkAllocated(); - int nbOfComp=getNumberOfComponents(); - const char msg[]="DataArrayChar::setContigPartOfSelectedValues2"; - int nbOfTupleToWrite=DataArray::GetNumberOfItemGivenBES(bg,end2,step,msg); - if(nbOfComp!=a->getNumberOfComponents()) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues2 : This and a do not have the same number of components !"); - int thisNt=getNumberOfTuples(); - int aNt=a->getNumberOfTuples(); - char *valsToSet=getPointer()+tupleIdStart*nbOfComp; - if(tupleIdStart+nbOfTupleToWrite>thisNt) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues2 : invalid number range of values to write !"); - if(end2>aNt) - throw INTERP_KERNEL::Exception("DataArrayChar::setContigPartOfSelectedValues2 : invalid range of values to read !"); - const char *valsSrc=a->getConstPointer()+bg*nbOfComp; - for(int i=0;i \a this->getNumberOfTuples(). - * \throw If \a this is not allocated. - */ -DataArray *DataArrayChar::selectByTupleRanges(const std::vector >& ranges) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - int nbOfComp=getNumberOfComponents(); - int nbOfTuplesThis=getNumberOfTuples(); - if(ranges.empty()) - { - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(0,nbOfComp); - ret->copyStringInfoFrom(*this); - return ret.retn(); - } - int ref=ranges.front().first; - int nbOfTuples=0; - bool isIncreasing=true; - for(std::vector >::const_iterator it=ranges.begin();it!=ranges.end();it++) - { - if((*it).first<=(*it).second) - { - if((*it).first>=0 && (*it).second<=nbOfTuplesThis) - { - nbOfTuples+=(*it).second-(*it).first; - if(isIncreasing) - isIncreasing=ref<=(*it).first; - ref=(*it).second; - } - else - { - std::ostringstream oss; oss << "DataArrayChar::selectByTupleRanges : on range #" << std::distance(ranges.begin(),it); - oss << " (" << (*it).first << "," << (*it).second << ") is greater than number of tuples of this :" << nbOfTuples << " !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - } - else - { - std::ostringstream oss; oss << "DataArrayChar::selectByTupleRanges : on range #" << std::distance(ranges.begin(),it); - oss << " (" << (*it).first << "," << (*it).second << ") end is before begin !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - } - if(isIncreasing && nbOfTuplesThis==nbOfTuples) - return deepCpy(); - MEDCouplingAutoRefCountObjectPtr ret=buildEmptySpecializedDAChar(); - ret->alloc(nbOfTuples,nbOfComp); - ret->copyStringInfoFrom(*this); - const char *src=getConstPointer(); - char *work=ret->getPointer(); - for(std::vector >::const_iterator it=ranges.begin();it!=ranges.end();it++) - work=std::copy(src+(*it).first*nbOfComp,src+(*it).second*nbOfComp,work); - return ret.retn(); -} - -/*! - * Returns a value located at specified tuple and component. - * This method is equivalent to DataArrayChar::getIJ() except that validity of - * parameters is checked. So this method is safe but expensive if used to go through - * all values of \a this. - * \param [in] tupleId - index of tuple of interest. - * \param [in] compoId - index of component of interest. - * \return char - value located by \a tupleId and \a compoId. - * \throw If \a this is not allocated. - * \throw If condition ( 0 <= tupleId < this->getNumberOfTuples() ) is violated. - * \throw If condition ( 0 <= compoId < this->getNumberOfComponents() ) is violated. - */ -char DataArrayChar::getIJSafe(int tupleId, int compoId) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - if(tupleId<0 || tupleId>=getNumberOfTuples()) - { - std::ostringstream oss; oss << "DataArrayChar::getIJSafe : request for tupleId " << tupleId << " should be in [0," << getNumberOfTuples() << ") !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - if(compoId<0 || compoId>=getNumberOfComponents()) - { - std::ostringstream oss; oss << "DataArrayChar::getIJSafe : request for compoId " << compoId << " should be in [0," << getNumberOfComponents() << ") !"; - throw INTERP_KERNEL::Exception(oss.str().c_str()); - } - return _mem[tupleId*_info_on_compo.size()+compoId]; -} - -/*! - * Returns the first value of \a this. - * \return char - the last value of \a this array. - * \throw If \a this is not allocated. - * \throw If \a this->getNumberOfComponents() != 1. - * \throw If \a this->getNumberOfTuples() < 1. - */ -char DataArrayChar::front() const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::front : number of components not equal to one !"); - int nbOfTuples=getNumberOfTuples(); - if(nbOfTuples<1) - throw INTERP_KERNEL::Exception("DataArrayChar::front : number of tuples must be >= 1 !"); - return *(getConstPointer()); -} - -/*! - * Returns the last value of \a this. - * \return char - the last value of \a this array. - * \throw If \a this is not allocated. - * \throw If \a this->getNumberOfComponents() != 1. - * \throw If \a this->getNumberOfTuples() < 1. - */ -char DataArrayChar::back() const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::back : number of components not equal to one !"); - int nbOfTuples=getNumberOfTuples(); - if(nbOfTuples<1) - throw INTERP_KERNEL::Exception("DataArrayChar::back : number of tuples must be >= 1 !"); - return *(getConstPointer()+nbOfTuples-1); -} - /*! * Creates a new DataArrayChar containing IDs (indices) of tuples holding value equal to a * given one. @@ -1535,13 +201,13 @@ char DataArrayChar::back() const throw(INTERP_KERNEL::Exception) * \throw If \a this is not allocated. * \throw If \a this->getNumberOfComponents() != 1. */ -DataArrayInt *DataArrayChar::getIdsEqual(char val) const throw(INTERP_KERNEL::Exception) +DataArrayInt *DataArrayChar::findIdsEqual(char val) const { checkAllocated(); if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::getIdsEqual : the array must have only one component, you can call 'rearrange' method before !"); + throw INTERP_KERNEL::Exception("DataArrayChar::findIdsEqual : the array must have only one component, you can call 'rearrange' method before !"); const char *cptr=getConstPointer(); - MEDCouplingAutoRefCountObjectPtr ret(DataArrayInt::New()); ret->alloc(0,1); + MCAuto ret(DataArrayInt::New()); ret->alloc(0,1); int nbOfTuples=getNumberOfTuples(); for(int i=0;igetNumberOfComponents() != 1. */ -DataArrayInt *DataArrayChar::getIdsNotEqual(char val) const throw(INTERP_KERNEL::Exception) +DataArrayInt *DataArrayChar::findIdsNotEqual(char val) const { checkAllocated(); if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::getIdsNotEqual : the array must have only one component, you can call 'rearrange' method before !"); + throw INTERP_KERNEL::Exception("DataArrayChar::findIdsNotEqual : the array must have only one component, you can call 'rearrange' method before !"); const char *cptr=getConstPointer(); - MEDCouplingAutoRefCountObjectPtr ret(DataArrayInt::New()); ret->alloc(0,1); + MCAuto ret(DataArrayInt::New()); ret->alloc(0,1); int nbOfTuples=getNumberOfTuples(); for(int i=0;i& vals) const throw(INTERP_KERNEL::Exception) +int DataArrayChar::findIdSequence(const std::vector& vals) const { checkAllocated(); int nbOfCompo=getNumberOfComponents(); if(nbOfCompo!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::search : works only for DataArrayChar instance with one component !"); + throw INTERP_KERNEL::Exception("DataArrayChar::findIdSequence : works only for DataArrayChar instance with one component !"); const char *cptr=getConstPointer(); std::size_t nbOfVals=getNbOfElems(); const char *loc=std::search(cptr,cptr+nbOfVals,vals.begin(),vals.end()); @@ -1593,7 +259,7 @@ int DataArrayChar::search(const std::vector& vals) const throw(INTERP_KERN } /*! - * This method is an extension of DataArrayChar::locateValue method because this method works for DataArrayChar with + * This method is an extension of DataArrayChar::findIdFirstEqual method because this method works for DataArrayChar with * any number of components excepted 0 (an INTERP_KERNEL::Exception is thrown in this case). * This method searches in \b this is there is a tuple that matched the input parameter \b tupl. * If any the tuple id is returned. If not -1 is returned. @@ -1602,17 +268,17 @@ int DataArrayChar::search(const std::vector& vals) const throw(INTERP_KERN * the input vector. An INTERP_KERNEL::Exception is thrown too if \b this is not allocated. * * \return tuple id where \b tupl is. -1 if no such tuple exists in \b this. - * \sa DataArrayChar::search. + * \sa DataArrayChar::findIdSequence. */ -int DataArrayChar::locateTuple(const std::vector& tupl) const throw(INTERP_KERNEL::Exception) +int DataArrayChar::findIdFirstEqualTuple(const std::vector& tupl) const { checkAllocated(); int nbOfCompo=getNumberOfComponents(); if(nbOfCompo==0) - throw INTERP_KERNEL::Exception("DataArrayChar::locateTuple : 0 components in 'this' !"); + throw INTERP_KERNEL::Exception("DataArrayChar::findIdFirstEqualTuple : 0 components in 'this' !"); if(nbOfCompo!=(int)tupl.size()) { - std::ostringstream oss; oss << "DataArrayChar::locateTuple : 'this' contains " << nbOfCompo << " components and searching for a tuple of length " << tupl.size() << " !"; + std::ostringstream oss; oss << "DataArrayChar::findIdFirstEqualTuple : 'this' contains " << nbOfCompo << " components and searching for a tuple of length " << tupl.size() << " !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); } const char *cptr=getConstPointer(); @@ -1637,11 +303,11 @@ int DataArrayChar::locateTuple(const std::vector& tupl) const throw(INTERP * This method searches in \b this is there is a tuple that matched the input parameter \b tupl. * This method throws an INTERP_KERNEL::Exception if the number of components in \b this mismatches with the size of * the input vector. An INTERP_KERNEL::Exception is thrown too if \b this is not allocated. - * \sa DataArrayChar::locateTuple + * \sa DataArrayChar::findIdFirstEqualTuple */ -bool DataArrayChar::presenceOfTuple(const std::vector& tupl) const throw(INTERP_KERNEL::Exception) +bool DataArrayChar::presenceOfTuple(const std::vector& tupl) const { - return locateTuple(tupl)!=-1; + return findIdFirstEqualTuple(tupl)!=-1; } /*! @@ -1650,22 +316,22 @@ bool DataArrayChar::presenceOfTuple(const std::vector& tupl) const throw(I * \return bool - \a true in case if \a value is present within \a this array. * \throw If \a this is not allocated. * \throw If \a this->getNumberOfComponents() != 1. - * \sa locateValue() + * \sa findIdFirstEqual() */ -bool DataArrayChar::presenceOfValue(char value) const throw(INTERP_KERNEL::Exception) +bool DataArrayChar::presenceOfValue(char value) const { - return locateValue(value)!=-1; + return findIdFirstEqual(value)!=-1; } /*! * This method expects to be called when number of components of this is equal to one. * This method returns true if it exists a tuple so that the value is contained in \b vals. * If not any tuple contains one of the values contained in 'vals' false is returned. - * \sa DataArrayChar::locateValue + * \sa DataArrayChar::findIdFirstEqual */ -bool DataArrayChar::presenceOfValue(const std::vector& vals) const throw(INTERP_KERNEL::Exception) +bool DataArrayChar::presenceOfValue(const std::vector& vals) const { - return locateValue(vals)!=-1; + return findIdFirstEqual(vals)!=-1; } /*! @@ -1674,7 +340,7 @@ bool DataArrayChar::presenceOfValue(const std::vector& vals) const throw(I * If not any tuple contains \b value -1 is returned. * \sa DataArrayChar::presenceOfValue */ -int DataArrayChar::locateValue(char value) const throw(INTERP_KERNEL::Exception) +int DataArrayChar::findIdFirstEqual(char value) const { checkAllocated(); if(getNumberOfComponents()!=1) @@ -1693,7 +359,7 @@ int DataArrayChar::locateValue(char value) const throw(INTERP_KERNEL::Exception) * If not any tuple contains one of the values contained in 'vals' false is returned. * \sa DataArrayChar::presenceOfValue */ -int DataArrayChar::locateValue(const std::vector& vals) const throw(INTERP_KERNEL::Exception) +int DataArrayChar::findIdFirstEqual(const std::vector& vals) const { checkAllocated(); if(getNumberOfComponents()!=1) @@ -1707,74 +373,6 @@ int DataArrayChar::locateValue(const std::vector& vals) const throw(INTERP return -1; } -/*! - * Returns the maximal value and its location within \a this one-dimensional array. - * \param [out] tupleId - index of the tuple holding the maximal value. - * \return char - the maximal value among all values of \a this array. - * \throw If \a this->getNumberOfComponents() != 1 - * \throw If \a this->getNumberOfTuples() < 1 - */ -char DataArrayChar::getMaxValue(int& tupleId) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::getMaxValue : must be applied on DataArrayChar with only one component !"); - int nbOfTuples=getNumberOfTuples(); - if(nbOfTuples<=0) - throw INTERP_KERNEL::Exception("DataArrayChar::getMaxValue : array exists but number of tuples must be > 0 !"); - const char *vals=getConstPointer(); - const char *loc=std::max_element(vals,vals+nbOfTuples); - tupleId=(int)std::distance(vals,loc); - return *loc; -} - -/*! - * Returns the maximal value within \a this array that is allowed to have more than - * one component. - * \return char - the maximal value among all values of \a this array. - * \throw If \a this is not allocated. - */ -char DataArrayChar::getMaxValueInArray() const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - const char *loc=std::max_element(begin(),end()); - return *loc; -} - -/*! - * Returns the minimal value and its location within \a this one-dimensional array. - * \param [out] tupleId - index of the tuple holding the minimal value. - * \return char - the minimal value among all values of \a this array. - * \throw If \a this->getNumberOfComponents() != 1 - * \throw If \a this->getNumberOfTuples() < 1 - */ -char DataArrayChar::getMinValue(int& tupleId) const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::getMaxValue : must be applied on DataArrayChar with only one component !"); - int nbOfTuples=getNumberOfTuples(); - if(nbOfTuples<=0) - throw INTERP_KERNEL::Exception("DataArrayChar::getMaxValue : array exists but number of tuples must be > 0 !"); - const char *vals=getConstPointer(); - const char *loc=std::min_element(vals,vals+nbOfTuples); - tupleId=(int)std::distance(vals,loc); - return *loc; -} - -/*! - * Returns the minimal value within \a this array that is allowed to have more than - * one component. - * \return char - the minimal value among all values of \a this array. - * \throw If \a this is not allocated. - */ -char DataArrayChar::getMinValueInArray() const throw(INTERP_KERNEL::Exception) -{ - checkAllocated(); - const char *loc=std::min_element(begin(),end()); - return *loc; -} - /*! * This method works only on data array with one component. * This method returns a newly allocated array storing stored ascendantly tuple ids in \b this so that @@ -1784,13 +382,13 @@ char DataArrayChar::getMinValueInArray() const throw(INTERP_KERNEL::Exception) * \param [in] vmax end of range. This value is \b not included in range. * \return a newly allocated data array that the caller should deal with. */ -DataArrayInt *DataArrayChar::getIdsInRange(char vmin, char vmax) const throw(INTERP_KERNEL::Exception) +DataArrayInt *DataArrayChar::findIdsInRange(char vmin, char vmax) const { checkAllocated(); if(getNumberOfComponents()!=1) - throw INTERP_KERNEL::Exception("DataArrayChar::getIdsInRange : this must have exactly one component !"); + throw INTERP_KERNEL::Exception("DataArrayChar::findIdsInRange : this must have exactly one component !"); const char *cptr=getConstPointer(); - MEDCouplingAutoRefCountObjectPtr ret=DataArrayInt::New(); ret->alloc(0,1); + MCAuto ret=DataArrayInt::New(); ret->alloc(0,1); int nbOfTuples=getNumberOfTuples(); for(int i=0;i=vmin && *cptr& arr) throw(INTERP_KERNEL::Exception) +DataArrayChar *DataArrayChar::Aggregate(const std::vector& arr) { std::vector a; for(std::vector::const_iterator it4=arr.begin();it4!=arr.end();it4++) @@ -1845,7 +443,7 @@ DataArrayChar *DataArrayChar::Aggregate(const std::vector if(a.empty()) throw INTERP_KERNEL::Exception("DataArrayChar::Aggregate : input list must be NON EMPTY !"); std::vector::const_iterator it=a.begin(); - int nbOfComp=(*it)->getNumberOfComponents(); + std::size_t nbOfComp((*it)->getNumberOfComponents()); int nbt=(*it++)->getNumberOfTuples(); for(int i=1;it!=a.end();it++,i++) { @@ -1853,7 +451,7 @@ DataArrayChar *DataArrayChar::Aggregate(const std::vector throw INTERP_KERNEL::Exception("DataArrayChar::Aggregate : Nb of components mismatch for array aggregation !"); nbt+=(*it)->getNumberOfTuples(); } - MEDCouplingAutoRefCountObjectPtr ret=a[0]->buildEmptySpecializedDAChar(); + MCAuto ret=a[0]->buildEmptySpecializedDAChar(); ret->alloc(nbt,nbOfComp); char *pt=ret->getPointer(); for(it=a.begin();it!=a.end();it++) @@ -1878,7 +476,7 @@ DataArrayChar *DataArrayChar::Aggregate(const std::vector * \throw If any given array is not allocated. * \throw If \a a1->getNumberOfTuples() != \a a2->getNumberOfTuples() */ -DataArrayChar *DataArrayChar::Meld(const DataArrayChar *a1, const DataArrayChar *a2) throw(INTERP_KERNEL::Exception) +DataArrayChar *DataArrayChar::Meld(const DataArrayChar *a1, const DataArrayChar *a2) { std::vector arr(2); arr[0]=a1; arr[1]=a2; @@ -1900,7 +498,7 @@ DataArrayChar *DataArrayChar::Meld(const DataArrayChar *a1, const DataArrayChar * \throw If any given array is not allocated. * \throw If getNumberOfTuples() of arrays within \a arr is different. */ -DataArrayChar *DataArrayChar::Meld(const std::vector& arr) throw(INTERP_KERNEL::Exception) +DataArrayChar *DataArrayChar::Meld(const std::vector& arr) { std::vector a; for(std::vector::const_iterator it4=arr.begin();it4!=arr.end();it4++) @@ -1937,36 +535,10 @@ DataArrayChar *DataArrayChar::Meld(const std::vector& arr int k=0; for(int i=0;i<(int)a.size();i++) for(int j=0;jsetInfoOnComponent(k,a[i]->getInfoOnComponent(j).c_str()); + ret->setInfoOnComponent(k,a[i]->getInfoOnComponent(j)); return ret; } -/*! - * Sets a C array to be used as raw data of \a this. The previously set info - * of components is retained and re-sized. - * For more info see \ref MEDCouplingArraySteps1. - * \param [in] array - the C array to be used as raw data of \a this. - * \param [in] ownership - if \a true, \a array will be deallocated at destruction of \a this. - * \param [in] type - specifies how to deallocate \a array. If \a type == ParaMEDMEM::CPP_DEALLOC, - * \c delete [] \c array; will be called. If \a type == ParaMEDMEM::C_DEALLOC, - * \c free(\c array ) will be called. - * \param [in] nbOfTuple - new number of tuples in \a this. - * \param [in] nbOfCompo - new number of components in \a this. - */ -void DataArrayChar::useArray(const char *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo) throw(INTERP_KERNEL::Exception) -{ - _info_on_compo.resize(nbOfCompo); - _mem.useArray(array,ownership,type,(std::size_t)nbOfTuple*nbOfCompo); - declareAsNew(); -} - -void DataArrayChar::useExternalArrayWithRWAccess(const char *array, int nbOfTuple, int nbOfCompo) throw(INTERP_KERNEL::Exception) -{ - _info_on_compo.resize(nbOfCompo); - _mem.useExternalArrayWithRWAccess(array,(std::size_t)nbOfTuple*nbOfCompo); - declareAsNew(); -} - /*! * Returns a new instance of DataArrayByte. The caller is to delete this array * using decrRef() as it is no more needed. @@ -1986,7 +558,7 @@ DataArrayByteIterator *DataArrayByte::iterator() * \ref MEDCouplingArrayBasicsCopyDeep. * \return DataArrayByte * - a new instance of DataArrayByte. */ -DataArrayByte *DataArrayByte::deepCpy() const throw(INTERP_KERNEL::Exception) +DataArrayByte *DataArrayByte::deepCopy() const { return new DataArrayByte(*this); } @@ -1998,10 +570,10 @@ DataArrayByte *DataArrayByte::deepCpy() const throw(INTERP_KERNEL::Exception) * \return DataArrayByte * - either a new instance of DataArrayByte (if \a dCpy * == \a true) or \a this instance (if \a dCpy == \a false). */ -DataArrayByte *DataArrayByte::performCpy(bool dCpy) const +DataArrayByte *DataArrayByte::performCopyOrIncrRef(bool dCpy) const { if(dCpy) - return deepCpy(); + return deepCopy(); else { incrRef(); @@ -2015,7 +587,7 @@ DataArrayByte *DataArrayByte::performCpy(bool dCpy) const * \return char - the sole value stored in \a this array. * \throw If at least one of conditions stated above is not fulfilled. */ -char DataArrayByte::byteValue() const throw(INTERP_KERNEL::Exception) +char DataArrayByte::byteValue() const { if(isAllocated()) { @@ -2030,24 +602,24 @@ char DataArrayByte::byteValue() const throw(INTERP_KERNEL::Exception) throw INTERP_KERNEL::Exception("DataArrayByte::byteValue : DataArrayByte instance is not allocated !"); } -DataArrayChar *DataArrayByte::buildEmptySpecializedDAChar() const throw(INTERP_KERNEL::Exception) +DataArrayChar *DataArrayByte::buildEmptySpecializedDAChar() const { return DataArrayByte::New(); } -void DataArrayByte::reprStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprStream(std::ostream& stream) const { stream << "Name of byte array : \"" << _name << "\"\n"; reprWithoutNameStream(stream); } -void DataArrayByte::reprZipStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprZipStream(std::ostream& stream) const { stream << "Name of byte array : \"" << _name << "\"\n"; reprZipWithoutNameStream(stream); } -void DataArrayByte::reprWithoutNameStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprWithoutNameStream(std::ostream& stream) const { DataArray::reprWithoutNameStream(stream); if(_mem.reprHeader(getNumberOfComponents(),stream)) @@ -2064,13 +636,13 @@ void DataArrayByte::reprWithoutNameStream(std::ostream& stream) const throw(INTE } } -void DataArrayByte::reprZipWithoutNameStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprZipWithoutNameStream(std::ostream& stream) const { DataArray::reprWithoutNameStream(stream); _mem.reprZip(getNumberOfComponents(),stream); } -void DataArrayByte::reprCppStream(const char *varName, std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprCppStream(const std::string& varName, std::ostream& stream) const { int nbTuples=getNumberOfTuples(),nbComp=getNumberOfComponents(); const char *data=getConstPointer(); @@ -2090,7 +662,7 @@ void DataArrayByte::reprCppStream(const char *varName, std::ostream& stream) con /*! * Method that gives a quick overvien of \a this for python. */ -void DataArrayByte::reprQuickOverview(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprQuickOverview(std::ostream& stream) const { static const std::size_t MAX_NB_OF_BYTE_IN_REPR=300; stream << "DataArrayByte C++ instance at " << this << ". "; @@ -2110,7 +682,7 @@ void DataArrayByte::reprQuickOverview(std::ostream& stream) const throw(INTERP_K stream << "*** No data allocated ****"; } -void DataArrayByte::reprQuickOverviewData(std::ostream& stream, std::size_t maxNbOfByteInRepr) const throw(INTERP_KERNEL::Exception) +void DataArrayByte::reprQuickOverviewData(std::ostream& stream, std::size_t maxNbOfByteInRepr) const { const char *data=begin(); int nbOfTuples=getNumberOfTuples(); @@ -2145,7 +717,7 @@ void DataArrayByte::reprQuickOverviewData(std::ostream& stream, std::size_t maxN stream << "]"; } -bool DataArrayByte::isEqualIfNotWhy(const DataArrayChar& other, std::string& reason) const throw(INTERP_KERNEL::Exception) +bool DataArrayByte::isEqualIfNotWhy(const DataArrayChar& other, std::string& reason) const { const DataArrayByte *otherC=dynamic_cast(&other); if(!otherC) @@ -2153,6 +725,25 @@ bool DataArrayByte::isEqualIfNotWhy(const DataArrayChar& other, std::string& rea return DataArrayChar::isEqualIfNotWhy(other,reason); } +/*! + * This method is \b NOT wrapped into python because it can be useful only for performance reasons in C++ context. + * \throw if \a this is not allocated. + * \throw if \a this has not exactly one component. + */ +std::vector DataArrayByte::toVectorOfBool() const +{ + checkAllocated(); + if(getNumberOfComponents()!=1) + throw INTERP_KERNEL::Exception("DataArrayByte::toVectorOfBool : this method can be used only if this has one component !"); + int nbt(getNumberOfTuples()); + std::vector ret(nbt,false); + const char *pt(begin()); + for(int i=0;idecrRef(); } -DataArrayByteTuple *DataArrayByteIterator::nextt() throw(INTERP_KERNEL::Exception) +DataArrayByteTuple *DataArrayByteIterator::nextt() { if(_tuple_id<_nb_tuple) { @@ -2190,7 +781,7 @@ DataArrayByteTuple::DataArrayByteTuple(char *pt, int nbOfComp):_pt(pt),_nb_of_co { } -std::string DataArrayByteTuple::repr() const throw(INTERP_KERNEL::Exception) +std::string DataArrayByteTuple::repr() const { std::ostringstream oss; oss << "("; for(int i=0;i<_nb_of_compo-1;i++) @@ -2199,7 +790,7 @@ std::string DataArrayByteTuple::repr() const throw(INTERP_KERNEL::Exception) return oss.str(); } -char DataArrayByteTuple::byteValue() const throw(INTERP_KERNEL::Exception) +char DataArrayByteTuple::byteValue() const { if(_nb_of_compo==1) return *_pt; @@ -2207,12 +798,12 @@ char DataArrayByteTuple::byteValue() const throw(INTERP_KERNEL::Exception) } /*! - * This method returns a newly allocated instance the caller should dealed with by a ParaMEDMEM::DataArrayByte::decrRef. - * This method performs \b no copy of data. The content is only referenced using ParaMEDMEM::DataArrayByte::useArray with ownership set to \b false. + * This method returns a newly allocated instance the caller should dealed with by a MEDCoupling::DataArrayByte::decrRef. + * This method performs \b no copy of data. The content is only referenced using MEDCoupling::DataArrayByte::useArray with ownership set to \b false. * This method throws an INTERP_KERNEL::Exception is it is impossible to match sizes of \b this that is too say \b nbOfCompo=this->_nb_of_elem and \bnbOfTuples==1 or * \b nbOfCompo=1 and \bnbOfTuples==this->_nb_of_elem. */ -DataArrayByte *DataArrayByteTuple::buildDAByte(int nbOfTuples, int nbOfCompo) const throw(INTERP_KERNEL::Exception) +DataArrayByte *DataArrayByteTuple::buildDAByte(int nbOfTuples, int nbOfCompo) const { if((_nb_of_compo==nbOfCompo && nbOfTuples==1) || (_nb_of_compo==nbOfTuples && nbOfCompo==1)) { @@ -2242,7 +833,7 @@ DataArrayAsciiChar *DataArrayAsciiChar::New() * using decrRef() as it is no more needed. * \param [in] st the string. This input string should have a length greater than 0. If not an excpetion will be thrown. */ -DataArrayAsciiChar *DataArrayAsciiChar::New(const std::string& st) throw(INTERP_KERNEL::Exception) +DataArrayAsciiChar *DataArrayAsciiChar::New(const std::string& st) { return new DataArrayAsciiChar(st); } @@ -2250,11 +841,11 @@ DataArrayAsciiChar *DataArrayAsciiChar::New(const std::string& st) throw(INTERP_ /*! * \param [in] st the string. This input string should have a length greater than 0. If not an excpetion will be thrown. */ -DataArrayAsciiChar::DataArrayAsciiChar(const std::string& st) throw(INTERP_KERNEL::Exception) +DataArrayAsciiChar::DataArrayAsciiChar(const std::string& st) { std::size_t lgth=st.length(); if(lgth==0) - throw INTERP_KERNEL::Exception("DataArrayAsciiChar contructor with string ! Size of input string is null !"); + throw INTERP_KERNEL::Exception("DataArrayAsciiChar constructor with string ! Size of input string is null !"); alloc(1,lgth); std::copy(st.begin(),st.begin()+lgth,getPointer()); } @@ -2272,7 +863,7 @@ DataArrayAsciiChar::DataArrayAsciiChar(const std::string& st) throw(INTERP_KERNE * \throw If input \a vst is empty. * \throw If all strings in \a vst are empty. */ -DataArrayAsciiChar *DataArrayAsciiChar::New(const std::vector& vst, char defaultChar) throw(INTERP_KERNEL::Exception) +DataArrayAsciiChar *DataArrayAsciiChar::New(const std::vector& vst, char defaultChar) { return new DataArrayAsciiChar(vst,defaultChar); } @@ -2288,15 +879,15 @@ DataArrayAsciiChar *DataArrayAsciiChar::New(const std::vector& vst, * \throw If input \a vst is empty. * \throw If all strings in \a vst are empty. */ -DataArrayAsciiChar::DataArrayAsciiChar(const std::vector& vst, char defaultChar) throw(INTERP_KERNEL::Exception) +DataArrayAsciiChar::DataArrayAsciiChar(const std::vector& vst, char defaultChar) { if(vst.empty()) - throw INTERP_KERNEL::Exception("DataArrayAsciiChar contructor with vector of strings ! Empty array !"); + throw INTERP_KERNEL::Exception("DataArrayAsciiChar constructor with vector of strings ! Empty array !"); std::size_t nbCompo=0; for(std::vector::const_iterator it=vst.begin();it!=vst.end();it++) nbCompo=std::max(nbCompo,(*it).length()); if(nbCompo==0) - throw INTERP_KERNEL::Exception("DataArrayAsciiChar contructor with vector of strings ! All strings in not empty vector are empty !"); + throw INTERP_KERNEL::Exception("DataArrayAsciiChar constructor with vector of strings ! All strings in not empty vector are empty !"); int nbTuples=(int)vst.size(); alloc(nbTuples,(int)nbCompo); char *pt=getPointer(); @@ -2319,7 +910,7 @@ DataArrayAsciiCharIterator *DataArrayAsciiChar::iterator() * \ref MEDCouplingArrayBasicsCopyDeep. * \return DataArrayAsciiChar * - a new instance of DataArrayAsciiChar. */ -DataArrayAsciiChar *DataArrayAsciiChar::deepCpy() const throw(INTERP_KERNEL::Exception) +DataArrayAsciiChar *DataArrayAsciiChar::deepCopy() const { return new DataArrayAsciiChar(*this); } @@ -2331,10 +922,10 @@ DataArrayAsciiChar *DataArrayAsciiChar::deepCpy() const throw(INTERP_KERNEL::Exc * \return DataArrayAsciiChar * - either a new instance of DataArrayAsciiChar (if \a dCpy * == \a true) or \a this instance (if \a dCpy == \a false). */ -DataArrayAsciiChar *DataArrayAsciiChar::performCpy(bool dCpy) const +DataArrayAsciiChar *DataArrayAsciiChar::performCopyOrIncrRef(bool dCpy) const { if(dCpy) - return deepCpy(); + return deepCopy(); else { incrRef(); @@ -2348,7 +939,7 @@ DataArrayAsciiChar *DataArrayAsciiChar::performCpy(bool dCpy) const * \return char - the sole value stored in \a this array. * \throw If at least one of conditions stated above is not fulfilled. */ -char DataArrayAsciiChar::asciiCharValue() const throw(INTERP_KERNEL::Exception) +char DataArrayAsciiChar::asciiCharValue() const { if(isAllocated()) { @@ -2363,24 +954,24 @@ char DataArrayAsciiChar::asciiCharValue() const throw(INTERP_KERNEL::Exception) throw INTERP_KERNEL::Exception("DataArrayAsciiChar::asciiCharValue : DataArrayAsciiChar instance is not allocated !"); } -DataArrayChar *DataArrayAsciiChar::buildEmptySpecializedDAChar() const throw(INTERP_KERNEL::Exception) +DataArrayChar *DataArrayAsciiChar::buildEmptySpecializedDAChar() const { return DataArrayAsciiChar::New(); } -void DataArrayAsciiChar::reprStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprStream(std::ostream& stream) const { stream << "Name of ASCII char array : \"" << _name << "\"\n"; reprWithoutNameStream(stream); } -void DataArrayAsciiChar::reprZipStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprZipStream(std::ostream& stream) const { stream << "Name of ASCII char array : \"" << _name << "\"\n"; reprZipWithoutNameStream(stream); } -void DataArrayAsciiChar::reprWithoutNameStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprWithoutNameStream(std::ostream& stream) const { DataArray::reprWithoutNameStream(stream); if(_mem.reprHeader(getNumberOfComponents(),stream)) @@ -2397,12 +988,12 @@ void DataArrayAsciiChar::reprWithoutNameStream(std::ostream& stream) const throw } } -void DataArrayAsciiChar::reprZipWithoutNameStream(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprZipWithoutNameStream(std::ostream& stream) const { reprWithoutNameStream(stream); } -void DataArrayAsciiChar::reprCppStream(const char *varName, std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprCppStream(const std::string& varName, std::ostream& stream) const { int nbTuples=getNumberOfTuples(),nbComp=getNumberOfComponents(); const char *data=getConstPointer(); @@ -2422,7 +1013,7 @@ void DataArrayAsciiChar::reprCppStream(const char *varName, std::ostream& stream /*! * Method that gives a quick overvien of \a this for python. */ -void DataArrayAsciiChar::reprQuickOverview(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprQuickOverview(std::ostream& stream) const { static const std::size_t MAX_NB_OF_BYTE_IN_REPR=300; stream << "DataArrayAsciiChar C++ instance at " << this << ". "; @@ -2442,7 +1033,7 @@ void DataArrayAsciiChar::reprQuickOverview(std::ostream& stream) const throw(INT stream << "*** No data allocated ****"; } -void DataArrayAsciiChar::reprQuickOverviewData(std::ostream& stream, std::size_t maxNbOfByteInRepr) const throw(INTERP_KERNEL::Exception) +void DataArrayAsciiChar::reprQuickOverviewData(std::ostream& stream, std::size_t maxNbOfByteInRepr) const { const char *data=begin(); int nbOfTuples=getNumberOfTuples(); @@ -2485,7 +1076,7 @@ void DataArrayAsciiChar::reprQuickOverviewData(std::ostream& stream, std::size_t stream << "]"; } -bool DataArrayAsciiChar::isEqualIfNotWhy(const DataArrayChar& other, std::string& reason) const throw(INTERP_KERNEL::Exception) +bool DataArrayAsciiChar::isEqualIfNotWhy(const DataArrayChar& other, std::string& reason) const { const DataArrayAsciiChar *otherC=dynamic_cast(&other); if(!otherC) @@ -2513,7 +1104,7 @@ DataArrayAsciiCharIterator::~DataArrayAsciiCharIterator() _da->decrRef(); } -DataArrayAsciiCharTuple *DataArrayAsciiCharIterator::nextt() throw(INTERP_KERNEL::Exception) +DataArrayAsciiCharTuple *DataArrayAsciiCharIterator::nextt() { if(_tuple_id<_nb_tuple) { @@ -2530,14 +1121,14 @@ DataArrayAsciiCharTuple::DataArrayAsciiCharTuple(char *pt, int nbOfComp):_pt(pt) { } -std::string DataArrayAsciiCharTuple::repr() const throw(INTERP_KERNEL::Exception) +std::string DataArrayAsciiCharTuple::repr() const { std::ostringstream oss; std::copy(_pt,_pt+_nb_of_compo,std::ostream_iterator(oss)); return oss.str(); } -char DataArrayAsciiCharTuple::asciiCharValue() const throw(INTERP_KERNEL::Exception) +char DataArrayAsciiCharTuple::asciiCharValue() const { if(_nb_of_compo==1) return *_pt; @@ -2545,12 +1136,12 @@ char DataArrayAsciiCharTuple::asciiCharValue() const throw(INTERP_KERNEL::Except } /*! - * This method returns a newly allocated instance the caller should dealed with by a ParaMEDMEM::DataArrayAsciiChar::decrRef. - * This method performs \b no copy of data. The content is only referenced using ParaMEDMEM::DataArrayAsciiChar::useArray with ownership set to \b false. + * This method returns a newly allocated instance the caller should dealed with by a MEDCoupling::DataArrayAsciiChar::decrRef. + * This method performs \b no copy of data. The content is only referenced using MEDCoupling::DataArrayAsciiChar::useArray with ownership set to \b false. * This method throws an INTERP_KERNEL::Exception is it is impossible to match sizes of \b this that is too say \b nbOfCompo=this->_nb_of_elem and \bnbOfTuples==1 or * \b nbOfCompo=1 and \bnbOfTuples==this->_nb_of_elem. */ -DataArrayAsciiChar *DataArrayAsciiCharTuple::buildDAAsciiChar(int nbOfTuples, int nbOfCompo) const throw(INTERP_KERNEL::Exception) +DataArrayAsciiChar *DataArrayAsciiCharTuple::buildDAAsciiChar(int nbOfTuples, int nbOfCompo) const { if((_nb_of_compo==nbOfCompo && nbOfTuples==1) || (_nb_of_compo==nbOfTuples && nbOfCompo==1)) {