blob: 6265fde6fbd67fd3c226bdd67f64d4e9e92900bd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Created on: 2 juil. 2008
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#include "ExecutableLib.h"
#include <fml/common/ModifierElement.h>
#include <fml/executable/BaseInstanceForm.h>
#include <fml/executable/ExecutableForm.h>
#include <fml/executable/InstanceOfData.h>
#include <fml/executable/InstanceOfMachine.h>
#include <fml/executable/InstanceOfPort.h>
#include <fml/type/TypeManager.h>
namespace sep
{
/**
* PRE DEFINED MACHINE VARIABLE
*/
Symbol ExecutableLib::MACHINE_NULL;
Symbol ExecutableLib::MACHINE_ENVIRONMENT;
Symbol ExecutableLib::MACHINE_SELF;
Symbol ExecutableLib::MACHINE_PARENT;
Symbol ExecutableLib::MACHINE_COMMUNICATOR;
Symbol ExecutableLib::MACHINE_COMPONENT_SELF;
Symbol ExecutableLib::MACHINE_COMPONENT_PARENT;
Symbol ExecutableLib::MACHINE_COMPONENT_COMMUNICATOR;
Symbol ExecutableLib::MACHINE_SYSTEM;
/**
* PRE DEFINED NULL FORM
*/
Symbol ExecutableLib::CHANNEL_NIL;
Symbol ExecutableLib::PORT_NIL;
Symbol ExecutableLib::BUFFER_NIL;
/**
* BOTTOM
* TOP
*/
Symbol ExecutableLib::BOTTOM;
Symbol ExecutableLib::TOP;
Symbol ExecutableLib::_NULL_;
Symbol ExecutableLib::_INFINITY_;
/**
* LOADER
*/
void ExecutableLib::load()
{
MACHINE_NULL = new InstanceOfMachine(NULL, NULL, NULL, NULL, 0,
Specifier::DESIGN_INSTANCE_STATIC_SPECIFIER);
MACHINE_NULL.machine().getwModifier().setModifierPublicFinalStatic();
MACHINE_NULL.setAllNameID("null#machine", "null#machine");
// MACHINE_NULL.setAllNameID("null< machine >", "null< machine >");
MACHINE_NULL.machine().setInstanceModel(MACHINE_NULL.rawMachine());
MACHINE_SELF = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::self", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_PARENT = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::parent", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_COMMUNICATOR = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::machine#com", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_COMPONENT_SELF = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::machine#component#self", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_COMPONENT_PARENT = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::machine#component#parent", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_COMPONENT_COMMUNICATOR = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::machine#component#communicator", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_SYSTEM = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::system", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
MACHINE_ENVIRONMENT = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::MACHINE, "const::env", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
CHANNEL_NIL = InstanceOfPort::newChannel(
NULL, NULL, AVM_NUMERIC_MAX_OFFSET);
CHANNEL_NIL.setAllNameID("null#channel", "null#channel");
// CHANNEL_NIL.setAllNameID("null< channel >", "null< channel >");
PORT_NIL = new InstanceOfPort(NULL, NULL,
AVM_NUMERIC_MAX_OFFSET, 0, IComPoint::IO_UNDEFINED_NATURE);
PORT_NIL.setAllNameID("null#port", "null#port");
// PORT_NIL.setAllNameID("null< port >", "null< port >");
BUFFER_NIL = new InstanceOfBuffer(NULL, NULL, AVM_NUMERIC_MAX_OFFSET,
TYPE_UNDEFINED_SPECIFIER, -1);
BUFFER_NIL.setAllNameID("null#buffer", "null#buffer");
// BUFFER_NIL.setAllNameID("null< buffer >", "null< buffer >");
BOTTOM = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::UNIVERSAL, "const::BOTTOM", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
TOP = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::UNIVERSAL, "const::TOP", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
_NULL_ = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::UNIVERSAL, "const::NULL", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
_INFINITY_ = new InstanceOfData(
IPointerDataNature::POINTER_STANDARD_NATURE,
TypeManager::UNIVERSAL, "const::INFINITY", 0,
Modifier::PROPERTY_PUBLIC_FINAL_STATIC_MODIFIER);
}
/**
* DISPOSER
*/
void ExecutableLib::dispose()
{
MACHINE_NULL.destroy();
MACHINE_ENVIRONMENT.destroy();
MACHINE_SELF.destroy();
MACHINE_PARENT.destroy();
MACHINE_COMMUNICATOR.destroy();
MACHINE_COMPONENT_SELF.destroy();
MACHINE_COMPONENT_PARENT.destroy();
MACHINE_COMPONENT_COMMUNICATOR.destroy();
MACHINE_SYSTEM.destroy();
CHANNEL_NIL.destroy();
PORT_NIL.destroy();
BUFFER_NIL.destroy();
BOTTOM.destroy();
TOP.destroy();
_NULL_.destroy();
_INFINITY_.destroy();
}
}