#pragma once
#include <vector>
using namespace std;
/////////////////////////////////////////////백터
#pragma once
typedef unsigned long DWORD;
template<class T>
class CVecMgr
{
public:
CVecMgr(){Init();};
virtual ~CVecMgr(){
AllDelete();
};
protected:
typedef vector<T*> VECDATA;
VECDATA m_Data;
public:
void Init();//초기화 하는 함수이다.
void AllDelete();//모든데이터를 삭제한다.
bool Delete(int index);//삭제에 성공하면 true 아니면 false
void DeleteContain(int index);//데이터는 삭제 하지 않고 컨테이너 만 삭제
void DeleteData(int index);//데이터를 삭제하고 컨테이너는 남긴다.
T* SwapData(int index,T *pData);//데이터를 바꾼후에 예전의 데이터를 리턴시켜준다.
T* GetData(int index){if(!m_Data.size())return NULL; return m_Data[index];}//값을 받아오는 함수
T* InsertData(T* pData);//데이터를 넣는다.
T* InsertData(DWORD index,T* pData);//데이터를 사이에 끼워 넣는다.
T* operator [](size_t index){return m_Data[index];}
__inline size_t GetSize(){return m_Data.size();}//데이터의 크기를 받아온다.
};
template<class T>
void CVecMgr<T>::Init()
{
AllDelete();
}
template<class T>
bool CVecMgr<T>::Delete(int index)
{
if(m_Data.size() >(size_t)index)
{
delete m_Data[index];
m_Data.erase(m_Data.begin() + index);
return true;
}
return false;
}
template<class T>
void CVecMgr<T>::AllDelete()
{
for(int i = 0;i <(int)m_Data.size();i++)
{
delete m_Data[i];
}
m_Data.clear();
}
template<class T>
T* CVecMgr<T>::InsertData(T* pData)
{
m_Data.push_back(pData);
return pData;
}
template<class T>
T* CVecMgr<T>::InsertData(DWORD index,T* pData)
{
size_t size = m_Data.size();
if(!size || size <= index)
{
m_Data.push_back(pData);
return pData;
}
m_Data.insert(m_Data.begin() + index,pData);
return pData;
}
template<class T>
void CVecMgr<T>::DeleteContain(int index)
{
if(m_Data.size() >(size_t)index)
{
m_Data.erase(m_Data.begin() + index);
}
}
template<class T>
void CVecMgr<T>::DeleteData(int index)
{
if(m_Data.size() >(size_t)index)
{
delete m_Data[index];
m_Data[index] = NULL;
}
}
template<class T>
T* CVecMgr<T>::SwapData(int index,T *pData)
{
T* pTemp = NULL;
if(m_Data.size() >(size_t)index)
{
pTemp = m_Data[index];
m_Data[index] = pData;
}
return pTemp;
}
댓글 없음:
댓글 쓰기