private HNSubSet getTasksWithEmptyOutputPlaces(int task) { HNSubSet tasksEmptyOutPlaces; HNSubSet inputTasks; int inputTask; HNSet outputSubsets; inputTasks = hNet.getAllElementsInputSet(task); tasksEmptyOutPlaces = new HNSubSet(); for (int iInputTasks = 0; iInputTasks < inputTasks.size(); iInputTasks++) { inputTask = inputTasks.get(iInputTasks); outputSubsets = auxMapping.getRelatedSubsets(task, inputTask); if (outputSubsets != null) { if (!allSubsetsAreMarked(inputTask, outputSubsets)) { tasksEmptyOutPlaces.add(inputTask); } } else { tasksEmptyOutPlaces.add(inputTask); } } return tasksEmptyOutPlaces; }
/** * Removes one token from the marked output places (subsets) of the tasks in <i>tasks</i> that * contain <i>element</i>. * * @param element element to fire * @param tasks whose output places point to element */ private void removeTokensOutputPlaces(int element, HNSubSet tasks) { HNSubSet subset = null; HNSet subsets = null; Integer tokens = null; int taskToFire; int task; // Checking if element is a start element if (hNet.getInputSet(element).size() == 0) { if (startPlace > 0) { startPlace--; numberTokens--; } } else { taskToFire = element; for (int iTasks = 0; iTasks < tasks.size(); iTasks++) { task = tasks.get(iTasks); subsets = auxMapping.getRelatedSubsets(taskToFire, task); if (subsets != null) { for (int iSubsets = 0; iSubsets < subsets.size(); iSubsets++) { subset = subsets.get(iSubsets); tokens = getNumberTokens(task, subset); if (tokens.intValue() > 0) { decreaseNumberTokens(task, subset); numberTokens--; } } } } } }