/**
 * *******************************************************************************
 * Copyright (c) 2020 Robert Bosch GmbH.
 * 
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 * 
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 * *******************************************************************************
 */

package org.eclipse.app4mc.slg.linux.transformers

import com.google.inject.Inject
import com.google.inject.Singleton
import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation
import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore
import org.eclipse.app4mc.slg.config.ConfigModel
import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsTranslationUnit
import org.eclipse.app4mc.transformation.util.OutputBuffer

@Singleton
class LinuxTicksUtilsTransformer extends LinuxBaseTransformer {

	@Inject OutputBuffer outputBuffer;
	@Inject CustomObjectsStore customObjsStore

	def LinuxTicksUtilsTranslationUnit generate(IDiscreteValueDeviation value) {
		return generateIntern(value.class) // hash according to class not instance
	}

	def create new LinuxTicksUtilsTranslationUnit(outputBuffer, customObjsStore.getInstance(ConfigModel), valueClass) generateIntern(
		Object valueClass) {
	}

}
