X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FParaMEDMEM%2FExplicitMapping.hxx;h=3098b706faf6e3cba09b3f01c7f07cc66f5f7cd5;hb=9f966e0ed55cc976b59a17318a7be82445529eda;hp=e83d0dc97a752baab73dfe8eac88f3d8f386dc72;hpb=586a7f0f6d8d1592a9547b15d1caac905cb1b053;p=tools%2Fmedcoupling.git diff --git a/src/ParaMEDMEM/ExplicitMapping.hxx b/src/ParaMEDMEM/ExplicitMapping.hxx index e83d0dc97..3098b706f 100644 --- a/src/ParaMEDMEM/ExplicitMapping.hxx +++ b/src/ParaMEDMEM/ExplicitMapping.hxx @@ -26,114 +26,27 @@ namespace ParaMEDMEM { + /*! + * Internal class, not part of the public API. + * + * Used by the ExplicitCoincidentDEC. + */ class ExplicitMapping { public: - - ExplicitMapping():_numbers(0), _domains(0), _comm_buffer(0) { } - - ~ExplicitMapping() - { - if (_domains!=0) delete[] _domains; - if (_numbers!=0) delete[] _numbers; - if (_comm_buffer!=0) delete[] _comm_buffer; - } + ExplicitMapping(); + ~ExplicitMapping(); - void pushBackElem(std::pair idistant) - { - _mapping.push_back(idistant); - } - - void setDistantElem(int ilocal, std::pair idistant) - { - _mapping[ilocal]=idistant; - } - - int nbDistantDomains() - { - if (_distant_domains.empty()) - { - for (std::vector >::const_iterator iter= _mapping.begin(); - iter!=_mapping.end(); - iter++) - _distant_domains.insert(iter->first); - } - return _distant_domains.size(); - } + void pushBackElem(std::pair idistant); + void setDistantElem(int ilocal, std::pair idistant); + int nbDistantDomains(); + std::pair getDistantNumbering(int ielem) const; - std::pair getDistantNumbering(int ielem)const - { - return _mapping[ielem]; - } + int getDistantDomain(int i); + int getNbDistantElems(int i); + int* serialize(int idproc); + void unserialize(int nbprocs, int* sizes,int nbtarget, int* targetrank, int* commbuffer); - int getDistantDomain(int i) - { - if (_domains==0) - computeNumbers(); - - return _domains[i]; - } - - int getNbDistantElems(int i) - { - if (_numbers==0) - computeNumbers(); - return _numbers[i]; - } - - int* serialize(int idproc) - { - _comm_buffer=new int[_mapping.size()*2]; - std::vector offsets(_distant_domains.size()); - offsets[0]=0; - for (int i=1; i<(int)_distant_domains.size();i++) - offsets[i]=offsets[i-1]+_numbers[i-1]; - - for (int i=0; i<(int)_mapping.size(); i++) - { - int offset= offsets[_mapping[i].first]; - _comm_buffer[offset*2]=idproc; - _comm_buffer[offset*2+1]=_mapping[i].second; - offsets[_mapping[i].first]++; - } - return _comm_buffer; - } - - void unserialize(int nbprocs, int* sizes,int nbtarget, int* targetrank, int* commbuffer) - { - int total_size=0; - for (int i=0; i< nbprocs; i++) - total_size+=sizes[i]; - - _mapping.resize(total_size); - _buffer_index=new int[total_size]; - int indmap=0; - for (int i=0; i0) - { - _numbers[index]=sizes[targetrank[i]]; - _domains[index]=i; - index++; - } - } - _send_counts=new int[nbprocs]; - for (int i=0; i counts; - if (_numbers==0) - { - _numbers=new int[nbDistantDomains()]; - _domains=new int[nbDistantDomains()]; - for (int i=0; i<(int)_mapping.size(); i++) - { - if ( counts.find(_mapping[i].first) == counts.end()) - counts.insert(std::make_pair(_mapping[i].first,1)); - else - (counts[_mapping[i].first])++; - } - int counter=0; - for (std::map::const_iterator iter=counts.begin(); - iter!=counts.end(); - iter++) - { - _numbers[counter]=iter->second; - _domains[counter]=iter->first; - counter++; - } - } - } + void computeNumbers(); }; }