#pragma once
|
|
|
#include "akSTLLinker.h"
|
|
template <typename T>
|
class CakQueueCircle
|
{
|
public:
|
CakQueueCircle();
|
~CakQueueCircle();
|
|
|
void clear(); //¸Þ¸ð¸® »èÁ¦´Â ¾ÈµÊ
|
void setMemSize(unsigned int memsize); //memsize°¡ 0À϶§ ¸Þ¸ð¸® »èÁ¦
|
int getMemSize(){return m_nMemSize;}; //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 <typename T>
|
CakQueueCircle<T>::CakQueueCircle(void)
|
{
|
m_pPoints = NULL;
|
m_nMemSize = 0;
|
m_nPushCount = 0;
|
|
clear();
|
setMemSize(100);
|
};
|
|
|
template <typename T>
|
CakQueueCircle<T>::~CakQueueCircle(void)
|
{
|
setMemSize(0);
|
};
|
|
template <typename T>
|
void CakQueueCircle<T>::clear() //¸Þ¸ð¸® »èÁ¦´Â ¾ÈµÊ
|
{
|
m_nMemSize; //È®º¸ ¸Þ¸ð¸® »çÀÌÁî
|
m_nPointIndex = -1; //ÇöÀç À妽º
|
m_nPointNum = 0; //ÇöÀç ÀÔ·ÂµÈ Point °¹¼ö
|
//m_pPoints; //µ¥ÀÌÅÍ º¯¼ö
|
m_nPushCount = 0;
|
}
|
|
template <typename T>
|
void CakQueueCircle<T>::setMemSize(unsigned int memsize) //memsize°¡ 0À϶§ ¸Þ¸ð¸® »èÁ¦
|
{
|
if(m_nMemSize == memsize) return; //¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀ½ ÅÂÇö[2016/8/16]
|
//clear
|
if(m_pPoints != NULL)
|
{
|
clear();
|
m_nMemSize = 0;
|
delete [] m_pPoints;
|
m_pPoints = NULL;
|
}
|
|
if(memsize > 0)
|
{
|
m_nMemSize = memsize;
|
|
//T* m_pPointTemp = new T [m_nMemSize];
|
m_pPoints = new T [m_nMemSize];
|
}
|
|
}
|
|
template <typename T>
|
void CakQueueCircle<T>::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 <typename T>
|
void CakQueueCircle<T>::setData( unsigned int nindex , T point )
|
{
|
int pointindex = m_nPointIndex-(m_nPointNum-1)+nindex; //Á© ÷¿¡¿¡ ¿Â°Ô index 0
|
//pointindex = m_nPointIndex-nindex;//Á© ³ªÁß¿¡ µé¾î¿Â°Ô À妽º 0
|
|
if(pointindex<0) pointindex = m_nPointNum + pointindex;
|
|
m_pPoints[pointindex] = point;
|
}
|
|
template <typename T>
|
T& CakQueueCircle<T>::operator[]( unsigned int nindex )
|
{
|
int pointindex = m_nPointIndex-(m_nPointNum-1)+nindex; //Á© ÷¿¡¿¡ ¿Â°Ô index 0
|
//pointindex = m_nPointIndex-nindex;//Á© ³ªÁß¿¡ µé¾î¿Â°Ô À妽º 0
|
|
if(pointindex<0) pointindex = m_nPointNum + pointindex;
|
|
return m_pPoints[pointindex];
|
}
|
|
template <typename T>
|
CakQueueCircle<T>& CakQueueCircle<T>::operator=( CakQueueCircle<T>& 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;
|
}
|