www.pudn.com > dialogic_IVR.rar > PointerList.cpp


// PointerList.cpp: implementation of the CPointerList class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
//#include "VoiceScript.h" 
#include "PointerList.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CPointerList::CPointerList() 
{ 
	ppmember = NULL; 
	m_iCount = 0; 
	m_iIncrement = 100; 
	m_iTotalCount = 0; 
} 
 
CPointerList::~CPointerList() 
{ 
	if(ppmember != NULL) 
	{ 
		free(ppmember); 
	} 
} 
 
int CPointerList::AddHead(void *pNewElement) 
{ 
	if(ppmember == NULL || m_iCount == m_iTotalCount) 
	{ 
		m_iTotalCount = m_iCount + m_iIncrement; 
		ppmember = (void **)realloc(ppmember, m_iTotalCount * sizeof(void *)); 
	} 
	 
	for(int i = 0; i < m_iCount; i ++) 
	{ 
		ppmember[m_iCount - i] = ppmember[m_iCount - i - 1]; 
	} 
	ppmember[0] = pNewElement; 
	m_iCount ++; 
 
	return(0); 
} 
 
int CPointerList::AddTail(void *pNewElement) 
{ 
	if(ppmember == NULL || m_iCount == m_iTotalCount) 
	{ 
		m_iTotalCount = m_iCount + m_iIncrement; 
		void **ppTemp = (void **)realloc(ppmember, m_iTotalCount * sizeof(void *)); 
		if(ppTemp == NULL) 
			return -1; 
		else 
			ppmember = ppTemp; 
	} 
 
	ppmember[m_iCount] = pNewElement; 
	m_iCount ++; 
 
	return(0); 
} 
 
void * CPointerList::RemoveHead() 
{ 
	if(m_iCount == 0) 
		return(NULL); 
 
	void *pHead = ppmember[0]; 
	 
	/*	 
	for(int i = 0; i < m_iCount; i ++) 
	{ 
		ppmember[i] = ppmember[i + 1]; 
	} 
	m_iCount --; 
	*/ 
	 
	//XYW modified at 2001/01/02 
	m_iCount --; 
	for(int i = 0; i < m_iCount; i ++) 
	{ 
		ppmember[i] = ppmember[i + 1]; 
	} 
	ppmember[m_iCount] = NULL; 
	//XYW modified end 
	 
	return(pHead); 
} 
 
void * CPointerList::RemoveTail() 
{ 
	if(m_iCount == 0) 
		return(NULL); 
 
	m_iCount --; 
	return(ppmember[m_iCount]); 
} 
 
BOOL CPointerList::IsEmpty() 
{ 
	if(m_iCount == 0) 
		return(TRUE); 
	else 
		return(FALSE); 
}