/*------------------------------------------------------------------------*/ /* */ /* QUEUES.H */ /* */ /* Copyright (c) 1991, 1994 Borland International */ /* All Rights Reserved */ /* */ /*------------------------------------------------------------------------*/ #if !defined( CLASSLIB_QUEUES_H ) #define CLASSLIB_QUEUES_H #if !defined( CLASSLIB_DEFS_H ) #include #endif #if !defined( CLASSLIB_DEQUES_H ) #include #endif #pragma option -Vo- #if defined( BI_CLASSLIB_NO_po ) #pragma option -po- #endif /*------------------------------------------------------------------------*/ /* */ /* template class TMQueueAsVector */ /* template class TMQueueAsVectorIterator */ /* */ /* Implements a managed queue of objects of type T, using a vector as */ /* the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class TMQueueAsVectorIterator; template class TMQueueAsVector : private TMDequeAsVector { typedef TMDequeAsVector Parent; public: friend class TMQueueAsVectorIterator; TMQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : TMDequeAsVector(sz) { } const T& Peek() const { return Parent::PeekRight(); } T Get() { return Parent::GetRight(); } void Put( const T& t ) { Parent::PutLeft( t ); } Parent::IterFunc; Parent::CondFunc; Parent::ForEach; Parent::FirstThat; Parent::LastThat; Parent::Flush; Parent::IsFull; Parent::IsEmpty; Parent::GetItemsInContainer; #if defined( BI_OLDNAMES ) T get() { return Get(); } void put( const T& t ) { Put(t); } Parent::forEach; Parent::firstThat; Parent::lastThat; Parent::flush; Parent::isFull; Parent::isEmpty; Parent::getItemsInContainer; #endif // BI_OLDNAMES }; template class TMQueueAsVectorIterator : public TMDequeAsVectorIterator { public: TMQueueAsVectorIterator( const TMQueueAsVector& q ) : TMDequeAsVectorIterator(q) { } }; #if defined( BI_OLDNAMES ) #define BI_MQueueAsVector TMQueueAsVector #define BI_MQueueAsVectorIterator TMQueueAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TQueueAsVector */ /* template class TQueueAsVectorIterator */ /* */ /* Implements a queue of objects of type T, using a vector as */ /* the underlying implementation and TStandardAllocator as its memory */ /* manager. */ /* */ /*------------------------------------------------------------------------*/ template class TQueueAsVector : public TMQueueAsVector { public: TQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : TMQueueAsVector(sz) { } }; template class TQueueAsVectorIterator : public TMQueueAsVectorIterator { public: TQueueAsVectorIterator( const TQueueAsVector& q ) : TMQueueAsVectorIterator(q) { } }; #if defined( BI_OLDNAMES ) #define BI_QueueAsVector TQueueAsVector #define BI_QueueAsVectorIterator TQueueAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TMIQueueAsVector */ /* template class TMIQueueAsVectorIterator */ /* */ /* Implements a managed queue of pointers to objects of type T, */ /* using a vector as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class TMIQueueAsVectorIterator; template class TMIQueueAsVector : private TMIDequeAsVector { typedef TMIDequeAsVector Parent; public: friend class TMIQueueAsVectorIterator; TMIQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : TMIDequeAsVector(sz) { } T *Peek() const { return Parent::PeekRight(); } T *Get() { return Parent::GetRight(); } void Put( T *t ) { Parent::PutLeft( t ); } Parent::IterFunc; Parent::CondFunc; Parent::IsFull; Parent::IsEmpty; Parent::GetItemsInContainer; Parent::Flush; Parent::ForEach; Parent::FirstThat; Parent::LastThat; Parent::OwnsElements; #if defined( BI_OLDNAMES ) T *peek() const { return Peek(); } T *get() { return Get(); } void put( T *t ) { Put(t); } Parent::isFull; Parent::isEmpty; Parent::getItemsInContainer; Parent::flush; Parent::forEach; Parent::firstThat; Parent::lastThat; Parent::ownsElements; #endif // BI_OLDNAMES }; template class TMIQueueAsVectorIterator : public TMIDequeAsVectorIterator { public: TMIQueueAsVectorIterator( const TMIQueueAsVector& q ) : TMIDequeAsVectorIterator(q) {} }; #if defined( BI_OLDNAMES ) #define BI_MIQueueAsVector TMIQueueAsVector #define BI_MIQueueAsVectorIterator TMIQueueAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TIQueueAsVector */ /* template class TIQueueAsVectorIterator */ /* */ /* Implements a queue of pointers to objects of type T, */ /* using a vector as the underlying implementation and */ /* TStandardAllocator as its memory manager. */ /* */ /*------------------------------------------------------------------------*/ template class TIQueueAsVector : public TMIQueueAsVector { public: TIQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : TMIQueueAsVector(sz) { } }; template class TIQueueAsVectorIterator : public TMIQueueAsVectorIterator { public: TIQueueAsVectorIterator( const TIQueueAsVector& q ) : TMIQueueAsVectorIterator(q) { } }; #if defined( BI_OLDNAMES ) #define BI_IQueueAsVector TIQueueAsVector #define BI_IQueueAsVectorIterator TIQueueAsVectorIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TMQueueAsDoubleList */ /* template class TMQueueAsDoubleListIterator */ /* */ /* Implements a managed queue of objects of type T, using a double */ /* linked list as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class TMQueueAsDoubleListIterator; template class TMQueueAsDoubleList : private TMDequeAsDoubleList { typedef TMDequeAsDoubleList Parent; public: friend class TMQueueAsDoubleListIterator; const T& Peek() const { return Parent::PeekRight(); } T Get() { return Parent::GetRight(); } void Put( const T& t ) { Parent::PutLeft( t ); } Parent::IterFunc; Parent::CondFunc; Parent::IsFull; Parent::IsEmpty; Parent::GetItemsInContainer; Parent::Flush; Parent::ForEach; Parent::FirstThat; Parent::LastThat; #if defined( BI_OLDNAMES ) T peek() const { return Peek(); } T get() { return Get(); } void put( const T& t ) { Put(t); } Parent::isFull; Parent::isEmpty; Parent::getItemsInContainer; Parent::flush; Parent::forEach; Parent::firstThat; Parent::lastThat; #endif // BI_OLDNAMES }; template class TMQueueAsDoubleListIterator : public TMDequeAsDoubleListIterator { public: TMQueueAsDoubleListIterator( const TMQueueAsDoubleList& q ) : TMDequeAsDoubleListIterator(q) { } }; #if defined( BI_OLDNAMES ) #define BI_QueueAsDoubleList TQueueAsDoubleList #define BI_QueueAsDoubleListIterator TQueueAsDoubleListIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TQueueAsDoubleList */ /* template class TQueueAsDoubleListIterator */ /* */ /* Implements a queue of objects of type T, using a double linked list */ /* as the underlying implementation and TStandardAllocator as its */ /* memory manager. */ /* */ /*------------------------------------------------------------------------*/ template class TQueueAsDoubleList : public TMQueueAsDoubleList { }; template class TQueueAsDoubleListIterator : public TMQueueAsDoubleListIterator { public: TQueueAsDoubleListIterator( const TQueueAsDoubleList& q ) : TMQueueAsDoubleListIterator(q) { } }; #if defined( BI_OLDNAMES ) #define BI_QueueAsDoubleList TQueueAsDoubleList #define BI_QueueAsDoubleListIterator TQueueAsDoubleListIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TMIQueueAsDoubleList */ /* template class TMIQueueAsDoubleListIterator */ /* */ /* Implements a managed queue of pointers to objects of type T, */ /* using a double linked list as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class TMIQueueAsDoubleListIterator; template class TMIQueueAsDoubleList : private TMIDequeAsDoubleList { typedef TMIDequeAsDoubleList Parent; public: friend class TMIQueueAsDoubleListIterator; T *Peek() const { return Parent::PeekRight(); } T *Get() { return Parent::GetRight(); } void Put( T *t ) { Parent::PutLeft( t ); } Parent::IterFunc; Parent::CondFunc; Parent::IsFull; Parent::IsEmpty; Parent::GetItemsInContainer; Parent::Flush; Parent::ForEach; Parent::FirstThat; Parent::LastThat; Parent::OwnsElements; #if defined( BI_OLDNAMES ) T *peek() const { return Peek(); } T *get() { return Get(); } void put( T *t ) { Put(t); } Parent::isFull; Parent::isEmpty; Parent::getItemsInContainer; Parent::flush; Parent::forEach; Parent::firstThat; Parent::lastThat; Parent::ownsElements; #endif // BI_OLDNAMES }; template class TMIQueueAsDoubleListIterator : public TMIDequeAsDoubleListIterator { public: TMIQueueAsDoubleListIterator( const TMIQueueAsDoubleList& q ) : TMIDequeAsDoubleListIterator(q) {} }; #if defined( BI_OLDNAMES ) #define BI_MIQueueAsDoubleList TMIQueueAsDoubleList #define BI_MIQueueAsDoubleListIterator TMIQueueAsDoubleListIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TIQueueAsDoubleList */ /* template class TIQueueAsDoubleListIterator */ /* */ /* Implements a queue of pointers to objects of type T, using a double */ /* linked list as the underlying implementation and TStandardAllocator */ /* as its memory manager. */ /* */ /*------------------------------------------------------------------------*/ template class TIQueueAsDoubleList : public TMIQueueAsDoubleList { }; template class TIQueueAsDoubleListIterator : public TMIQueueAsDoubleListIterator { public: TIQueueAsDoubleListIterator( const TIQueueAsDoubleList& q ) : TMIQueueAsDoubleListIterator(q) {} }; #if defined( BI_OLDNAMES ) #define BI_IQueueAsDoubleList TIQueueAsDoubleList #define BI_IQueueAsDoubleListIterator TIQueueAsDoubleListIterator #endif /*------------------------------------------------------------------------*/ /* */ /* template class TQueue */ /* template class TQueueIterator */ /* */ /* Easy names for TQueueAsVector and TQueueAsVectorIterator */ /* */ /*------------------------------------------------------------------------*/ template class TQueue : public TQueueAsVector { public: TQueue( unsigned max = DEFAULT_QUEUE_SIZE ) : TQueueAsVector( max ) { } } template class TQueueIterator : public TQueueAsVectorIterator { public: TQueueIterator( const TQueue& a ) : TQueueAsVectorIterator(a) { } }; #if defined( BI_CLASSLIB_NO_po ) #pragma option -po. #endif #pragma option -Vo. #endif // CLASSLIB_QUEUES_H