/* * Copyright 2009 Google 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.google.gwt.dev.jjs.impl.gflow; import com.google.gwt.dev.util.Preconditions; import java.util.List; /** * Utilities for working with assumption values. */ public class AssumptionUtil { /** * Check assumptions for equality. */ public static <A extends Assumption<A>> boolean equals(A a1, A a2) { if (a1 == null || a2 == null) { return a1 == a2; } return (a1 == a2) || (a1.equals(a2)); } /** * Join assumptions. */ public static <A extends Assumption<A>> A join(A a1, A a2) { if (a1 == null) { return a2; } if (a2 == null) { return a1; } return a1 != a2 ? a1.join(a2) : a1; } /** * Join assumptions from the list. */ public static <A extends Assumption<A>> A join(List<A> assumptions) { A result = null; for (int i = 0; i < assumptions.size(); ++i) { result = join(result, assumptions.get(i)); } return result; } public static <E, A extends Assumption<A>> A join(List<E> edges, AssumptionMap<E, A> assumptionMap) { A result = null; for (int i = 0; i < edges.size(); ++i) { result = join(result, assumptionMap.getAssumption(edges.get(i))); } return result; } public static <E, A extends Assumption<A>> void setAssumptions(List<E> edges, List<A> assumptions, AssumptionMap<E, A> assumptionMap) { Preconditions.checkArgument(assumptions.size() == edges.size()); for (int i = 0; i < edges.size(); ++i) { assumptionMap.setAssumption(edges.get(i), assumptions.get(i)); } } public static <E, A extends Assumption<A>> void setAssumptions(List<E> edges, A assumption, AssumptionMap<E, A> assumptionMap) { for (int i = 0; i < edges.size(); ++i) { assumptionMap.setAssumption(edges.get(i), assumption); } } public static <E, A extends Assumption<A>> String toString( List<E> inEdges, List<E> outEdges, AssumptionMap<E, A> assumptionMap) { StringBuilder result = new StringBuilder(); for (E e : inEdges) { if (result.length() != 0) { result.append("; "); } result.append(e); result.append("="); result.append(assumptionMap.getAssumption(e)); } for (E e : outEdges) { if (result.length() != 0) { result.append("; "); } result.append(e); result.append("="); result.append(assumptionMap.getAssumption(e)); } return result.toString(); } }