#pragma once #include "akSTLLinker.h" template class CakQueueCircle { public: CakQueueCircle(); ~CakQueueCircle(); void clear(); //¸Þ¸ð¸® »èÁ¦´Â ¾ÈµÊ void setMemSize(unsigned int memsize); //memsize°¡ 0À϶§ ¸Þ¸ð¸® »èÁ¦ void pushData(T point); void setData( unsigned int nindex , T point ); void getData(T* pPointBuffer, unsigned int nBufferLength); int size(){return m_nPointNum;}; T& operator [](unsigned int nindex); CakQueueCircle& operator= (CakQueueCircle& traj); //static unsigned int s_TrajectorySize; //°¡´ÉÇÏ¸é ¾Æ·¡ÀÇ ¸â¹ö º¯¼ö¿¡ Á÷Á¢ ¼öÁ¤Àº ÇÏÁö ¸»°Í!! public: int m_nMemSize; //È®º¸ ¸Þ¸ð¸® »çÀÌÁî int m_nPointIndex; //ÇöÀç À妽º int m_nPointNum; //ÇöÀç ÀÔ·ÂµÈ Point °¹¼ö T* m_pPoints; //µ¥ÀÌÅÍ º¯¼ö public: unsigned long m_nPushCount; }; template CakQueueCircle::CakQueueCircle(void) { m_pPoints = NULL; m_nMemSize = 0; m_nPushCount = 0; clear(); setMemSize(100); }; template CakQueueCircle::~CakQueueCircle(void) { setMemSize(0); }; template void CakQueueCircle::clear() //¸Þ¸ð¸® »èÁ¦´Â ¾ÈµÊ { m_nMemSize; //È®º¸ ¸Þ¸ð¸® »çÀÌÁî m_nPointIndex = -1; //ÇöÀç À妽º m_nPointNum = 0; //ÇöÀç ÀÔ·ÂµÈ Point °¹¼ö //m_pPoints; //µ¥ÀÌÅÍ º¯¼ö m_nPushCount = 0; } template void CakQueueCircle::setMemSize(unsigned int memsize) //memsize°¡ 0À϶§ ¸Þ¸ð¸® »èÁ¦ { //clear if(m_pPoints != NULL) { clear(); m_nMemSize = 0; delete [] m_pPoints; m_pPoints = NULL; } if(memsize > 0) { m_nMemSize = memsize; m_pPoints = new T [m_nMemSize]; } } template void CakQueueCircle::pushData(T point) { m_nPointIndex++; if(m_nPointIndex >= m_nMemSize) { m_nPointIndex = 0; } m_nPointNum++; if(m_nPointNum >= m_nMemSize) { m_nPointNum = m_nMemSize; } m_pPoints[m_nPointIndex] = point; m_nPushCount++; } template void CakQueueCircle::setData( unsigned int nindex , T point ) { int pointindex = m_nPointIndex-nindex; if(pointindex<0) pointindex = m_nPointNum + pointindex; m_pPoints[pointindex] = point; } template T& CakQueueCircle::operator[]( unsigned int nindex ) { int pointindex = m_nPointIndex-nindex; if(pointindex<0) pointindex = m_nPointNum + pointindex; return m_pPoints[pointindex]; } template CakQueueCircle& CakQueueCircle::operator=( CakQueueCircle& queuecircle ) { if(m_nMemSize != queuecircle.m_nMemSize) { if(m_pPoints) { delete [] m_pPoints; } m_pPoints = new T[queuecircle.m_nMemSize]; } m_nMemSize = queuecircle.m_nMemSize; m_nPointIndex = queuecircle.m_nPointIndex; m_nPointNum = queuecircle.m_nPointNum; memcpy(m_pPoints, queuecircle.m_pPoints, sizeof(T)*queuecircle.m_nMemSize); return *this; }