From 1cf22d2602206e8421d1e45e4c4bcc7deabdc717 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Thu, 14 Jan 2021 11:27:19 +0100 Subject: [PATCH] modified: ../src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java remaingSet entfernt fstElems in oneElems umbenannt --- .../typeinference/unify/TypeUnifyTask.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index a2667a85..aa2e25a0 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -626,22 +626,21 @@ public class TypeUnifyTask extends RecursiveTask>> { //fstElems: Alle 1-elementigen Mengen, die nur ein Paar //a <. theta, theta <. a oder a =. theta enthalten - Set> fstElems = new HashSet<>(); - fstElems.addAll(topLevelSets.stream() + Set> oneElems = new HashSet<>(); + oneElems.addAll(topLevelSets.stream() .filter(x -> x.size()==1) .map(y -> y.stream().findFirst().get()) .collect(Collectors.toCollection(HashSet::new))); - //remainingSets: Alle mehrelementigen Mengen - ArrayList>> remainingSets = topLevelSets.stream() - .filter(x -> x.size()>1) - .collect(Collectors.toCollection(ArrayList::new)); - writeLog("Anzahl der Elemente von Remaining: " + remainingSets.size()); - if (remainingSets.isEmpty()) {//Alle Elemente sind 1-elementig - Set> result = unify2(fstElems, eq, oderConstraints, fc, parallel, rekTiefe); + //optNextSet: Eine mehrelementige Menge, wenn vorhanden + Optional>> optNextSet = topLevelSets.stream().filter(x -> x.size()>1).findAny(); + + if (!optNextSet.isPresent()) {//Alle Elemente sind 1-elementig + Set> result = unify2(oneElems, eq, oderConstraints, fc, parallel, rekTiefe); return result; } - Set> nextSet = remainingSets.remove(0); + + Set> nextSet = optNextSet.get(); //writeLog("nextSet: " + nextSet.toString()); List> nextSetasList =new ArrayList<>(nextSet); /* @@ -716,7 +715,7 @@ public class TypeUnifyTask extends RecursiveTask>> { //writeLog("BasePair1: " + nextSetElem + " " + nextSetElem.iterator().next().getBasePair()); /* sameEqSet-Bestimmung: Wenn a = ty \in nextSet dann enthaelt sameEqSet - * alle Paare a < ty1 oder ty2 < a aus fstElems */ + * alle Paare a < ty1 oder ty2 < a aus oneElems */ Set sameEqSet = new HashSet<>(); //optOrigPair enthaelt ggf. das Paar a = ty \in nextSet @@ -744,7 +743,7 @@ public class TypeUnifyTask extends RecursiveTask>> { tyVar = origPair.getRhsType(); } UnifyType tyVarEF = tyVar; - sameEqSet = fstElems.stream().map(xx -> xx.iterator().next()) + sameEqSet = oneElems.stream().map(xx -> xx.iterator().next()) .filter(x -> (((x.getLhsType().equals(tyVarEF) && !(x.getRhsType() instanceof PlaceholderType)) || (x.getRhsType().equals(tyVarEF) && !(x.getLhsType() instanceof PlaceholderType))))) .collect(Collectors.toCollection(HashSet::new)); @@ -845,7 +844,7 @@ public class TypeUnifyTask extends RecursiveTask>> { } i++; - Set> elems = new HashSet>(fstElems); + Set> elems = new HashSet>(oneElems); writeLog("a1: " + rekTiefe + " "+ "variance: "+ variance + " " + a.toString()+ "\n"); Set> res = new HashSet<>(); Set>> add_res = new HashSet<>(); @@ -853,6 +852,8 @@ public class TypeUnifyTask extends RecursiveTask>> { /* PL 2019-03-11 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */ if (!oderConstraint && !sameEqSet.isEmpty()) { + //optAPair enthaelt ggf. das Paar a = ty' \in a + //unterscheidet sich von optOrigPair, da dort a = ty Optional optAPair = a.stream().filter(x -> ( //x.getBasePair() != null && ist gegeben wenn variance != 2 //x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) && @@ -871,7 +872,7 @@ public class TypeUnifyTask extends RecursiveTask>> { if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a UnifyPair aPair = optAPair.get(); //writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair()); - writeLog("variance: " + new Integer(variance).toString() + "sameEqSet:" + sameEqSet); + writeLog("variance: " + variance + "sameEqSet:" + sameEqSet); if (!checkA(aPair, sameEqSet, elems, result)) { a = null; noShortendElements++; @@ -1291,7 +1292,7 @@ public class TypeUnifyTask extends RecursiveTask>> { } else { //alle Fehlerfaelle und alle korrekten Ergebnis jeweils adden - writeLog("RES Fst: reuslt: " + result.toString() + " res: " + res.toString()); + writeLog("RES Fst: result: " + result.toString() + " res: " + res.toString()); result.addAll(res); } } @@ -1303,10 +1304,6 @@ public class TypeUnifyTask extends RecursiveTask>> { //} } - //} - //else {//duerfte gar nicht mehr vorkommen PL 2018-04-03 - //result.addAll(computeCartesianRecursive(elems, remainingSets, eq, fc, parallel)); - //} if (parallel) { for (Set> par_res : add_res) { if (!isUndefinedPairSetSet(par_res) && isUndefinedPairSetSet(result)) {