//
// QBASE.h
//
//	This file defines CQElement - a base class for all types which
//	are to be used in the lockq.h and other templated queue manipulation
//	classes.
// 
// 




#ifndef	_QBASE_H_
#define	_QBASE_H_

#include	"dbgtrace.h"

//-----------------------------------------------
// Base Element Class
//
// This is the base class for Queue and stack Elements.
// The various implementations of Stacks and Queues are friends.
//	
class	CQElement	{
public : 
	CQElement	*m_pNext ;

	inline	CQElement( ) ;
	inline	CQElement( CQElement*	p ) ;
	inline	~CQElement( ) ;
} ;

CQElement::CQElement( ) : 
	m_pNext( 0 )  {
//
//	Construct a queue element - not in any list pointer must be NULL
//
}

CQElement::~CQElement( ) 	{
//
//	Destroy a queue element - next pointer must be NULL or
//	-1 (for lockq.h) so that we know the element is not 
//	on a queue at destruction time and the user has properly 
//	managed the linking and unlinking of the queue.
//
	_ASSERT( m_pNext == 0 || m_pNext == (CQElement*)(DWORD_PTR)-1 ) ;
}

CQElement::CQElement( CQElement *pIn ) : 
	m_pNext( pIn ) {
//
//	Constructor which sets the initial next pointer value !
//
}

#endif	// _CQUEUE_H

	



