From ce2401f3eb9654294c0380025c0d9bd94b8ed7d4 Mon Sep 17 00:00:00 2001 From: NoName11234 <47484268+NoName11234@users.noreply.github.com> Date: Mon, 29 Apr 2024 16:53:23 +0200 Subject: [PATCH] added class UnifyResultModelParallel --- .../unify/UnifyResultListener.java | 6 ++- .../unify/UnifyResultModelParallel.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultModelParallel.java diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultListener.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultListener.java index f490ccd..c88bad4 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultListener.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultListener.java @@ -1,7 +1,11 @@ package de.dhbwstuttgart.typeinference.unify; +import de.dhbwstuttgart.typeinference.unify.model.UnifyPair; + +import java.util.Set; + public interface UnifyResultListener { - void onNewTypeResultFound(UnifyResultEvent evt); + void onNewTypeResultFound(Set> evt); } diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultModelParallel.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultModelParallel.java new file mode 100644 index 0000000..9521c1c --- /dev/null +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyResultModelParallel.java @@ -0,0 +1,51 @@ +package de.dhbwstuttgart.typeinference.unify; + +import de.dhbwstuttgart.typeinference.constraints.ConstraintSet; +import de.dhbwstuttgart.typeinference.constraints.Pair; +import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.model.PairOperator; +import de.dhbwstuttgart.typeinference.unify.model.UnifyPair; + +import java.util.*; +import java.util.concurrent.ForkJoinPool; +import java.util.stream.Collectors; + +public class UnifyResultModelParallel { + private ForkJoinPool pool; + private ConstraintSet cons; + private IFiniteClosure fc; + private List listeners = new ArrayList<>(); + + public UnifyResultModelParallel(ConstraintSet cons, IFiniteClosure fc){ + this.cons = cons; + this.fc = fc; + } + + public void setPool(ForkJoinPool pool){ + this.pool = pool; + } + public void addUnifyResultListener(UnifyResultListener listenerToAdd) { + listeners.add(listenerToAdd); + } + public void removeUnifyResultListener(UnifyResultListener listenerToRemove) { + listeners.remove(listenerToRemove); + } + public void notify(Set> eqPrimePrimeSet){ + pool.execute(()->{ + Set> eqPrimePrimeSetRet = eqPrimePrimeSet.stream().map(x -> { + Optional> res = new RuleSet().subst(x.stream().map(y -> { + if (y.getPairOp() == PairOperator.SMALLERDOTWC) y.setPairOp(PairOperator.EQUALSDOT); + return y; //alle Paare a <.? b erden durch a =. b ersetzt + }).collect(Collectors.toCollection(HashSet::new))); + if (res.isPresent()) {//wenn subst ein Erg liefert wurde was veraendert + return new TypeUnifyTask().applyTypeUnificationRules(res.get(), fc); + } + else return x; //wenn nichts veraendert wurde wird x zurueckgegeben + }).collect(Collectors.toCollection(HashSet::new)); + + for (UnifyResultListener listener : listeners) { + listener.onNewTypeResultFound(eqPrimePrimeSetRet); + } + }); + } +}