modified: ../../../main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java

ArrayList durch LinkedList ersetzt
computeCartesianRecursiveOderConstraints auskommentiert
This commit is contained in:
Martin Plümicke 2019-02-14 08:53:32 +01:00
parent 85a15cb256
commit 25b1d3e62d

View File

@ -228,7 +228,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
} }
*/ */
/*
public Set<Set<UnifyPair>> computeCartesianRecursiveOderConstraints(Set<Set<UnifyPair>> fstElems, List<Set<Set<UnifyPair>>> topLevelSets, IFiniteClosure fc, boolean parallel, int rekTiefe) { public Set<Set<UnifyPair>> computeCartesianRecursiveOderConstraints(Set<Set<UnifyPair>> fstElems, List<Set<Set<UnifyPair>>> topLevelSets, IFiniteClosure fc, boolean parallel, int rekTiefe) {
//ArrayList<Set<Set<UnifyPair>>> remainingSets = new ArrayList<>(topLevelSets); //ArrayList<Set<Set<UnifyPair>>> remainingSets = new ArrayList<>(topLevelSets);
fstElems.addAll(topLevelSets.stream() fstElems.addAll(topLevelSets.stream()
@ -274,7 +274,8 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
// nextSetasList = al; // nextSetasList = al;
//} //}
//Set<UnifyPair> a = nextSetasListIt.next(); //Set<UnifyPair> a = nextSetasListIt.next();
/*if (nextSetasList.size()>1) {zu loeschen //
/ *if (nextSetasList.size()>1) {zu loeschen
if (nextSetasList.iterator().next().iterator().next().getLhsType().getName().equals("D")) if (nextSetasList.iterator().next().iterator().next().getLhsType().getName().equals("D"))
System.out.print(""); System.out.print("");
if (variance == 1) { if (variance == 1) {
@ -290,7 +291,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
else { else {
a_next = nextSetasList.iterator().next(); a_next = nextSetasList.iterator().next();
} }
*/ * /
if (!nextSetasList.iterator().hasNext()) if (!nextSetasList.iterator().hasNext())
System.out.print(""); System.out.print("");
if (nextSetasList.iterator().next().stream().filter(x -> x.getLhsType().getName().equals("D")).findFirst().isPresent() && nextSetasList.size()>1) if (nextSetasList.iterator().next().stream().filter(x -> x.getLhsType().getName().equals("D")).findFirst().isPresent() && nextSetasList.size()>1)
@ -299,11 +300,13 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
while (nextSetasList.size() > 0) { //(nextSetasList.size() != 0) { while (nextSetasList.size() > 0) { //(nextSetasList.size() != 0) {
Set<UnifyPair> a = null; Set<UnifyPair> a = null;
if (variance == 1) { if (variance == 1) {
a = oup.max(nextSetasList.iterator()); //a = oup.max(nextSetasList.iterator());
a = nextSetasList.get(nextSetasList.size()-1);
nextSetasList.remove(a); nextSetasList.remove(a);
} }
else if (variance == -1) { else if (variance == -1) {
a = oup.min(nextSetasList.iterator()); //a = oup.min(nextSetasList.iterator());
a = nextSetasList.get(0);
nextSetasList.remove(a); nextSetasList.remove(a);
} }
else if (variance == 0) { else if (variance == 0) {
@ -311,7 +314,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
} }
//writeLog("nextSet: " + nextSetasList.toString()+ "\n"); //writeLog("nextSet: " + nextSetasList.toString()+ "\n");
//nextSetasList.remove(a); //nextSetasList.remove(a);
/* zu loeschen / * zu loeschen
if (nextSetasList.size() > 0) { if (nextSetasList.size() > 0) {
if (nextSetasList.size()>1) { if (nextSetasList.size()>1) {
if (variance == 1) { if (variance == 1) {
@ -328,7 +331,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
a_next = nextSetasList.iterator().next(); a_next = nextSetasList.iterator().next();
} }
} }
*/ * /
//PL 2018-03-01 //PL 2018-03-01
//TODO: 1. Maximum und Minimum unterscheiden //TODO: 1. Maximum und Minimum unterscheiden
//TODO: 2. compare noch für alle Elmemente die nicht X =. ty sind erweitern //TODO: 2. compare noch für alle Elmemente die nicht X =. ty sind erweitern
@ -372,7 +375,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
/* auskommentiert um alle Max und min Betrachtung auszuschalten ANFANG */ / * auskommentiert um alle Max und min Betrachtung auszuschalten ANFANG * /
if (!result.isEmpty() && !isUndefinedPairSetSet(res)) { if (!result.isEmpty() && !isUndefinedPairSetSet(res)) {
if (nextSetasList.iterator().hasNext() && nextSetasList.iterator().next().stream().filter(x -> x.getLhsType().getName().equals("B")).findFirst().isPresent() && nextSetasList.size()>1) if (nextSetasList.iterator().hasNext() && nextSetasList.iterator().next().stream().filter(x -> x.getLhsType().getName().equals("B")).findFirst().isPresent() && nextSetasList.size()>1)
System.out.print(""); System.out.print("");
@ -407,9 +410,9 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
//break; //break;
}} }}
} }
/* auskommentiert um alle Max und min Betrachtung auszuschalten ENDE */ / * auskommentiert um alle Max und min Betrachtung auszuschalten ENDE * /
/* PL 2018-11-05 wird falsch weil es auf der obersten Ebene ist. / * PL 2018-11-05 wird falsch weil es auf der obersten Ebene ist.
if (isUndefinedPairSetSet(res)) { if (isUndefinedPairSetSet(res)) {
int nofstred= 0; int nofstred= 0;
Set<UnifyPair> abhSubst = res.stream() Set<UnifyPair> abhSubst = res.stream()
@ -462,7 +465,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
writeLog("Number of Backtracking: " + noBacktracking); writeLog("Number of Backtracking: " + noBacktracking);
System.out.println(""); System.out.println("");
} }
*/ * /
//if (nextSetasList.size() == 0 && isUndefinedPairSetSet(result) && nextSet.size() > 1) { //if (nextSetasList.size() == 0 && isUndefinedPairSetSet(result) && nextSet.size() > 1) {
// return result; // return result;
//} //}
@ -475,7 +478,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
} // End of while (nextSetasList.size() > 0) } // End of while (nextSetasList.size() > 0)
return result; return result;
} }
*/
/** /**
* Computes all principal type unifiers for a set of constraints. * Computes all principal type unifiers for a set of constraints.
@ -820,15 +823,15 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
Set<UnifyPair> a = null; Set<UnifyPair> a = null;
while (nextSetasList.size() > 0) { //(nextSetasList.size() != 0) { while (nextSetasList.size() > 0) { //(nextSetasList.size() != 0) {
Set<UnifyPair> a_last = a; Set<UnifyPair> a_last = a;
List<Set<UnifyPair>> nextSetasListRest = new ArrayList<>(); List<Set<UnifyPair>> nextSetasListRest = new LinkedList<>();
//List<Set<UnifyPair>> nextSetasListRestMin = new ArrayList<>(); //List<Set<UnifyPair>> nextSetasListRestMin = new ArrayList<>();
//List<Set<UnifyPair>> nextSetasListRestOder = new ArrayList<>(); //List<Set<UnifyPair>> nextSetasListRestOder = new ArrayList<>();
if (variance == 1) { if (variance == 1) {
//a = oup.max(nextSetasList.iterator()); //a = oup.max(nextSetasList.iterator());
a = nextSetasList.get(nextSetasList.size()-1); a = nextSetasList.get(nextSetasList.size()-1);
nextSetasList.remove(a); nextSetasList.remove(a);
nextSetasListRest = new ArrayList<>(nextSetasList); nextSetasListRest = new LinkedList<>(nextSetasList);
Iterator<Set<UnifyPair>> nextSetasListItRest = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator(); Iterator<Set<UnifyPair>> nextSetasListItRest = new LinkedList<Set<UnifyPair>>(nextSetasListRest).iterator();
while (nextSetasListItRest.hasNext()) { while (nextSetasListItRest.hasNext()) {
Set<UnifyPair> a_next = nextSetasListItRest.next(); Set<UnifyPair> a_next = nextSetasListItRest.next();
if (//a.equals(a_next) || if (//a.equals(a_next) ||
@ -839,9 +842,10 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
//Alle maximale Elemente in nextSetasListRest bestimmen //Alle maximale Elemente in nextSetasListRest bestimmen
List<Set<UnifyPair>> nextSetasListRestTest; List<Set<UnifyPair>> nextSetasListRestTest;
do { do {
nextSetasListRestTest = new ArrayList<Set<UnifyPair>>(nextSetasListRest); nextSetasListRestTest = new LinkedList<Set<UnifyPair>>(nextSetasListRest);
if (!nextSetasListRest.isEmpty()) { if (!nextSetasListRest.isEmpty()) {
Set<UnifyPair> max = oup.max(nextSetasListRest.iterator()); //Set<UnifyPair> max = oup.max(nextSetasListRest.iterator());
Set<UnifyPair> max = nextSetasListRest.get(nextSetasListRest.size()-1);
Iterator<Set<UnifyPair>> nextSetasListItRest2 = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator(); Iterator<Set<UnifyPair>> nextSetasListItRest2 = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator();
while (nextSetasListItRest2.hasNext()) { while (nextSetasListItRest2.hasNext()) {
Set<UnifyPair> a_nextRest = nextSetasListItRest2.next(); Set<UnifyPair> a_nextRest = nextSetasListItRest2.next();
@ -858,7 +862,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
//a = oup.min(nextSetasList.iterator()); //a = oup.min(nextSetasList.iterator());
a = nextSetasList.get(0); a = nextSetasList.get(0);
nextSetasList.remove(a); nextSetasList.remove(a);
nextSetasListRest = new ArrayList<>(nextSetasList); nextSetasListRest = new LinkedList<>(nextSetasList);
Iterator<Set<UnifyPair>> nextSetasListItRest = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator(); Iterator<Set<UnifyPair>> nextSetasListItRest = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator();
while (nextSetasListItRest.hasNext()) { while (nextSetasListItRest.hasNext()) {
Set<UnifyPair> a_next = nextSetasListItRest.next(); Set<UnifyPair> a_next = nextSetasListItRest.next();
@ -871,9 +875,10 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
List<Set<UnifyPair>> nextSetasListRestTest; List<Set<UnifyPair>> nextSetasListRestTest;
do { do {
nextSetasListRestTest = new ArrayList<Set<UnifyPair>>(nextSetasListRest); nextSetasListRestTest = new LinkedList<Set<UnifyPair>>(nextSetasListRest);
if (!nextSetasListRest.isEmpty()) { if (!nextSetasListRest.isEmpty()) {
Set<UnifyPair> min = oup.min(nextSetasListRest.iterator()); //Set<UnifyPair> min = oup.min(nextSetasListRest.iterator());
Set<UnifyPair> min = nextSetasListRest.get(0);
Iterator<Set<UnifyPair>> nextSetasListItRest2 = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator(); Iterator<Set<UnifyPair>> nextSetasListItRest2 = new ArrayList<Set<UnifyPair>>(nextSetasListRest).iterator();
while (nextSetasListItRest2.hasNext()) { while (nextSetasListItRest2.hasNext()) {
Set<UnifyPair> a_nextRest = nextSetasListItRest2.next(); Set<UnifyPair> a_nextRest = nextSetasListItRest2.next();
@ -887,7 +892,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
} }
else if (variance == 2) { else if (variance == 2) {
a = nextSetasList.remove(0); a = nextSetasList.remove(0);
nextSetasListRest = new ArrayList<>(nextSetasList); nextSetasListRest = new LinkedList<>(nextSetasList);
} }
else if (variance == 0) { else if (variance == 0) {
a = nextSetasList.remove(0); a = nextSetasList.remove(0);