NodeIteratorImpl::~NodeIteratorImpl() { if (referenceNode()) referenceNode()->deref(); if (document()) { document()->detachNodeIterator(this); document()->deref(); } }
NodeImpl *NodeIteratorImpl::previousNode(int &exceptioncode) { NodeImpl *node = referenceNode() ? referenceNode() : root(); if (pointerBeforeReferenceNode() || acceptNode(node) != NodeFilter::FILTER_ACCEPT) node = findPreviousNode(node); if (node) setReferenceNode(node); setPointerBeforeReferenceNode(); return node; }
NodeImpl *NodeIteratorImpl::nextNode(int &exceptioncode) { if (detached()) { exceptioncode = DOMException::INVALID_STATE_ERR; return 0; } NodeImpl *node = referenceNode() ? referenceNode() : root(); if (!pointerBeforeReferenceNode() || acceptNode(node) != NodeFilter::FILTER_ACCEPT) node = findNextNode(node); if (node) setReferenceNode(node); setPointerBeforeReferenceNode(false); return node; }
mitk::Image::Pointer mitk::SegTool2D::GetAffectedReferenceSlice(const InteractionPositionEvent *positionEvent) { DataNode *referenceNode(m_ToolManager->GetReferenceData(0)); if (!referenceNode) { return nullptr; } Image *referenceImage = dynamic_cast<Image *>(referenceNode->GetData()); if (!referenceImage) { return nullptr; } int displayedComponent = 0; if (referenceNode->GetIntProperty("Image.Displayed Component", displayedComponent)) { // found the displayed component return GetAffectedImageSliceAs2DImage(positionEvent, referenceImage, displayedComponent); } else { return GetAffectedImageSliceAs2DImage(positionEvent, referenceImage); } }
mitk::Image::Pointer mitk::SegTool2D::GetAffectedReferenceSlice(const InteractionPositionEvent* positionEvent) { DataNode* referenceNode( m_ToolManager->GetReferenceData(0) ); if ( !referenceNode ) return NULL; Image* referenceImage = dynamic_cast<Image*>(referenceNode->GetData()); if ( !referenceImage ) return NULL; return GetAffectedImageSliceAs2DImage( positionEvent, referenceImage ); }
bool NodeStoreServers::updateLastHeartbeatT(uint16_t id) { Node* node = referenceNode(id); if(!node) return false; node->updateLastHeartbeatT(); releaseNode(&node); return true; }
/** * This is a helper to have only one call for the typical targetMapper->getNodeID() and following * referenceNode() calls. * * Note: remember to call releaseNode(). * * @param targetMapper where to resolve the given targetID * @param outErr will be set to FhgfsOpsErr_UNKNOWNNODE, _UNKNOWNTARGET, _SUCCESS (may be NULL) * @return NULL if targetID is not mapped or if the mapped node does not exist in the store. */ Node* NodeStoreServers::referenceNodeByTargetID(uint16_t targetID, TargetMapper* targetMapper, FhgfsOpsErr* outErr) { uint16_t nodeID = targetMapper->getNodeID(targetID); if(unlikely(!nodeID) ) { // no such target mapping exists SAFE_ASSIGN(outErr, FhgfsOpsErr_UNKNOWNTARGET); return NULL; } Node* node = referenceNode(nodeID); if(unlikely(!node) ) { // no node with this id exists SAFE_ASSIGN(outErr, FhgfsOpsErr_UNKNOWNNODE); return NULL; } SAFE_ASSIGN(outErr, FhgfsOpsErr_SUCCESS); return node; }
void NodeIteratorImpl::notifyBeforeNodeRemoval(NodeImpl *willRemove) { // Iterator is not affected if the removed node is the reference node and is the root. // or if removed node is not the reference node, or the ancestor of the reference node. if (!willRemove || willRemove == root()) return; bool willRemoveReferenceNode = willRemove == referenceNode(); bool willRemoveReferenceNodeAncestor = referenceNode() && referenceNode()->isAncestor(willRemove); if (!willRemoveReferenceNode && !willRemoveReferenceNodeAncestor) return; if (pointerBeforeReferenceNode()) { NodeImpl *node = findNextNode(willRemove); if (node) { // Move out from under the node being removed if the reference node is // a descendant of the node being removed. if (willRemoveReferenceNodeAncestor) { while (node && node->isAncestor(willRemove)) node = findNextNode(node); } if (node) setReferenceNode(node); } else { node = findPreviousNode(willRemove); if (node) { // Move out from under the node being removed if the reference node is // a descendant of the node being removed. if (willRemoveReferenceNodeAncestor) { while (node && node->isAncestor(willRemove)) node = findPreviousNode(node); } if (node) { // Removing last node. // Need to move the pointer after the node preceding the // new reference node. setReferenceNode(node); setPointerBeforeReferenceNode(false); } } } } else { NodeImpl *node = findPreviousNode(willRemove); if (node) { // Move out from under the node being removed if the reference node is // a descendant of the node being removed. if (willRemoveReferenceNodeAncestor) { while (node && node->isAncestor(willRemove)) node = findPreviousNode(node); } if (node) setReferenceNode(node); } else { node = findNextNode(willRemove); // Move out from under the node being removed if the reference node is // a descendant of the node being removed. if (willRemoveReferenceNodeAncestor) { while (node && node->isAncestor(willRemove)) node = findPreviousNode(node); } if (node) setReferenceNode(node); } } }