#ifndef _IMAGELST_RELATION_HPP_ #error relation.hpp must precede relation.tpp #endif template Relation::Relation(void) : mlpRContainer(0) { } template Relation::Relation(const Relation &someRelation) { } template Relation::~Relation() { if(mlpRContainer){delete mlpRContainer;mlpRContainer=0;} } template void Relation::insert(const T &someItem,const T &insertAfter) { } template void Relation::remove(const T &someItem) { } template WORD Relation::find(T &someItem) { if(!mlpRContainer)return FALSE; RContainer *lpParentNode(mlpRContainer); while(lpParentNode) { if(searchChildDescend(lpParentNode,someItem))return TRUE; lpParentNode=lpParentNode->sibling(); } return FALSE; } template Relation &Relation::operator=(const Relation &someRelation) { } template WORD Relation::operator==(const Relation &someRelation)const { } template RContainer *Relation::searchChildDescend(RContainer *lpRContainer,T &someItem) { RContainer *lpParentNode(lpRContainer); RContainer *lpSiblingNode(0); while(lpRContainer) { if(someItem==*(lpRContainer->item())){someItem=*lpRContainer->item();return lpRContainer;} lpRContainer=lpRContainer->child(); if(lpRContainer->sibling()) { lpSiblingNode=searchSiblingDescend(lpRContainer->sibling(),someItem); if(lpSiblingNode)return lpSiblingNode; } } return lpSiblingNode; } template RContainer *Relation::searchSiblingDescend(RContainer *lpRContainer,T &someItem) { RContainer *lpParentNode(lpRContainer); RContainer *lpChildNode(0); while(lpRContainer) { if(someItem==*(lpRContainer->item())){someItem=*(lpRContainer->item());return lpRContainer;} lpRContainer=lpRContainer->sibling(); if(lpRContainer->child()) { lpChildNode=searchChildDescend(lpRContainer->child(),someItem); if(lpChildNode)return lpChildNode; } } return lpChildNode; } // Container methods template RContainer::RContainer(void) : mlpSibling(0), mlpParent(0), mlpChild(0), mlpItem(0) { } template RContainer::~RContainer() { if(mlpItem){delete mlpItem;mlpItem=0;} } template RContainer *RContainer::sibling(void) { return mlpSibling; } template void RContainer::sibling(RContainer *lpSibling) { mlpSibling=lpSibling; } template RContainer *RContainer::parent(void) { return mlpParent; } template void RContainer::parent(RContainer *lpParent) { mlpParent=lpParent; } template RContainer *RContainer::child(void) { return mlpChild; } template void RContainer::child(RContainer *lpChild) { mlpChild=lpChild; } template T *RContainer::item(void) { return mlpItem; } template void RContainer::item(T *lpItem) { mlpItem=lpItem; }