From 8098bc30c0b85814194cb8e53d62ffe5ffe318ef Mon Sep 17 00:00:00 2001 From: bdemsky Date: Sat, 17 Apr 2004 00:30:28 +0000 Subject: [PATCH] Added code to compute maximum sizes of sets. So we can eliminate set removes when they aren't necessary. --- .../RepairCompiler/MCC/IR/ComputeMaxSize.java | 80 +++++++++++++++++++ Repair/RepairCompiler/MCC/IR/Expr.java | 2 +- .../RepairCompiler/MCC/IR/ExprPredicate.java | 4 +- .../RepairCompiler/MCC/IR/GraphAnalysis.java | 48 ++++++++--- .../MCC/IR/InclusionPredicate.java | 2 +- Repair/RepairCompiler/MCC/IR/OpExpr.java | 26 ++++-- Repair/RepairCompiler/MCC/IR/Predicate.java | 2 +- .../MCC/IR/RepairGenerator.java | 1 - Repair/RepairCompiler/MCC/IR/Termination.java | 12 ++- 9 files changed, 153 insertions(+), 24 deletions(-) create mode 100755 Repair/RepairCompiler/MCC/IR/ComputeMaxSize.java diff --git a/Repair/RepairCompiler/MCC/IR/ComputeMaxSize.java b/Repair/RepairCompiler/MCC/IR/ComputeMaxSize.java new file mode 100755 index 0000000..0dec8e0 --- /dev/null +++ b/Repair/RepairCompiler/MCC/IR/ComputeMaxSize.java @@ -0,0 +1,80 @@ +package MCC.IR; +import MCC.State; +import java.util.*; + +/** This class computes the maximum size of sets and relations */ + +public class ComputeMaxSize { + State state; + Hashtable sizemap; /* -1 means infinity */ + + + public ComputeMaxSize(State state) { + this.state=state; + sizemap=new Hashtable(); + computesizes(); + } + + /** This method compute relation and set maximum sizes */ + private void computesizes() { + Vector rules=state.vRules; + boolean change=true; + Set descriptorset=new HashSet(); + descriptorset.addAll(state.stSets.getAllDescriptors()); + descriptorset.addAll(state.stRelations.getAllDescriptors()); + while(change) { + change=false; + for(Iterator dit=descriptorset.iterator();dit.hasNext();) { + Descriptor d=(Descriptor)dit.next(); + if (d instanceof ReservedSetDescriptor) + continue; + int totalsize=0; + for(int i=0;i