package qls.semantics; import ql.ast.type.Type; import qls.ast.rule.Rules; import java.util.HashMap; import java.util.Map; /** * Created by bore on 09/03/15. */ public class Style { private final Map<Type, Rules> typeToRules; public Style() { this.typeToRules = new HashMap<>(); } public void addRules(Type t, Rules rs) { this.typeToRules.put(t, rs); } public Rules getRulesForType(Type t) { if (this.typeToRules.containsKey(t)) { return this.typeToRules.get(t); } return Rules.empty; } public static Style mergeStyles(Style highPr, Style lowPr) { Style result = new Style(); result.typeToRules.putAll(highPr.typeToRules); for (Type t : lowPr.typeToRules.keySet()) { Rules rs = result.getRulesForStyle(t, lowPr); result.addRules(t, rs); } return result; } private Rules getRulesForStyle(Type t, Style s) { Rules lowPr = s.typeToRules.get(t); if (this.typeToRules.containsKey(t)) { Rules highPr = this.typeToRules.get(t); return Rules.mergeRules(highPr, lowPr); } return Rules.mergeRules(lowPr, Rules.empty); } }