@NotNull @Override public List<GraphCommit<CommitId>> getAllCommits() { List<GraphCommit<CommitId>> result = ContainerUtil.newArrayList(); for (int index = 0; index < myPermanentLinearGraph.nodesCount(); index++) { CommitId commitId = myPermanentCommitsInfo.getCommitId(index); List<Integer> downNodes = LinearGraphUtils.getDownNodesIncludeNotLoad(myPermanentLinearGraph, index); List<CommitId> parentsCommitIds = myPermanentCommitsInfo.convertToCommitIdList(downNodes); GraphCommit<CommitId> graphCommit = new GraphCommitImpl<CommitId>( commitId, parentsCommitIds, myPermanentCommitsInfo.getTimestamp(index)); result.add(graphCommit); } return result; }
@NotNull public static UnsignedBitSet getReachableNodes( @NotNull PermanentLinearGraphImpl permanentGraph, @Nullable Set<Integer> headNodeIndexes) { if (headNodeIndexes == null) { UnsignedBitSet nodesVisibility = new UnsignedBitSet(); nodesVisibility.set(0, permanentGraph.nodesCount() - 1, true); return nodesVisibility; } assert !headNodeIndexes.isEmpty(); final UnsignedBitSet result = new UnsignedBitSet(); ReachableNodes getter = new ReachableNodes(LinearGraphUtils.asLiteLinearGraph(permanentGraph)); getter.walk( headNodeIndexes, new Consumer<Integer>() { @Override public void consume(Integer node) { result.set(node, true); } }); return result; }