From e11bce7ad3e803e80883499fec0ad6e4540ffe43 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 30 Jun 2020 18:03:48 +0200 Subject: Add modified VIATRA-DSE version --- .../eclipse/viatra/dse/base/DseIdPoolHelper.java | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/base/DseIdPoolHelper.java (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/base/DseIdPoolHelper.java') diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/base/DseIdPoolHelper.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/base/DseIdPoolHelper.java new file mode 100644 index 00000000..f6fee7be --- /dev/null +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/base/DseIdPoolHelper.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2010-2016, Andras Szabolcs Nagy and Daniel Varro + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.viatra.dse.base; + +import java.util.Collection; +import java.util.HashMap; +import java.util.concurrent.ConcurrentHashMap; + +import org.eclipse.viatra.dse.api.DSEException; +import org.eclipse.viatra.transformation.runtime.emf.rules.batch.BatchTransformationRule; + +public enum DseIdPoolHelper { + + INSTANCE; + + public static interface IGetRuleExecutions { + int getRuleExecutions(BatchTransformationRule rule); + } + + public static class IdProvider { + + private final BatchTransformationRule rule; + private IGetRuleExecutions getRuleExecutions; + + public IdProvider(IGetRuleExecutions getRuleExecutions, BatchTransformationRule rule) { + this.getRuleExecutions = getRuleExecutions; + this.rule = rule; + } + + public int getId() { + return getRuleExecutions.getRuleExecutions(rule); + } + + } + + private ConcurrentHashMap, IdProvider>> idProviders = new ConcurrentHashMap<>(); + + public int getId(BatchTransformationRule rule) { + Thread currentThread = Thread.currentThread(); + HashMap, IdProvider> ruleMap = idProviders.get(currentThread); + if (ruleMap == null) { + throw new DSEException("There is no registered id provider"); + } + IdProvider idProvider = ruleMap.get(rule); + return idProvider.getId(); + } + + public void registerRules(IGetRuleExecutions getRuleExecutions, Collection> rules) { + Thread currentThread = Thread.currentThread(); + HashMap, IdProvider> ruleMap = new HashMap<>(); + for (BatchTransformationRule rule : rules) { + IdProvider idProvider = new IdProvider(getRuleExecutions, rule); + ruleMap.put(rule, idProvider); + } + idProviders.put(currentThread, ruleMap); + } + + public void disposeByThread() { + Thread currentThread = Thread.currentThread(); + idProviders.remove(currentThread); + } +} -- cgit v1.2.3-54-g00ecf