/** * @return the bucket tree or {@link RevTree#EMPTY} if this tree does not have a bucket for the * given bucket index */ private RevTree getBucketTree(Integer bucketIndex) { final Bucket bucket = bucketTreesByBucket.get(bucketIndex); if (bucket == null) { return RevTree.EMPTY; } else { return loadTree(bucket.getObjectId()); } }
private long sizeOfTree(ObjectId treeId) { if (treeId.isNull()) { return 0L; } RevTree tree = loadTree(treeId); return tree.size(); }
private Optional<Node> getInternal(final String key, final boolean deep) { Node found = featureChanges.get(key); if (found == null) { found = treeChanges.get(key); } if (found != null) { return Optional.of(found); } if (!deep) { return Optional.absent(); } if (deletes.contains(key)) { return Optional.absent(); } final Integer bucketIndex = computeBucket(key); final Bucket bucket = bucketTreesByBucket.get(bucketIndex); if (bucket == null) { return Optional.absent(); } RevTree subtree = loadTree(bucket.getObjectId()); DepthSearch depthSearch = new DepthSearch(obStore); Optional<Node> node = depthSearch.getDirectChild(subtree, key, depth + 1); if (node.isPresent()) { return Optional.of(node.get()); } else { return Optional.absent(); } }
private long sizeOfTree(ObjectId treeId) { if (treeId.isNull()) { return 0L; } RevTree tree = loadTree(treeId); return tree.size(); }
/** * @param tree * @return */ private RevTree moveBucketsToChildren(RevTree tree) { checkState(!tree.buckets().isEmpty()); checkState(this.bucketTreesByBucket.isEmpty()); for (Bucket bucket : tree.buckets().values()) { ObjectId id = bucket.getObjectId(); RevTree bucketTree = this.loadTree(id); if (!bucketTree.buckets().isEmpty()) { moveBucketsToChildren(bucketTree); } else { Iterator<Node> children = RevObjects.children(bucketTree, CanonicalNodeOrder.INSTANCE); while (children.hasNext()) { Node next = children.next(); putInternal(next); } } } return normalizeToChildren(); }
private Optional<Node> getInternal(final String key, final boolean deep) { Node found = featureChanges.get(key); if (found == null) { found = treeChanges.get(key); } if (found != null) { return Optional.of(found); } if (!deep) { return Optional.absent(); } if (deletes.contains(key)) { return Optional.absent(); } final Integer bucketIndex = computeBucket(key); final Bucket bucket = bucketTreesByBucket.get(bucketIndex); if (bucket == null) { return Optional.absent(); } RevTree subtree = loadTree(bucket.getObjectId()); DepthSearch depthSearch = new DepthSearch(obStore); Optional<Node> node = depthSearch.getDirectChild(subtree, key, depth + 1); if (node.isPresent()) { return Optional.of(node.get()); } else { return Optional.absent(); } }
/** * @param tree * @return */ private RevTree moveBucketsToChildren(RevTree tree) { checkState(!tree.buckets().isEmpty()); checkState(this.bucketTreesByBucket.isEmpty()); for (Bucket bucket : tree.buckets().values()) { ObjectId id = bucket.getObjectId(); RevTree bucketTree = this.loadTree(id); if (!bucketTree.buckets().isEmpty()) { moveBucketsToChildren(bucketTree); } else { Iterator<Node> children = RevObjects.children(bucketTree, CanonicalNodeOrder.INSTANCE); while (children.hasNext()) { Node next = children.next(); putInternal(next); } } } return normalizeToChildren(); }