/*------------------------------------------------------------------------*/ /* */ /* QUEUES.H */ /* */ /* Copyright Borland International 1991 */ /* All Rights Reserved */ /* */ /*------------------------------------------------------------------------*/ #if !defined( __QUEUES_H ) #define __QUEUES_H #if !defined( ___DEFS_H ) #include <_defs.h> #endif // ___DEFS_H #if !defined( __DEQUES_H ) #include #endif // __DEQUES_H /*------------------------------------------------------------------------*/ /* */ /* template class BI_QueueAsVector */ /* */ /* Implements a queue of objects of type T, using a vector as */ /* the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class _CLASSTYPE BI_QueueAsVector : public BI_DequeAsVector { public: BI_QueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : BI_DequeAsVector(sz) { } T get() { return BI_DequeAsVector::getRight(); } void put( T t ) { BI_DequeAsVector::putLeft( t ); } private: T getLeft(); T getRight(); void putLeft( T ); void putRight( T ); }; template class _CLASSTYPE BI_QueueAsVectorIterator : public BI_DequeAsVectorIterator { public: BI_QueueAsVectorIterator( const BI_DequeAsVector _FAR &q ) : BI_DequeAsVectorIterator(q) {} }; /*------------------------------------------------------------------------*/ /* */ /* template class BI_IQueueAsVector */ /* */ /* Implements a queue of pointers to objects of type T, */ /* using a vector as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class _CLASSTYPE BI_IQueueAsVector : public BI_IDequeAsVector { public: BI_IQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : BI_IDequeAsVector(sz) { } T _FAR *get() { return BI_IDequeAsVector::getRight(); } void put( T _FAR *t ) { BI_IDequeAsVector::putLeft( t ); } private: T _FAR *getLeft(); T _FAR *getRight(); void putLeft( T _FAR * ); void putRight( T _FAR * ); }; template class _CLASSTYPE BI_IQueueAsVectorIterator : public BI_IDequeAsVectorIterator { public: BI_IQueueAsVectorIterator( const BI_IDequeAsVector _FAR &q ) : BI_IDequeAsVectorIterator(q) {} }; /*------------------------------------------------------------------------*/ /* */ /* class BI_OQueueAsVector */ /* */ /* Implements a queue of pointers to Object, */ /* using a vector as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ class _CLASSTYPE BI_OQueueAsVector : public BI_ODequeAsVector { public: BI_OQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : BI_ODequeAsVector(sz) { } Object _FAR *get() { return BI_ODequeAsVector::getRight(); } void put( Object _FAR *t ) { BI_ODequeAsVector::putLeft( t ); } private: Object _FAR *getLeft(); Object _FAR *getRight(); void putLeft( Object _FAR * ); void putRight( Object _FAR * ); }; class _CLASSTYPE BI_OQueueAsVectorIterator : public BI_ODequeAsVectorIterator { public: BI_OQueueAsVectorIterator( const BI_ODequeAsVector _FAR &q ) : BI_ODequeAsVectorIterator(q) {} }; /*------------------------------------------------------------------------*/ /* */ /* class BI_TCQueueAsVector */ /* */ /* Implements an Object queue, with the full semantics of */ /* the BC 2.0 style queue, using a vector as the underlying */ /* implementation. */ /* */ /*------------------------------------------------------------------------*/ class _CLASSTYPE BI_TCQueueAsVector : public BI_TCDequeAsVector { public: BI_TCQueueAsVector( unsigned sz = DEFAULT_QUEUE_SIZE ) : BI_TCDequeAsVector(sz) { } Object _FAR & get() { return BI_TCDequeAsVector::getRight(); } void put( Object _FAR & t ) { BI_TCDequeAsVector::putLeft( t ); } virtual classType isA() const { return queueClass; } virtual char _FAR *nameOf() const { return "BI_TCQueueAsDoubleList"; } virtual ContainerIterator _FAR & initIterator() const; private: Object _FAR & getLeft(); Object _FAR & getRight(); void putLeft( Object _FAR & ); void putRight( Object _FAR & ); }; class _CLASSTYPE BI_TCQueueAsVectorIterator : public BI_TCDequeAsVectorIterator { public: BI_TCQueueAsVectorIterator( const BI_TCQueueAsVector _FAR &q ) : BI_TCDequeAsVectorIterator(q) { } }; inline ContainerIterator _FAR & BI_TCQueueAsVector::initIterator() const { return *new BI_TCQueueAsVectorIterator( *this ); } /*------------------------------------------------------------------------*/ /* */ /* template class BI_QueueAsDoubleList */ /* */ /* Implements a queue of objects of type T, using a double linked list */ /* as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class _CLASSTYPE BI_QueueAsDoubleList : public BI_DequeAsDoubleList { public: T get() { return BI_DequeAsDoubleList::getRight(); } void put( T t ) { BI_DequeAsDoubleList::putLeft( t ); } private: T getLeft(); T getRight(); void putLeft( T ); void putRight( T ); }; template class _CLASSTYPE BI_QueueAsDoubleListIterator : public BI_DequeAsDoubleListIterator { public: BI_QueueAsDoubleListIterator( const BI_QueueAsDoubleList _FAR & q ) : BI_DequeAsDoubleListIterator(q) { } }; /*------------------------------------------------------------------------*/ /* */ /* template class BI_IQueueAsDoubleList */ /* */ /* Implements a queue of pointers to objects of type T, */ /* using a double linked list as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ template class _CLASSTYPE BI_IQueueAsDoubleList : public BI_IDequeAsDoubleList { public: T _FAR *get() { return BI_IDequeAsDoubleList::getRight(); } void put( T _FAR *t ) { BI_IDequeAsDoubleList::putLeft( t ); } private: T _FAR *getLeft(); T _FAR *getRight(); void putLeft( T _FAR * ); void putRight( T _FAR * ); }; template class _CLASSTYPE BI_IQueueAsDoubleListIterator : public BI_IDequeAsDoubleListIterator { public: BI_IQueueAsDoubleListIterator( const BI_IQueueAsDoubleList _FAR& q ) : BI_IDequeAsDoubleListIterator(q) {} }; /*------------------------------------------------------------------------*/ /* */ /* class BI_OQueueAsDoubleList */ /* */ /* Implements a queue of pointers to Object, */ /* using a double linked list as the underlying implementation. */ /* */ /*------------------------------------------------------------------------*/ class _CLASSTYPE BI_OQueueAsDoubleList : public BI_ODequeAsDoubleList { public: Object _FAR *get() { return BI_ODequeAsDoubleList::getRight(); } void put( Object _FAR *t ) { BI_ODequeAsDoubleList::putLeft( t ); } private: Object _FAR *getLeft(); Object _FAR *getRight(); void putLeft( Object _FAR * ); void putRight( Object _FAR * ); }; class _CLASSTYPE BI_OQueueAsDoubleListIterator : public BI_ODequeAsDoubleListIterator { public: BI_OQueueAsDoubleListIterator( const BI_OQueueAsDoubleList _FAR & q ) : BI_ODequeAsDoubleListIterator(q) {} }; /*------------------------------------------------------------------------*/ /* */ /* class BI_TCQueueAsDoubleList */ /* */ /* Implements an Object queue, with the full semantics of */ /* the BC 2.0 style queue, using a double linked list as the underlying */ /* implementation. */ /* */ /*------------------------------------------------------------------------*/ class _CLASSTYPE BI_TCQueueAsDoubleList : public BI_TCDequeAsDoubleList { public: Object _FAR & get() { return BI_TCDequeAsDoubleList::getRight(); } void put( Object _FAR & t ) { BI_TCDequeAsDoubleList::putLeft( t ); } virtual classType isA() const { return queueClass; } virtual char _FAR *nameOf() const { return "BI_TCQueueAsDoubleList"; } virtual ContainerIterator _FAR & initIterator() const; private: Object _FAR & getLeft(); Object _FAR & getRight(); void putLeft( Object _FAR & ); void putRight( Object _FAR & ); }; class _CLASSTYPE BI_TCQueueAsDoubleListIterator : public BI_TCDequeAsDoubleListIterator { public: BI_TCQueueAsDoubleListIterator( const BI_TCQueueAsDoubleList _FAR &q ) : BI_TCDequeAsDoubleListIterator(q) {} }; inline ContainerIterator _FAR & BI_TCQueueAsDoubleList::initIterator() const { return *new BI_TCQueueAsDoubleListIterator( *this ); } #endif // __QUEUES_H