// 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: tpsrtvec.icc,v 1.3 2000/02/01 16:55:01 gcosmo Exp $ // GEANT4 tag $Name: geant4-01-01 $ // // //--------------------------------------------------------------- // GEANT 4 class implementation file // // G4RWTPtrSortedVector //--------------------------------------------------------------- template G4RWTPtrSortedVector::G4RWTPtrSortedVector(size_t n) : std_pvector(n),rwsize(0) { for(int i=0;i G4RWTPtrSortedVector::G4RWTPtrSortedVector(const G4RWTPtrSortedVector& v) : std_pvector(v), rwsize(v.rwsize){} template G4RWTPtrSortedVector::~G4RWTPtrSortedVector(){} template G4RWTPtrSortedVector& G4RWTPtrSortedVector::operator=(const G4RWTPtrSortedVector& v) { std_pvector::operator=(v); rwsize=v.rwsize; return *this; } template T* const& G4RWTPtrSortedVector::operator [] (size_t n) const { if(n>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrSortedVector",rwsize,n)); return std_pvector::operator[](n); } template T* const& G4RWTPtrSortedVector::operator () (size_t n) const { #ifdef G4DEBUG if(n>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrSortedVector",rwsize,n)); #endif return std_pvector::operator[](n); } template T*& G4RWTPtrSortedVector::at(size_t n ) { if(n>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrSortedVector",rwsize,n)); return std_pvector::operator[](n); } template T* G4RWTPtrSortedVector::at(size_t n ) const { if(n>=rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrSortedVector",rwsize,n)); return std_pvector::operator[](n); } template void G4RWTPtrSortedVector::clear() { std_pvector::erase(std_pvector::begin(),std_pvector::end()); rwsize=0; } template void G4RWTPtrSortedVector::clearAndDestroy () { size_t sz=0; for(iterator it=std_pvector::begin();sz T* G4RWTPtrSortedVector::find (const T* a) const { if(!a || std_pvector::empty() || (rwsize==0)) return 0; //We are sorted, so try a n log n search int t,d; int u=rwsize,l=0; do { d=(u-l)/2; t=d+l; //this asks *a <= (*(*this)[t] whithout requiring operator<= if(sorter(a,(*this)[t]) || *a==*(*this)[t]) u=t; else l=t; } while(d>0); if ((u size_t G4RWTPtrSortedVector::entries () const { return rwsize; } template void G4RWTPtrSortedVector::insert ( T* a ) { if(rwsize size_t G4RWTPtrSortedVector::index ( const T* a ) { T*const* ii = std_pvector::begin(); size_t cnt = 0; for (T*const* it = ii;cnt G4bool G4RWTPtrSortedVector::isEmpty () const { return rwsize==0; } template T* const & G4RWTPtrSortedVector::first () const { if(!rwsize) G4RWTHROW(G4RWBoundsErr("G4RWTPtrSortedVector first()",rwsize,0)); return std_pvector::front(); } template T* const & G4RWTPtrSortedVector::last () const { if(rwsize) return std_pvector::operator[](rwsize-1); else G4RWTHROW(G4RWBoundsErr("G4RWTPtrSortedVector last()",rwsize,0)); } template size_t G4RWTPtrSortedVector::occurrencesOf(const T* a) const { size_t cnt = 0; size_t sz = 0; for (const_iterator it = std_pvector::begin();sz T* G4RWTPtrSortedVector::remove ( const T* a ) { iterator retval; size_t sz=0; for(retval=std_pvector::begin();sz size_t G4RWTPtrSortedVector::removeAll ( const T* a) { iterator s=std_pvector::end(); iterator e=std_pvector::end(); iterator r; size_t sz=0; int i=0; for(r=std_pvector::begin();sz