| |
| |
|
|
| #include "tstream.h" |
| |
| |
| #include "tcg/tcg_deleter_types.h" |
| #include "tcg/tcg_function_types.h" |
| |
| |
| #include <typeinfo> |
| |
| #include "tpersistset.h" |
| |
| |
| |
| |
| |
| PERSIST_IDENTIFIER(TPersistSet, "persistSet") |
| |
| |
| |
| TPersistSet::~TPersistSet() { |
| std::for_each(m_objects.begin(), m_objects.end(), tcg::deleter<TPersist>()); |
| } |
| |
| |
| |
| void TPersistSet::insert(std::unique_ptr<TPersist> object) { |
| struct locals { |
| inline static bool sameType(TPersist *a, TPersist *b) { |
| return (typeid(*a) == typeid(*b)); |
| } |
| }; |
| |
| |
| std::vector<TPersist *>::iterator pt = |
| std::remove_if(m_objects.begin(), m_objects.end(), |
| tcg::bind1st(&locals::sameType, object.get())); |
| |
| std::for_each(pt, m_objects.end(), tcg::deleter<TPersist>()); |
| m_objects.erase(pt, m_objects.end()); |
| |
| |
| m_objects.push_back(object.release()); |
| } |
| |
| |
| |
| void TPersistSet::saveData(TOStream &os) { |
| std::vector<TPersist *>::iterator pt, pEnd = m_objects.end(); |
| for (pt = m_objects.begin(); pt != pEnd; ++pt) os << *pt; |
| } |
| |
| |
| |
| void TPersistSet::loadData(TIStream &is) { |
| while (!is.eos()) { |
| TPersist *object = 0; |
| is >> object; |
| |
| m_objects.push_back(object); |
| } |
| } |
| |