15 if ( a_rcVal1 < a_rcVal2 )
22template <
typename T,
typename Container,
typename SortResults = T2SortedVectorDefaultSortResults<T>>
29 template <
class... Args>
31 : Container( std::forward<Args>( args )... )
39 TINT iSearchStart = 0;
40 TINT iSearchEnd = Container::Size() - 1;
43 while ( iSearchStart <= iSearchEnd )
45 TINT iMiddle = ( iSearchStart + iSearchEnd ) / 2;
46 TINT iSortResult = SortResults()( a_rcValue, Container::At( iMiddle ) );
48 if ( iSortResult < 0 )
51 iSearchEnd = iMiddle - 1;
53 else if ( iSortResult > 0 )
56 iSearchStart = iMiddle + 1;
64 while ( iSearchStart <= iSearchEnd &&
65 SortResults()( a_rcValue, Container::At( iSearchStart ) ) == 0 )
70 a_rbNotUnique =
TTRUE;
75 return Iterator( iSearchStart,
this );
81 return Container::InsertBefore(
FindInsertionPoint( a_rValue, bNotUnique ), a_rValue );
90 return Push( a_rcItem );
101 void Clear() { Container::Clear(); }
103 Iterator Find(
const T& a_rValue ) {
return Container::Find( a_rValue ); }
104 void Erase(
const Iterator& a_rIterator ) { Container::Erase( a_rIterator ); }
105 void FindAndErase(
const T& a_rcItem ) { Container::FindAndErase( a_rcItem ); }
118 T&
At(
TINT a_iIndex ) {
return Container::At( a_iIndex ); }
119 const T&
At(
TINT a_iIndex )
const {
return Container::At( a_iIndex ); }
#define TSTATICCAST(POINTERTYPE, VALUE)
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
TINT operator()(const T &a_rcVal1, const T &a_rcVal2) const
Iterator FindInsertionPoint(const T &a_rcValue, TBOOL &a_rbNotUnique)
Iterator Push(const T *a_pValue)
Container * AccessContainer()
Iterator Find(const T &a_rValue)
~T2SortedVector()=default
void FindAndEraseFast(const T &a_rcItem)
const T & At(TINT a_iIndex) const
void Erase(const Iterator &a_rIterator)
T2SortedVector(Args &&... args)
T & operator[](TINT a_iIndex)
Iterator ReInsert(const T *a_pValue)
Iterator ReInsert(const T &a_rcItem)
void EraseFast(const Iterator &a_rIterator)
void FindAndErase(const T &a_rcItem)
Iterator Push(const T &a_rValue)
const T & operator[](TINT a_iIndex) const
Container::Iterator Iterator