1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include "AbstractPropertyContainerModel.h"
void
AbstractPropertyContainerModel::DeepCopy(
const AbstractPropertyContainerModel *source)
{
// This method will only work if both models have the same fields in the
// same order. The assertions below check that
assert(m_Properties.size() == source->m_Properties.size());
PropertyMapCIter itSrc = source->m_Properties.begin();
PropertyMapIter it = m_Properties.begin();
while(itSrc != source->m_Properties.end())
{
assert(it->first == itSrc->first);
ConcretePropertyHolderBase *ptr_src = itSrc->second;
ConcretePropertyHolderBase *ptr_trg = it->second;
ptr_trg->DeepCopy(ptr_src);
++it; ++itSrc;
}
}
bool AbstractPropertyContainerModel::operator == (
const AbstractPropertyContainerModel &source)
{
// This method will only work if both models have the same fields in the
// same order. The assertions below check that
assert(m_Properties.size() == source.m_Properties.size());
PropertyMapCIter itSrc = source.m_Properties.begin();
PropertyMapIter it = m_Properties.begin();
while(itSrc != source.m_Properties.end())
{
assert(it->first == itSrc->first);
ConcretePropertyHolderBase *ptr_src = itSrc->second;
ConcretePropertyHolderBase *ptr_trg = it->second;
if(!ptr_trg->Equals(ptr_src))
return false;
++it; ++itSrc;
}
return true;
}
bool AbstractPropertyContainerModel::operator != (
const AbstractPropertyContainerModel &source)
{
return !(*this == source);
}
unsigned long AbstractPropertyContainerModel::GetMTime() const
{
return this->GetTimeStamp().GetMTime();
}
void AbstractPropertyContainerModel::WriteToRegistry(Registry &folder) const
{
for(PropertyMapCIter it = m_Properties.begin(); it != m_Properties.end(); it++)
{
it->second->Serialize(folder);
}
}
void AbstractPropertyContainerModel::ReadFromRegistry(Registry &folder)
{
for(PropertyMapIter it = m_Properties.begin(); it != m_Properties.end(); it++)
{
it->second->Deserialize(folder);
}
// Flag this object as modified
this->Modified();
}
const itk::TimeStamp &AbstractPropertyContainerModel::GetTimeStamp() const
{
const itk::TimeStamp *ts = &AbstractModel::GetTimeStamp();
for(PropertyMapCIter it = m_Properties.begin(); it != m_Properties.end(); it++)
{
const itk::TimeStamp &tschild = it->second->GetPropertyTimeStamp();
if(tschild > (*ts))
ts = &tschild;
}
return *ts;
}
|