diff --git a/src/de/stups/probkodkod/KodkodAnalysis.java b/src/de/stups/probkodkod/KodkodAnalysis.java index 11f3793293e18e8ed6b5bebb4b603600c5ef7d6d..3b01b5687270cacf336e3637ae1771630c202c9e 100644 --- a/src/de/stups/probkodkod/KodkodAnalysis.java +++ b/src/de/stups/probkodkod/KodkodAnalysis.java @@ -93,6 +93,7 @@ import de.stups.probkodkod.parser.node.ARelInnerformula; import de.stups.probkodkod.parser.node.ARelation; import de.stups.probkodkod.parser.node.ARelrefInnerexpression; import de.stups.probkodkod.parser.node.ARequest; +import de.stups.probkodkod.parser.node.AReset; import de.stups.probkodkod.parser.node.ASetMultiplicity; import de.stups.probkodkod.parser.node.ASomeMultiplicity; import de.stups.probkodkod.parser.node.AStandardType; @@ -308,6 +309,11 @@ public class KodkodAnalysis extends DepthFirstAdapter { session.stop(); } + @Override + public void outAReset(final AReset node) { + session.reset(); + } + private Map<String, TupleSet> extractArguments(final List<PArgument> args, final ImmutableProblem problem) { final Map<String, TupleSet> result = new HashMap<String, TupleSet>(); diff --git a/src/de/stups/probkodkod/KodkodSession.java b/src/de/stups/probkodkod/KodkodSession.java index 059492f39c9f83d8243ff5e1b9536e0defdf635f..f618ec94360dc9aef2d909e48680846997620fe3 100644 --- a/src/de/stups/probkodkod/KodkodSession.java +++ b/src/de/stups/probkodkod/KodkodSession.java @@ -90,6 +90,18 @@ public class KodkodSession { this.stopped = true; } + public void reset() { + long before = Runtime.getRuntime().freeMemory(); + this.problems.clear(); + this.solvers.clear(); + this.currentRequests.clear(); + System.gc(); + long after = Runtime.getRuntime().freeMemory(); + logger.info("session reseted (" + before + + " bytes of free memory before and " + after + + " bytes after reset (diff: " + (after - before) + " bytes)"); + } + private void info(final ImmutableProblem problem, final String info) { if (logger.isLoggable(Level.INFO)) { logger.info("problem '" + problem.getId() + "': " + info); diff --git a/src/problem.grammar b/src/problem.grammar index d32d2959a6867009fcc49249f4752162ac42597b..ff4ed488be658662883b0f66e6ae5cfc85f21aab 100644 --- a/src/problem.grammar +++ b/src/problem.grammar @@ -59,6 +59,7 @@ Tokens keyword_varref = 'varref'; keyword_request = 'request'; keyword_stop = 'stop'; + keyword_reset = 'reset'; keyword_list = 'list'; keyword_positive = 'pos'; keyword_negative = 'neg'; @@ -93,6 +94,7 @@ Productions | {request} request | {list} list | {stop} stop + | {reset} reset | {none}; problem = keyword_problem [id]:identifier @@ -208,3 +210,6 @@ Productions list = keyword_list [problem]:identifier [size]:number; stop = keyword_stop; + + reset = keyword_reset; +