home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 May
/
Pcwk5b98.iso
/
Borland
/
Cplus45
/
BC45
/
CLOBSH.PAK
/
QUEUE.H
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-29
|
9KB
|
332 lines
/*------------------------------------------------------------------------*/
/* */
/* QUEUE.H */
/* */
/* Copyright Borland International 1991, 1993 */
/* All Rights Reserved */
/* */
/*------------------------------------------------------------------------*/
#if !defined( __QUEUE_H )
#define __QUEUE_H
#define BI_OLDNAMES
#if !defined( TEMPLATES )
#if !defined( __CLSTYPES_H )
#include "classlib\obsolete\ClsTypes.h"
#endif // __CLSTYPES_H
#if !defined( __DEQUE_H )
#include "classlib\obsolete\Deque.h"
#endif // __DEQUE_H
#pragma option -Vo-
#if defined( __BCOPT__ ) && !defined( __FLAT__ ) && !defined( _ALLOW_po )
#pragma option -po-
#endif
_CLASSDEF(Queue)
class _CLASSTYPE Queue : public Deque
{
public:
Object _FAR & get()
{
return Deque::getRight();
}
void put( Object _FAR & o )
{
Deque::putLeft( o );
}
virtual classType isA() const
{
return queueClass;
}
virtual char _FAR *nameOf() const
{
return "Queue";
}
private:
Object _FAR & getLeft();
Object _FAR & getRight();
void putLeft( Object _FAR & );
void putRight( Object _FAR & );
};
#else // TEMPLATES
#if !defined( __QUEUES_H )
#include "classlib\Queues.h"
#endif // __QUEUES_H
#pragma option -Vo-
#if defined( __BCOPT__ ) && !defined( __FLAT__ ) && !defined( _ALLOW_po )
#pragma option -po-
#endif
#define Queue BI_TCQueueAsDoubleList
#define PQueue PBI_TCQueueAsDoubleList
#define RQueue RBI_TCQueueAsDoubleList
#define RPQueue RPBI_TCQueueAsDoubleList
#define PCQueue PCBI_TCQueueAsDoubleList
#define RCQueue RCBI_TCQueueAsDoubleList
_CLASSDEF( BI_TCQueueAsDoubleList )
#define QueueIterator BI_TCQueueAsDoubleListIterator
#define PQueueIterator PBI_TCQueueAsDoubleListIterator
#define RQueueIterator RBI_TCQueueAsDoubleListIterator
#define RPQueueIterator RPBI_TCQueueAsDoubleListIterator
#define PCQueueIterator PCBI_TCQueueAsDoubleListIterator
#define RCQueueIterator RCBI_TCQueueAsDoubleListIterator
_CLASSDEF( BI_TCQueueAsDoubleListIterator )
/*------------------------------------------------------------------------*/
/* */
/* 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 );
}
/*------------------------------------------------------------------------*/
/* */
/* 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 // TEMPLATES
#if defined( __BCOPT__ ) && !defined( __FLAT__ ) && !defined( _ALLOW_po )
#pragma option -po.
#endif
#pragma option -Vo.
#endif // __QUEUE_H