File: AbstractPropertyContainerModel.cxx

package info (click to toggle)
itksnap 3.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 10,196 kB
  • ctags: 9,196
  • sloc: cpp: 62,895; sh: 175; makefile: 13
file content (86 lines) | stat: -rw-r--r-- 2,466 bytes parent folder | download | duplicates (2)
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;
}