/*------------------------------------------------------------------------*/ /* */ /* SETS.H */ /* */ /* Copyright (c) 1991, 1994 Borland International */ /* All Rights Reserved */ /* */ /*------------------------------------------------------------------------*/ #if !defined( CLASSLIB_SETS_H ) #define CLASSLIB_SETS_H #if !defined( __CHECKS_H ) #include #endif #if !defined( CLASSLIB_DEFS_H ) #include #endif #if !defined( CLASSLIB_BAGS_H ) #include #endif #pragma option -Vo- #if defined( BI_CLASSLIB_NO_po ) #pragma option -po- #endif /*------------------------------------------------------------------------*/ /* */ /* template class TMSetAsVector */ /* template class TMSetAsVectorIterator */ /* */ /* Implements a managed set of objects of type T, using a vector as */ /* the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class TMSetAsVectorIterator; template class TMSetAsVector : private TMBagAsVector { typedef TMBagAsVector Parent; public: friend TMSetAsVectorIterator; TMSetAsVector( unsigned sz = DEFAULT_SET_SIZE ) : TMBagAsVector(sz) { } int Add( const T& ); Parent::IterFunc; Parent::CondFunc; Parent::Detach; Parent::HasMember; Parent::Find; Parent::IsEmpty; Parent::IsFull; Parent::GetItemsInContainer; Parent::ForEach; Parent::FirstThat; Parent::LastThat; Parent::Flush; #if defined( BI_OLDNAMES ) void add( const T& t ) { Add(t); } Parent::detach; Parent::hasMember; Parent::findMember; Parent::isEmpty; Parent::isFull; Parent::getItemsInContainer; Parent::forEach; Parent::firstThat; Parent::lastThat; Parent::flush; #endif // BI_OLDNAMES }; template class TMSetAsVectorIterator : public TMBagAsVectorIterator { public: TMSetAsVectorIterator( const TMSetAsVector& s ) : TMBagAsVectorIterator(s) { } }; template int TMSetAsVector::Add( const T& t ) { if( HasMember(t) ) return 0; else return TMBagAsVector::Add(t); } #if defined( BI_OLDNAMES ) #define BI_MSetAsVector TMSetAsVector #define BI_MSetAsVectorIterator TMSetAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TSetAsVector */ /* template class TSetAsVectorIterator */ /* */ /* Implements a set of objects of type T, using a vector as */ /* the underlying implementation and TStandardAllocator as its */ /* memory manager. */ /* */ /*------------------------------------------------------------------------*/ template class TSetAsVector : public TMSetAsVector { public: TSetAsVector( unsigned sz = DEFAULT_SET_SIZE ) : TMSetAsVector(sz) { } }; template class TSetAsVectorIterator : public TMSetAsVectorIterator { public: TSetAsVectorIterator( const TSetAsVector& s ) : TMSetAsVectorIterator(s) { } }; #if defined( BI_OLDNAMES ) #define BI_SetAsVector TSetAsVector #define BI_SetAsVectorIterator TSetAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TMISetAsVector */ /* template class TMISetAsVectorIterator */ /* */ /* Implements a managed set of pointers to objects of type T, */ /* using a vector as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class TMISetAsVectorIterator; template class TMISetAsVector : private TMIBagAsVector { typedef TMIBagAsVector Parent; public: friend TMISetAsVectorIterator; TMISetAsVector( unsigned sz = DEFAULT_SET_SIZE ) : TMIBagAsVector(sz) { } int Add( T * ); Parent::IterFunc; Parent::CondFunc; Parent::Detach; Parent::HasMember; Parent::Find; Parent::IsEmpty; Parent::IsFull; Parent::GetItemsInContainer; Parent::ForEach; Parent::FirstThat; Parent::LastThat; Parent::Flush; Parent::OwnsElements; #if defined( BI_OLDNAMES ) void add( T *t ) { Add(t); } Parent::detach; Parent::findMember; Parent::isEmpty; Parent::isFull; Parent::getItemsInContainer; Parent::forEach; Parent::firstThat; Parent::lastThat; Parent::flush; Parent::ownsElements; #endif }; #if defined( BI_OLDNAMES ) #define BI_MISetAsVector TMISetAsVector #endif template int TMISetAsVector::Add( T *t ) { if( HasMember(t) ) return 0; else return TMIBagAsVector::Add(t); } template class TMISetAsVectorIterator : public TMIBagAsVectorIterator { public: TMISetAsVectorIterator( const TMISetAsVector& s ) : TMIBagAsVectorIterator(s) {} }; #if defined( BI_OLDNAMES ) #define BI_MISetAsVectorIterator TMISetAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TISetAsVector */ /* template class TISetAsVectorIterator */ /* */ /* Implements a set of pointers to objects of type T, */ /* using a vector as the underlying implementation and */ /* TStandardAllocator as its memory manager. */ /* */ /*------------------------------------------------------------------------*/ template class TISetAsVector : public TMISetAsVector { public: TISetAsVector( unsigned sz = DEFAULT_SET_SIZE ) : TMISetAsVector(sz) { } }; template class TISetAsVectorIterator : public TMISetAsVectorIterator { public: TISetAsVectorIterator( const TISetAsVector& s ) : TMISetAsVectorIterator(s) { } }; #if defined( BI_OLDNAMES ) #define BI_ISetAsVector TISetAsVector #define BI_ISetAsVectorIterator TISetAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TSet */ /* template class TSetIterator */ /* */ /* Easy names for TSetAsVector and TSetAsVectorIterator. */ /* */ /*------------------------------------------------------------------------*/ template class TSet : public TSetAsVector { public: TSet( unsigned sz = DEFAULT_SET_SIZE ) : TSetAsVector( sz ) { } }; template class TSetIterator : public TSetAsVectorIterator { public: TSetIterator( const TSet& a ) : TSetAsVectorIterator(a) { } }; #if defined( BI_CLASSLIB_NO_po ) #pragma option -po. #endif #pragma option -Vo. #endif // CLASSLIB_SETS_H