// This code implementation is the intellectual property of // the GEANT4 collaboration. // // By copying, distributing or modifying the Program (or any work // based on the Program) you indicate your acceptance of this statement, // and all its terms. // // $Id: tpordvec.icc,v 1.5 2000/11/20 17:26:45 gcosmo Exp $ // GEANT4 tag $Name: geant4-03-00 $ // // //--------------------------------------------------------------- // GEANT 4 class implementation file // // G4RWTPtrOrderedVector //--------------------------------------------------------------- template G4RWTPtrOrderedVector::G4RWTPtrOrderedVector(size_t capacity) : std_pvector(capacity,(T*)0),rwsize(0){} // Here Rogue-Wave would leave // pointers T* uninitialised and // would create an EMPTY vector! template G4RWTPtrOrderedVector::G4RWTPtrOrderedVector(const G4RWTPtrOrderedVector& v) : std_pvector(v),rwsize(v.rwsize){} template G4RWTPtrOrderedVector::~G4RWTPtrOrderedVector(){} template G4RWTPtrOrderedVector& G4RWTPtrOrderedVector::operator=(const G4RWTPtrOrderedVector& v) { std_pvector::operator=(v), rwsize=v.rwsize; return *this; } template T*& G4RWTPtrOrderedVector::operator()(size_t i) { // temporarly commented; to allow use as left-value rwsize is increased // #ifdef G4DEBUG // if(i>=rwsize) // G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector []",rwsize,i)); // #endif if(rwsize<=i && i T* const& G4RWTPtrOrderedVector::operator()(size_t i) const { #ifdef G4DEBUG if(i>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector []",rwsize,i)); #endif return std_pvector::operator[](i); } template T*& G4RWTPtrOrderedVector::operator[](size_t i) { if(i>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector []",rwsize,i)); return std_pvector::operator[](i); } template T* const& G4RWTPtrOrderedVector::operator[](size_t i) const { if(i>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector const []",rwsize,i)); return std_pvector::operator[](i); } template void G4RWTPtrOrderedVector::clear() { // std_pvector::erase(std_pvector::begin(), std_pvector::end()); rwsize=0; } template void G4RWTPtrOrderedVector::clearAndDestroy() { G4std::set > tmp; for (size_t sz=0;sz >::iterator it; for(it=tmp.begin();it!=tmp.end();it++) { delete *it; } // std_pvector::erase(std_pvector::begin(), std_pvector::end()); rwsize=0; } template size_t G4RWTPtrOrderedVector::index( const T* a ) const { const_iterator i; size_t ptn = 0; for (i = std_pvector::begin();ptn void G4RWTPtrOrderedVector::insert ( T* a ) { if(rwsize size_t G4RWTPtrOrderedVector::occurrencesOf( const T* a ) const { const_iterator i; size_t ptn = 0; size_t sz=0; for (i = std_pvector::begin();sz G4bool G4RWTPtrOrderedVector::contains( const T* a ) const { const_iterator i; size_t ptn=0; for (i = std_pvector::begin(); ptn T* G4RWTPtrOrderedVector::remove( const T* a ) { iterator i; size_t ptn=0; size_t rwsz=rwsize; for (i = std_pvector::begin();ptn size_t G4RWTPtrOrderedVector::removeAll( const T* a ) { iterator i; size_t ptn = 0; size_t sz=0; size_t rwsz=rwsize; for (i = std_pvector::begin();sz T* G4RWTPtrOrderedVector::removeAt( size_t i ) { if(i>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector removeAt",rwsize,i)); iterator it=std_pvector::begin(); for(size_t j=0;j T* G4RWTPtrOrderedVector::find(const T* a) const { const_iterator i; size_t ptn=0; for (i = std_pvector::begin(); ptn void G4RWTPtrOrderedVector::resize(size_t N) { if(N>std_pvector::size()) { size_t e=N-std_pvector::size(); for(size_t i=0;irwsize) { iterator it=std_pvector::begin(); for(size_t i=0;i void G4RWTPtrOrderedVector::insertAt ( size_t i, T* a ) { // insertAt throws an exception of type G4RWBoundsErr // if you try to insert out of range // if(i>rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector insertAt",rwsize,i)); if(rwsizei;j--) std_pvector::operator[](j)=std_pvector::operator[](j-1); std_pvector::operator[](i)=a; rwsize++; } else { iterator it=std_pvector::begin(); for(size_t j=0;j T* G4RWTPtrOrderedVector::removeFirst () { if(rwsize!=0) { T* tmp=std_pvector::front(); std_pvector::erase(std_pvector::begin()); rwsize--; return tmp; } else return 0; } template T* G4RWTPtrOrderedVector::removeLast () { if(rwsize==0) return (T*) 0; rwsize--; T* tmp=std_pvector::operator[](rwsize); std_pvector::operator[](rwsize)=0; return tmp; } template size_t G4RWTPtrOrderedVector::entries() const { return rwsize; } template void G4RWTPtrOrderedVector::append ( T* a ) { insert( a ); } template size_t G4RWTPtrOrderedVector::length() const { return rwsize; } template T*& G4RWTPtrOrderedVector::at ( size_t i ) { if(i>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector at",rwsize,i)); return std_pvector::operator[](i); } template T*const& G4RWTPtrOrderedVector::at ( size_t i ) const { if(i>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector const at",rwsize,i)); return std_pvector::operator[](i); } template G4bool G4RWTPtrOrderedVector::isEmpty() const { return rwsize==0; } template T* G4RWTPtrOrderedVector::first() const { if(!rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrOrderedVector front",rwsize,0)); return std_pvector::front(); } template T* G4RWTPtrOrderedVector::last() const { if(rwsize) return std_pvector::operator[](rwsize-1); else return 0; } template void G4RWTPtrOrderedVector::prepend(T* const ptr) { std_pvector::insert(std_pvector::begin(),ptr); rwsize++; }