2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
|
|
|
|
// TnzCore includes
|
|
|
|
#include "tstream.h"
|
|
|
|
|
|
|
|
// tcg includes
|
|
|
|
#include "tcg/tcg_function_types.h"
|
|
|
|
|
|
|
|
// STD includes
|
|
|
|
#include <typeinfo>
|
|
|
|
|
|
|
|
#include "tpersistset.h"
|
|
|
|
|
|
|
|
//**************************************************************************************
|
|
|
|
// TPersistSet implementation
|
|
|
|
//**************************************************************************************
|
|
|
|
|
|
|
|
PERSIST_IDENTIFIER(TPersistSet, "persistSet")
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
TPersistSet::~TPersistSet() {
|
2019-02-21 15:58:39 +13:00
|
|
|
std::for_each(m_objects.begin(), m_objects.end(), std::default_delete<TPersist>());
|
2016-03-19 06:57:51 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
|
2016-07-21 00:49:32 +12:00
|
|
|
void TPersistSet::insert(std::unique_ptr<TPersist> object) {
|
2016-06-15 18:43:10 +12:00
|
|
|
struct locals {
|
|
|
|
inline static bool sameType(TPersist *a, TPersist *b) {
|
|
|
|
return (typeid(*a) == typeid(*b));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// Remove any object with the same type id
|
|
|
|
std::vector<TPersist *>::iterator pt =
|
|
|
|
std::remove_if(m_objects.begin(), m_objects.end(),
|
|
|
|
tcg::bind1st(&locals::sameType, object.get()));
|
|
|
|
|
2019-02-21 15:58:39 +13:00
|
|
|
std::for_each(pt, m_objects.end(), std::default_delete<TPersist>());
|
2016-06-15 18:43:10 +12:00
|
|
|
m_objects.erase(pt, m_objects.end());
|
|
|
|
|
|
|
|
// Push back the supplied object
|
|
|
|
m_objects.push_back(object.release());
|
2016-03-19 06:57:51 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
void TPersistSet::saveData(TOStream &os) {
|
|
|
|
std::vector<TPersist *>::iterator pt, pEnd = m_objects.end();
|
|
|
|
for (pt = m_objects.begin(); pt != pEnd; ++pt) os << *pt;
|
2016-03-19 06:57:51 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
void TPersistSet::loadData(TIStream &is) {
|
|
|
|
while (!is.eos()) {
|
|
|
|
TPersist *object = 0;
|
|
|
|
is >> object;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
m_objects.push_back(object);
|
|
|
|
}
|
2016-03-19 06:57:51 +13:00
|
|
|
}
|