Bool testlist::Parent::insertAfterFreeParent(const Parent & child, const Parent & prev) { if(!prev.isExists() || !child.isExists()) return false; Parent nxt = prev.getNextParentFreeParent(); child.setNextParentFreeParent(nxt); prev.setNextParentFreeParent(child); setNumFreeParents(getNumFreeParents() - 1); child.setupFreeParentHandler(); return true; }
Bool testlist::Parent::removeFreeParent(const Parent & child) { if( !child.isExists() ) return false; Parent prev; Parent current; for(current = getFirstFreeParent(); current.isValid() && current != child; current = current.getNextParentFreeParent()) prev = current; if(!current.isValid()) { return false; //! data corrupted } current.removeFreeParentHandler(); if(prev.isValid()) prev.setNextParentFreeParent(current.getNextParentFreeParent()); else setFirstFreeParent(current.getNextParentFreeParent()); current.setNextParentFreeParent(Parent()); setNumFreeParents(getNumFreeParents() - 1); return true; }
testlist::Parent testlist::Parent::popFreeParent() { Parent result = getFirstFreeParent(); if(result.isValid()) { result.removeFreeParentHandler(); setFirstFreeParent(result.getNextParentFreeParent()); result.setNextParentFreeParent(Parent()); setNumFreeParents(getNumFreeParents() - 1); } return result; }