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
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkOneWayEquivalencyTable.cxx,v $
Language: C++
Date: $Date: 2007-12-23 17:59:29 $
Version: $Revision: 1.7 $
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "itkOneWayEquivalencyTable.h"
namespace itk
{
bool OneWayEquivalencyTable::Add(unsigned long a, unsigned long b)
{
//
// Unlike EquivalencyTable, the order of the equivalence is important.
//
std::pair<Iterator, bool> result;
if (a == b) return false;
result = m_HashMap.insert( ValueType(a, b) );
return result.second;
}
//void OneWayEquivalencyTable::PrintHashTable()
//{
// ConstIterator it = this->Begin();
// while (it != this->End() )
// {
// std::cout << (*it).first << " = " << (*it).second << std::endl;
// it++;
// }
//}
void OneWayEquivalencyTable::Flatten()
{
Iterator it = this->Begin();
while ( it != this->End() )
{
(*it).second = this->RecursiveLookup((*it).first);
it++;
}
}
unsigned long OneWayEquivalencyTable::RecursiveLookup(const unsigned long a) const
{
unsigned long ans = a;
unsigned long last_ans=a;
ConstIterator it;
ConstIterator hashEnd = m_HashMap.end();
while ( (it = m_HashMap.find(ans)) != hashEnd )
{
ans = (*it).second;
if (ans == a ) return last_ans; // about to cycle again.
last_ans = ans;
}
return ans;
}
void
OneWayEquivalencyTable
::PrintSelf(std::ostream& os, Indent indent) const
{
Superclass::PrintSelf(os,indent);
}
}// end namespace itk
|