/** * DOCUMENT ME! * * @param node DOCUMENT ME! * @return DOCUMENT ME! */ public final boolean nodeRemove(final int node) { final IntEnumerator edges = edgesAdjacent(node, true, true, true); if (edges == null) { return false; } m_stack.empty(); while (edges.numRemaining() > 0) m_stack.push(edges.nextInt()); while (m_stack.size() > 0) edgeRemove(m_stack.pop()); final Node n = m_nodes.getNodeAtIndex(node); if (n.prevNode != null) { n.prevNode.nextNode = n.nextNode; } else { m_firstNode = n.nextNode; } if (n.nextNode != null) { n.nextNode.prevNode = n.prevNode; } m_nodes.setNodeAtIndex(null, node); n.prevNode = null; n.firstOutEdge = null; n.firstInEdge = null; m_nodeDepot.recycleNode(n); m_nodeCount--; return true; }
/** * DOCUMENT ME! * * @return DOCUMENT ME! */ public final int nodeCreate() { final Node n = m_nodeDepot.getNode(); final int returnThis; if (n.nodeId < 0) { returnThis = (n.nodeId = ++m_maxNode); } else { returnThis = n.nodeId; } m_nodes.setNodeAtIndex(n, returnThis); m_nodeCount++; n.nextNode = m_firstNode; if (m_firstNode != null) { m_firstNode.prevNode = n; } m_firstNode = n; n.outDegree = 0; n.inDegree = 0; n.undDegree = 0; n.selfEdges = 0; return returnThis; }