SDC C-Project CF Review 프로그램
LYW
2021-07-08 9cbd9e554f9956b3b945b51602f1d4a3fa0353e1
ReviewHistory/include/akSTL/akQueueCircle.h
»õ ÆÄÀÏ
@@ -0,0 +1,151 @@
#pragma once
#include "akSTLLinker.h"
   template <typename T>
   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 <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일때 ë©”모리 ì‚­ì œ
   {
      //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 <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-nindex;
      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-nindex;
      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;
   }