/*
MultiNode sample code
Henry Smith (henry@enigmasoftware.ca)
*/
#include "MultiNodeImpl.h"
#include "NodeImpl.h"
FamilyID MultiNodeImpl::sCurrentFamily = 0;
MultiNodeImpl::MultiNodeImpl ()
{
}
MultiNodeImpl::~MultiNodeImpl ()
{
}
const MultiNodeRef&
MultiNodeImpl::Parent () const
{
return GetImpl()->mParent;
}
const MultiNodeRef&
MultiNodeImpl::Child () const
{
return GetImpl()->mChild;
}
const MultiNodeRef&
MultiNodeImpl::Sibling () const
{
return GetImpl()->mSibling;
}
MultiNodeRef&
MultiNodeImpl::Parent ()
{
return GetImpl()->mParent;
}
MultiNodeRef&
MultiNodeImpl::Child ()
{
return GetImpl()->mChild;
}
MultiNodeRef&
MultiNodeImpl::Sibling ()
{
return GetImpl()->mSibling;
}
NodeImpl*
MultiNodeImpl::GetImpl () const
{
NodeImplMap::iterator result = mImpls.find (sCurrentFamily);
// If there is no impl for the current family, create one
if (result == mImpls.end()) {
result = mImpls.insert( std::make_pair( sCurrentFamily, NodeImpl() ) ).first;
}
return &(result->second);
}