openETCS
case study for the European Train Control System developed for the authors dissertation
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
oETCS::GEN::CCPPGenerator Class Reference

generator for C++ sources More...

#include <CPPGenerator.h>

Inheritance diagram for oETCS::GEN::CCPPGenerator:
Inheritance graph
Collaboration diagram for oETCS::GEN::CCPPGenerator:
Collaboration graph

Public Member Functions

 CCPPGenerator () throw ()
 default oonstructor
virtual void Generate (::DSM::CSyntaxTree *const pSyntaxTree,::std::ostream &OutStream) throw (::oETCS::GEN::Error::CException)
 generation method
virtual ~CCPPGenerator () throw ()
 destructor

Private Member Functions

void BuildAbstractModel (GOPPRR::CGraph *const pFunctionBlock,::std::map< ::std::string, oETCS::GEN::CFBNode > &FBNodes) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateCommunication (GOPPRR::CGraph *const pCommunication, GOPPRR::CProject *const pProject,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateControlFlows (GOPPRR::CProject *const pProject,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateDataFlow (GOPPRR::CGraph *const pMainFunctionBlock, GOPPRR::CGraph *const pEVCGraph, GOPPRR::CObject *const pEVCState,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateDataFlow (const ::std::string &OID, GOPPRR::CGraph *const pSubFunctionBlock,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateDataFlowForCommunication (const ::std::string &OID, GOPPRR::CGraph *const pCommGraph,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateDMI (GOPPRR::CGraph *const pMainFunctionBlock, GOPPRR::CGraph *const pEVCGraph, GOPPRR::CObject *const pEVCState,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateDMI (const ::std::string &OID, GOPPRR::CGraph *const pSubFunctionBlock,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateEVCTransitions (GOPPRR::CGraph *const pMainFunctionBlock, GOPPRR::CObject *const pEVCState, GOPPRR::CGraph *const pRootGraph,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateFunctionBlock (GOPPRR::CGraph *const pFunctionBlock, GOPPRR::CProject *const pProject,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateFunctionBlockElements (GOPPRR::CProject *const pProject,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateLanguage (GOPPRR::CProject *const pProject,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateRootGraph (GOPPRR::CGraph *const pRootGraph, GOPPRR::CProject *const pProject,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateTransitions (GOPPRR::CGraph *const pRootGraph,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateTransitions (GOPPRR::CGraph *const pFunctionBlock, GOPPRR::CObject *const pEVCState,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
void GenerateTransitions (GOPPRR::CGraph *const pFunctionBlock, GOPPRR::CGraph *const pControlFlow, GOPPRR::CObject *const pEVCState, GOPPRR::CObject *const pState,::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method

Static Private Member Functions

static void GenerateFooter (::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
static void GenerateHeader (::std::ostream &OutStream) throw (::GOPPRR::Error::CException)
 internal helper method
static bool IsFunctionBlock (GOPPRR::CObject *const pObject) throw (::GOPPRR::Error::CException)
 internal helper methods
::std::string PrefixFromPort (GOPPRR::CPort *const pPort) throw (::GOPPRR::Error::CException)
 internal helper method
static void ProcessAbstractModel (const oETCS::GEN::CFBNode &Node,::std::list< ::std::string > &ExecutionOrder,::std::vector< const oETCS::GEN::CFBNode * > &NodeStack) throw ()
 internal helper method
::std::string TypeFromPort (GOPPRR::CPort *const pPort) throw (::GOPPRR::Error::CException)
 internal helper method

Private Attributes

::std::map< ::std::string,::std::string > m_FBMap
 map with function block meta model type names to C++ domain framework names
::std::map< ::std::string,::std::string > m_FBMMap
 map with function block meta model method/port names to C++ domain framework method names
::std::map< ::std::string, bool > m_GeneratedControlFlows
 map of already generated control flow OIDs
::std::map< ::std::string, bool > m_GeneratedEVCTransitions
 map of already generated EVC transition OIDs
::std::map< ::std::string, bool > m_GeneratedTransitions
 map of already generated transition OIDs

Detailed Description

generator for C++ sources

Definition at line 58 of file CPPGenerator.h.

Constructor & Destructor Documentation

oETCS::GEN::CCPPGenerator::CCPPGenerator ( ) throw ()
explicit

default oonstructor

Definition at line 39 of file CPPGenerator.cpp.

References m_FBMap, and m_FBMMap.

oETCS::GEN::CCPPGenerator::~CCPPGenerator ( ) throw ()
virtual

destructor

Definition at line 153 of file CPPGenerator.cpp.

Member Function Documentation

void oETCS::GEN::CCPPGenerator::BuildAbstractModel ( GOPPRR::CGraph *const  pFunctionBlock,
::std::map< ::std::string, oETCS::GEN::CFBNode > &  FBNodes 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Builds the abstract function block model for a function block graph recursively.

Parameters
[in,out]pFunctionBlock,:pointer to current function block graph
[in]FBNodesmap of nodes objects indexed by their OID

Definition at line 2793 of file CPPGenerator.cpp.

References oETCS::GEN::CFBNode::DEFINED, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CGraph::m_RoleSet, and oETCS::GEN::CFBNode::UNDEFINED.

Referenced by GenerateControlFlows(), and GenerateDataFlow().

Here is the caller graph for this function:

void oETCS::GEN::CCPPGenerator::Generate ( ::DSM::CSyntaxTree *const  pSyntaxTree,
::std::ostream &  OutStream 
) throw (::oETCS::GEN::Error::CException)
virtual

generation method

Generates from a syntax tree the corresponding output.

Remarks
pure virtual method, which must be reimplemented by any inheriting class.
Parameters
[in]pTreepointer to the syntax tree used for generation
[in]OutStreamstream object used for output of generation

Implements oETCS::GEN::CGenerator.

Definition at line 164 of file CPPGenerator.cpp.

References __GENERATOR__EVCSTATEMACHINE__, DSM::CGOPPRRSyntaxTree::GetProject(), and GOPPRR::CProject::m_GraphSet.

Referenced by oETCS::GEN::CMain::Execute(), and oETCS::UT::CGenerator::TestGenerateCpp().

Here is the call graph for this function:

Here is the caller graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateCommunication ( GOPPRR::CGraph *const  pCommunication,
GOPPRR::CProject *const  pProject,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code of any type of communication graph from a GOPPRR syntax tree.

Parameters
[in]pCommnicationpointer to the function block graph
[in]pProjectpointer to the parent project of the openETCS model
[in]OutStreamstream object used for output of generation

Definition at line 1125 of file CPPGenerator.cpp.

References GOPPRR::CNonProperty::m_ID, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CGraph::m_PortSet, GOPPRR::CGraph::m_RelationshipSet, and GOPPRR::CGraph::m_RoleSet.

void oETCS::GEN::CCPPGenerator::GenerateControlFlows ( GOPPRR::CProject *const  pProject,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for creating all states of all control flows.

Parameters
[in]pProjectpointer to the openETCS project object
[in]OutStreamstream object used for output of generation

Definition at line 1766 of file CPPGenerator.cpp.

References BuildAbstractModel(), oETCS::GEN::CFBNode::m_Inputs, GOPPRR::CProject::m_ObjectSet, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CGraph::m_RelationshipSet, GOPPRR::CGraph::m_RoleSet, GOPPRR::CConcept::m_Type, GOPPRR::CGraph::Objects(), ProcessAbstractModel(), GOPPRR::CGraph::Roles(), and oETCS::GEN::CFBNode::UNDEFINED.

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateDataFlow ( GOPPRR::CGraph *const  pMainFunctionBlock,
GOPPRR::CGraph *const  pEVCGraph,
GOPPRR::CObject *const  pEVCState,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for data flow objects (CDataFlow) for a MainFunctionBlock graph

Parameters
[in]pMainFunctionBlockpointer to the main function block
[in]pEVCGraphpointer to EVC root graph
[in]pEVCStatepointer to the related EVCState object
[in]OutStreamstream object used for output of generation

Definition at line 1249 of file CPPGenerator.cpp.

References BuildAbstractModel(), oETCS::GEN::CFBNode::m_Inputs, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CGraph::m_RelationshipSet, GOPPRR::CGraph::m_RoleSet, ProcessAbstractModel(), and GOPPRR::CNonProperty::Properties().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateDataFlow ( const ::std::string &  OID,
GOPPRR::CGraph *const  pSubFunctionBlock,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for adding objects in a sub function block to a certain data flow objectt

Parameters
[in]OIDOID of the related main function block graph
[in]pSubFunctionBlockpointer to current sub function block graph
[in]OutStreamstream object used for output of generation

Definition at line 1450 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet, and GOPPRR::CGraph::m_RelationshipSet.

void oETCS::GEN::CCPPGenerator::GenerateDataFlowForCommunication ( const ::std::string &  OID,
GOPPRR::CGraph *const  pCommGraph,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code adding the related CBitFlow objects for a communication graph

Parameters
[in]OIDOID of the related main function block graph
[in]pCommGraphpointer to current communication graph
[in]OutStreamstream object used for output of generation

Definition at line 1514 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CGraph::m_RelationshipSet, and GOPPRR::CConcept::m_Type.

void oETCS::GEN::CCPPGenerator::GenerateDMI ( GOPPRR::CGraph *const  pMainFunctionBlock,
GOPPRR::CGraph *const  pEVCGraph,
GOPPRR::CObject *const  pEVCState,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for DMI widgets (CDMIWidget) for a MainFunctionBlock graph

Parameters
[in]pMainFunctionBlockpointer to the main function block
[in]pEVCGraphpointer to EVC root graph
[in]pEVCStatepointer to the related EVCState object
[in]OutStreamstream object used for output of generation

Definition at line 1555 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet.

void oETCS::GEN::CCPPGenerator::GenerateDMI ( const ::std::string &  OID,
GOPPRR::CGraph *const  pSubFunctionBlock,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for DMI widgets (CDMIWidget) for a SubFunctionBlock graph

Parameters
[in]OIDOID of the related main function block
[in]pSubFunctionBlockpointer to the subfunction block
[in]OutStreamstream object used for output of generation

Definition at line 1628 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet.

void oETCS::GEN::CCPPGenerator::GenerateEVCTransitions ( GOPPRR::CGraph *const  pMainFunctionBlock,
GOPPRR::CObject *const  pEVCState,
GOPPRR::CGraph *const  pRootGraph,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for EVC transitions in a certain main function block.

Parameters
[in]pMainFunctionBlockpointer to the main function block graph
[in]pEVCStatepointer to related EVC state object
[in]pRootGraphpointer to the root graph (EVCStateMachine)
[in]OutStreamstream object used for output of generation

Definition at line 1685 of file CPPGenerator.cpp.

References GOPPRR::CNonProperty::m_ID, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CGraph::m_RelationshipSet, GOPPRR::CGraph::m_RoleSet, and GOPPRR::CNonProperty::Properties().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateFooter ( ::std::ostream &  OutStream) throw (::GOPPRR::Error::CException)
staticprivate

internal helper method

Generates source code footer.

Parameters
[in]OutStreamstream object used for output of generation

Definition at line 2892 of file CPPGenerator.cpp.

void oETCS::GEN::CCPPGenerator::GenerateFunctionBlock ( GOPPRR::CGraph *const  pFunctionBlock,
GOPPRR::CProject *const  pProject,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code of any sub type of function block graph from a GOPPRR syntax tree.

Parameters
[in]pFunctionBlockpointer to the function block graph
[in]pProjectpointer to the parent project of the openETCS model
[in]OutStreamstream object used for output of generation

Definition at line 863 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet, GOPPRR::CGraph::m_PortSet, GOPPRR::CGraph::m_RelationshipSet, GOPPRR::CGraph::m_RoleSet, and PrefixFromPort().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateFunctionBlockElements ( GOPPRR::CProject *const  pProject,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for creating all function block classes in a project.

Parameters
[in]pProjectpointer to the parent project of the openETCS model
[in]OutStreamstream object used for output of generation

Definition at line 489 of file CPPGenerator.cpp.

References __GENERATOR__EVCSTATE__, __GENERATOR__MAINFB__, __GENERATOR__SUBFB__, __GENERATOR__TELEGRAMGRAPH__, GOPPRR::CObject::m_Explosions, GOPPRR::CProject::m_GraphSet, GOPPRR::CProperty::m_NonProperties, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CGraph::m_PortSet, and GOPPRR::CNonProperty::Properties().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateHeader ( ::std::ostream &  OutStream) throw (::GOPPRR::Error::CException)
staticprivate

internal helper method

Generates source code header, like initial comment block and includes. Is independent from model tree reprensentation

Parameters
[in]OutStreamstream object used for output of generation

Definition at line 2852 of file CPPGenerator.cpp.

Referenced by GenerateRootGraph().

Here is the caller graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateLanguage ( GOPPRR::CProject *const  pProject,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code of for the language classes

Parameters
[in]pProjectpointer to the project of the openETCS model
[in]OutStreamstream object used for output of generation

Definition at line 2184 of file CPPGenerator.cpp.

References __GENERATOR__EVCSTATE__, __GENERATOR__MAINFB__, __GENERATOR__SUBFB__, __GENERATOR__TELEGRAMGRAPH__, GOPPRR::CObject::m_Explosions, GOPPRR::CProperty::m_NonProperties, GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CObject::m_pDecomposition, GOPPRR::CGraph::m_PortSet, GOPPRR::CNonProperty::m_Properties, GOPPRR::CGraph::m_RoleSet, GOPPRR::CConcept::m_Type, GOPPRR::CGraph::Objects(), GOPPRR::CNonProperty::Properties(), and GOPPRR::CGraph::Roles().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateRootGraph ( GOPPRR::CGraph *const  pRootGraph,
GOPPRR::CProject *const  pProject,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code of a root graph (EVC state machine) from a GOPPRR syntax tree.

Parameters
[in]pRootGraphpointer to the root graph of the openETCS model
[in]pProjectpointer to the parent project of the openETCS model
[in]OutStreamstream object used for output of generation

Definition at line 240 of file CPPGenerator.cpp.

References __GENERATOR__EVCSTATE__, __GENERATOR__MAINFB__, __GENERATOR__SUBFB__, __GENERATOR__TELEGRAMGRAPH__, GenerateHeader(), GOPPRR::CObject::m_Explosions, GOPPRR::CProperty::m_NonProperties, GOPPRR::CConcept::m_OID, and GOPPRR::CNonProperty::Properties().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateTransitions ( GOPPRR::CGraph *const  pRootGraph,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for creating all states of all control flows.

Parameters
[in]pRootGraphpointer to the root graph of the openETCS model
[in]OutStreamstream object used for output of generation

Definition at line 1996 of file CPPGenerator.cpp.

References __GENERATOR__EVCSTATE__, GOPPRR::CObject::m_Explosions, and GOPPRR::CGraph::m_ObjectSet.

void oETCS::GEN::CCPPGenerator::GenerateTransitions ( GOPPRR::CGraph *const  pFunctionBlock,
GOPPRR::CObject *const  pEVCState,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for creating all trainsitions of control flows in a certain function block graph (data flow).

Parameters
[in]pFunctionBlockpointer data flow graph
[in]pControlFlowpointer to the related control flow graph
[in]pEVCStatepointer to parent EVC state object
[in]pStatepointer to the state object
[in]OutStreamstream object used for output of generation

Definition at line 2034 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet, and GOPPRR::CGraph::Objects().

Here is the call graph for this function:

void oETCS::GEN::CCPPGenerator::GenerateTransitions ( GOPPRR::CGraph *const  pFunctionBlock,
GOPPRR::CGraph *const  pControlFlow,
GOPPRR::CObject *const  pEVCState,
GOPPRR::CObject *const  pState,
::std::ostream &  OutStream 
) throw (::GOPPRR::Error::CException)
private

internal helper method

Generates source code for creating all trainsitions of control flows in a certain function block graph (data flow).

Parameters
[in]pFunctionBlockpointer to the data flow grah
[in]pControlFlowpointer to the related control flow graph
[in]pEVCStatepointer to parent EVC state object
[in]pStatepointer to the state object
[in]OutStreamstream object used for output of generation

Definition at line 2107 of file CPPGenerator.cpp.

References GOPPRR::CGraph::m_ObjectSet, GOPPRR::CConcept::m_OID, GOPPRR::CGraph::m_RelationshipSet, GOPPRR::CGraph::m_RoleSet, and GOPPRR::CConcept::m_Type.

bool oETCS::GEN::CCPPGenerator::IsFunctionBlock ( GOPPRR::CObject *const  pObject) throw (::GOPPRR::Error::CException)
staticprivate

internal helper methods

Evaluates, if a certain GOPPRR object is a function block element.

Parameters
[in]pObjectpointer to the object to evaluate
Returns
true, if object is a function block element

Definition at line 2907 of file CPPGenerator.cpp.

References __GENERATOR__FBTYPES__.

std::string oETCS::GEN::CCPPGenerator::PrefixFromPort ( GOPPRR::CPort *const  pPort) throw (::GOPPRR::Error::CException)
staticprivate

internal helper method

Gets a string with the corresponding data type prefix for certain port of a function block object.

Parameters
[in]pPortpointer to the port
Returns
string with the prefix

Definition at line 2996 of file CPPGenerator.cpp.

Referenced by GenerateFunctionBlock().

Here is the caller graph for this function:

void oETCS::GEN::CCPPGenerator::ProcessAbstractModel ( const oETCS::GEN::CFBNode Node,
::std::list< ::std::string > &  ExecutionOrder,
::std::vector< const oETCS::GEN::CFBNode * > &  NodeStack 
) throw ()
staticprivate

internal helper method

Processes recursively a abstract function block node model to find start nodes.

Parameters
[in]pNodenode to be processed
[in,out]ExecutionOrder,:list with OID in order of their later execution
[in,out]NodeStack,:vector with pointer to already recursively processed nodes to detect data flow loops

Definition at line 3059 of file CPPGenerator.cpp.

Referenced by GenerateControlFlows(), and GenerateDataFlow().

Here is the caller graph for this function:

std::string oETCS::GEN::CCPPGenerator::TypeFromPort ( GOPPRR::CPort *const  pPort) throw (::GOPPRR::Error::CException)
staticprivate

internal helper method

Gets a string with the corresponding C++ type for a certain port of a function block object.

Parameters
[in]pPortpointer to the port
Returns
string with the C++ data type

Definition at line 2940 of file CPPGenerator.cpp.

Member Data Documentation

::std::map< ::std::string, ::std::string > oETCS::GEN::CCPPGenerator::m_FBMap
private

map with function block meta model type names to C++ domain framework names

Definition at line 391 of file CPPGenerator.h.

Referenced by CCPPGenerator().

::std::map< ::std::string, ::std::string > oETCS::GEN::CCPPGenerator::m_FBMMap
private

map with function block meta model method/port names to C++ domain framework method names

Definition at line 398 of file CPPGenerator.h.

Referenced by CCPPGenerator().

::std::map< ::std::string, bool > oETCS::GEN::CCPPGenerator::m_GeneratedControlFlows
private

map of already generated control flow OIDs

Definition at line 419 of file CPPGenerator.h.

::std::map< ::std::string, bool > oETCS::GEN::CCPPGenerator::m_GeneratedEVCTransitions
private

map of already generated EVC transition OIDs

Definition at line 412 of file CPPGenerator.h.

::std::map< ::std::string, bool > oETCS::GEN::CCPPGenerator::m_GeneratedTransitions
private

map of already generated transition OIDs

Definition at line 405 of file CPPGenerator.h.


The documentation for this class was generated from the following files:

Copyright (C) 2010-2012 Johannes Feuser (feuser@uni-bremen.de)
The openETCS library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
The openETCS library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with the openETCS library. If not, see "http://www.gnu.org/licenses/.