@@ -0,0 +1,2020 @@
+/*%0A * Java Genetic Algorithm Library (@__identifier__@).%0A * Copyright (c) @__year__@ Franz Wilhelmst%C3%B6tter%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A *      http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A *%0A * Author:%0A *    Franz Wilhelmst%C3%B6tter (franz.wilhelmstoetter@gmail.com)%0A */%0Apackage io.jenetics.ext.util;%0A%0Aimport static io.jenetics.ext.util.TreeMatcher.children;%0A%0Aimport java.util.ArrayList;%0Aimport java.util.Iterator;%0Aimport java.util.List;%0Aimport java.util.Map;%0Aimport java.util.Objects;%0A%0Aimport io.jenetics.ext.util.TreeRewriter.Matcher;%0A%0A/**%0A * Check if a given tree matches specific values.%0A *%0A * @author %3Ca href=%22mailto:franz.wilhelmstoetter@gmail.com%22%3EFranz Wilhelmst%C3%B6tter%3C/a%3E%0A * @version !__version__!%0A * @since !__version__!%0A */%0Afinal class TreeValueMatcher%3CV%3E implements Matcher%3CV%3E %7B%0A%0A%09final Map%3CChildPath, Object%3E _values;%0A%0A%09private TreeValueMatcher(final Map%3CChildPath, Object%3E values) %7B%0A%09%09_values = values;%0A%09%7D%0A%0A%09@Override%0A%09public boolean matches(final Tree%3CV, ?%3E tree) %7B%0A%09%09final List%3CChildPath%3E paths = new ArrayList%3C%3E(_values.keySet());%0A%09%09final List%3CTree%3C?, ?%3E%3E nodes = children(tree, paths);%0A%0A%09%09boolean matches = nodes.size() == paths.size();%0A%09%09final Iterator%3CTree%3C?, ?%3E%3E tit = nodes.iterator();%0A%09%09final Iterator%3CChildPath%3E pit = paths.iterator();%0A%0A%09%09while (matches && tit.hasNext()) %7B%0A%09%09%09final Tree%3C?, ?%3E tn = tit.next();%0A%09%09%09final ChildPath path = pit.next();%0A%0A%09%09%09matches = Objects.equals(_values.get(path), tn.getValue());%0A%09%09%7D%0A%0A%09%09return matches;%0A%09%7D%0A%0A%09static %3CV%3E TreeValueMatcher%3CV%3E of(final Tree%3CV, ?%3E pattern) %7B%0A%09%09return null;%0A%09%7D%0A%0A%7D%0A

Implement 'TreeValueMatcher'.