blob: 0f4765d79c4cceabf678ea174eabf760b4f26d2f [file] [log] [blame]
/*
* Copyright 2012-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.graph;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
public class TopologicalSort {
private TopologicalSort() {}
public static <T> ImmutableList<T> sort(
ImmutableDirectedAcyclicGraph<T> graph,
final Predicate<T> inclusionPredicate) {
AbstractBottomUpTraversal<T, ImmutableList<T>> traversal =
new AbstractBottomUpTraversal<T, ImmutableList<T>>(graph) {
final ImmutableList.Builder<T> builder = ImmutableList.builder();
@Override
public void visit(T node) {
if (inclusionPredicate.apply(node)) {
builder.add(node);
}
}
@Override
public ImmutableList<T> getResult() {
return builder.build();
}
};
traversal.traverse();
return traversal.getResult();
}
}