|
|
|
|
|
#ifndef OBJECTMANAGER_H
|
|
|
|
|
|
#define OBJECTMANAGER_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
using std::vector;
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
template <class T> class CObjectManager
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CObjectManager(void){}
|
|
|
|
|
|
~CObjectManager(void){}
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
size_t GetCount();
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϊindex<65>Ķ<EFBFBD><C4B6><EFBFBD> */
|
|
|
|
|
|
T* GetObject(size_t index);
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD> */
|
|
|
|
|
|
void Add(T* object);
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20><>ָ<EFBFBD><D6B8>λ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
void Insert(size_t index, T* object);
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
void Delete(size_t index );
|
|
|
|
|
|
void Delete(T* object);
|
|
|
|
|
|
void DeleteAll();
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
void Remove(size_t index);
|
|
|
|
|
|
void Remove(T* object);
|
|
|
|
|
|
void RemoveAll();
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
vector<T *> m_objectArray; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> size_t CObjectManager<T>::GetCount()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_objectArray.size();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> T * CObjectManager<T>::GetObject(size_t index)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(index >= 0 && index < m_objectArray.size());
|
|
|
|
|
|
return m_objectArray[index];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::Add(T* object)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(NULL != object);
|
|
|
|
|
|
m_objectArray.push_back(object);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::Insert(size_t index, T* object)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(index >= 0 && index <= m_objectArray.size() && NULL != object);
|
|
|
|
|
|
|
|
|
|
|
|
vector<T*>::iterator pos = m_objectArray.begin() + index;
|
|
|
|
|
|
m_objectArray.insert(pos, object);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::Delete(size_t index)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(index >= 0 && index < m_objectArray.size());
|
|
|
|
|
|
vector<T *>::iterator pos = m_objectArray.begin() + index;
|
|
|
|
|
|
delete (*pos);
|
|
|
|
|
|
m_objectArray.erase(pos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::Delete(T* object)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(NULL != object);
|
|
|
|
|
|
vector<T *>::iterator pos = std::find(m_objectArray.begin(), m_objectArray.end(), object);
|
|
|
|
|
|
if (m_objectArray.end() != pos)
|
|
|
|
|
|
delete (*pos);
|
|
|
|
|
|
m_objectArray.erase(pos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::DeleteAll()
|
|
|
|
|
|
{
|
|
|
|
|
|
for (size_t i = 0; i < m_objectArray.size(); ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_objectArray[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
m_objectArray.clear();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::Remove(size_t index)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(index >= 0 && index < m_objectArray.size());
|
|
|
|
|
|
vector<T *>::iterator pos = m_objectArray.begin() + index ;
|
|
|
|
|
|
m_objectArray.erase(pos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::Remove(T* object)
|
|
|
|
|
|
{
|
|
|
|
|
|
assert(NULL != object);
|
|
|
|
|
|
vector<T *>::iterator pos = std::find(m_objectArray.begin(), m_objectArray.end(), object);
|
|
|
|
|
|
if (m_objectArray.end() != pos)
|
|
|
|
|
|
m_objectArray.erase(pos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <class T> void CObjectManager<T>::RemoveAll()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_objectArray.clear();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|