/** * returns an iterator of read-only nodes */ public ClosableIterator<DataTreeNode> getNodeIterator() { return !hasNodes() ? new Iter(null) : new Iter(tree.fetchNodeRange(nodedb)); }
/** * returns an iterator of read-only nodes */ public ClosableIterator<DataTreeNode> getNodeIterator(String from, String to) { if (!hasNodes()) { return new Iter(null); } return new Iter(tree.fetchNodeRange(nodedb, from, to)); }
@Override public void foregroundNodeDeletion(BooleanSupplier terminationCondition) { IPageDB.Range<DBKey, NonConcurrentTreeNode> range = fetchNodeRange(treeTrashNode.nodeDB()); Map.Entry<DBKey, NonConcurrentTreeNode> entry; MutableLong totalCount = new MutableLong(); MutableLong nodeCount = new MutableLong(); try { while (range.hasNext() && !terminationCondition.getAsBoolean()) { entry = range.next(); if (entry != null) { NonConcurrentTreeNode node = entry.getValue(); NonConcurrentTreeNode prev = source.remove(entry.getKey()); if (prev != null) { deleteSubTree(node, totalCount, nodeCount, terminationCondition); nodeCount.increment(); treeTrashNode.incrementCounter(); } } } } finally { range.close(); } }
BooleanSupplier terminationCondition) { long nodeDB = rootNode.nodeDB(); IPageDB.Range<DBKey, NonConcurrentTreeNode> range = fetchNodeRange(nodeDB); DBKey endRange; boolean reschedule;