blob: 7ad71b51f871870dc580e3bbb9b89a8283568dd0 [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: 21 avr. 2016
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and Implementation
******************************************************************************/
#ifndef FML_COMMON_SPECIFIERELEMENT_H_
#define FML_COMMON_SPECIFIERELEMENT_H_
#include <util/avm_numeric.h>
#include <util/avm_string.h>
namespace sep
{
class Specifier
{
public:
/**
* SCOPE_KIND
* 3 bits
*/
enum SCOPE_KIND
{
SCOPE_MACHINE_KIND,
SCOPE_PROGRAM_KIND,
SCOPE_TRANSITION_KIND,
SCOPE_ROUTINE_KIND,
SCOPE_RUNNABLE_KIND,
SCOPE_UNDEFINED_KIND
};
// Utils
static SCOPE_KIND toScope(const std::string & id);
static std::string strScope(SCOPE_KIND mMocKind);
/**
* COMPONENT_KIND
* 7 bits
*/
enum COMPONENT_KIND {
COMPONENT_UNDEFINED_KIND = 0x000,
COMPONENT_SYSTEM_KIND = 0x001,
COMPONENT_EXECUTABLE_KIND = 0x002,
COMPONENT_PROCEDURE_KIND = 0x004,
COMPONENT_ROUTINE_KIND = 0x008,
COMPONENT_STATEMACHINE_KIND = 0x010,
COMPONENT_STATE_KIND = 0x020,//| COMPONENT_STATEMACHINE_KIND,
COMPONENT_PSEUDOSTATE_KIND = 0x040,//| COMPONENT_STATE_KIND,
FAMILY_COMPONENT_STATE_KIND = COMPONENT_STATE_KIND
| COMPONENT_PSEUDOSTATE_KIND,
FAMILY_COMPONENT_STATEMACHINE_KIND = COMPONENT_STATEMACHINE_KIND
| FAMILY_COMPONENT_STATE_KIND,
FAMILY_COMPONENT_COMPOSITE_KIND = COMPONENT_SYSTEM_KIND
| COMPONENT_STATEMACHINE_KIND
| COMPONENT_EXECUTABLE_KIND,
};
/**
* Model Of Computation
* MOC_KIND
* 6 bits
*/
enum MOC_KIND {
MOC_UNDEFINED_KIND = 0x000,
MOC_COMPOSITE_MASK_KIND = 0x001,
MOC_COMPOSITE_STRUCTURE_KIND = 0x002 | MOC_COMPOSITE_MASK_KIND,
MOC_STATE_TRANSITION_STRUCTURE_KIND = 0x004 | MOC_COMPOSITE_MASK_KIND,
MOC_STATE_TRANSITION_SYSTEM_KIND = 0x008 | MOC_STATE_TRANSITION_STRUCTURE_KIND,
MOC_STATE_TRANSITION_FLOW_KIND = 0x010 | MOC_STATE_TRANSITION_STRUCTURE_KIND,
MOC_DATA_FLOW_KIND = 0x020 | MOC_COMPOSITE_MASK_KIND,
};
/**
* GROUP_KIND
* 3 bits
*/
enum GROUP_KIND
{
GROUP_UNDEFINED_KIND = 0x000,
GROUP_MASK_KIND = 0x001,
GROUP_SOME_KIND = 0x002 | GROUP_MASK_KIND,
GROUP_EXCEPT_KIND = 0x004 | GROUP_MASK_KIND,
GROUP_EVERY_KIND = 0x006 | GROUP_MASK_KIND
};
/**
* STATE_MOC
* 4 bits
*/
enum STATE_MOC
{
STATE_UNDEFINED_MOC = 0x000,
STATE_SIMPLE_MOC = 0x001,
STATE_START_MOC = 0x002,
STATE_FINAL_MOC = 0x004,
STATE_SYNC_MOC = 0x008
};
/**
* PSEUDOSTATE_MOC
* 11 bits
*/
enum PSEUDOSTATE_MOC
{
PSEUDOSTATE_UNDEFINED_MOC = 0x000,
PSEUDOSTATE_INITIAL_MOC = 0x001,
PSEUDOSTATE_TERMINAL_MOC = 0x002,
PSEUDOSTATE_RETURN_MOC = 0x004,
FAMILY_PSEUDO_ENDING_MOC = PSEUDOSTATE_TERMINAL_MOC
| PSEUDOSTATE_RETURN_MOC,
PSEUDOSTATE_JUNCTION_MOC = 0x008,
PSEUDOSTATE_CHOICE_MOC = 0x010,
PSEUDOSTATE_ENTRY_POINT_MOC = 0x020,
PSEUDOSTATE_EXIT_POINT_MOC = 0x040,
FAMILY_PSEUDO_CONNECTION_POINT_MOC = PSEUDOSTATE_ENTRY_POINT_MOC
| PSEUDOSTATE_EXIT_POINT_MOC,
PSEUDOSTATE_FORK_MOC = 0x080,
PSEUDOSTATE_JOIN_MOC = 0x100,
PSEUDOSTATE_DEEP_HISTORY_MOC = 0x200,
PSEUDOSTATE_SHALLOW_HISTORY_MOC = 0x400,
FAMILY_PSEUDO_HISTORY_MOC = PSEUDOSTATE_DEEP_HISTORY_MOC
| PSEUDOSTATE_SHALLOW_HISTORY_MOC,
};
/**
* FEATURE_KIND
* 3 bits
*/
enum FEATURE_KIND
{
FEATURE_UNDEFINED_KIND = 0x000, // DEFAULT
FEATURE_TIMED_KIND = 0x001,
FEATURE_INPUT_ENABLED_KIND = 0x002,
FEATURE_LIFELINE_KIND = 0x004
};
/**
* DESIGN_KIND
* 5 bits
*/
enum DESIGN_KIND
{
DESIGN_UNDEFINED_KIND = 0x000, // UNUSED
// DESIGN_META_KIND = 0x000, // UNUSED
DESIGN_MODEL_KIND = 0x001,
DESIGN_INSTANCE_KIND = 0x002,
DESIGN_STATIC_KIND = 0x004,
DESIGN_DYNAMIC_KIND = 0x008,
DESIGN_RUNTIME_KIND = 0x010,
DESIGN_INSTANCE_STATIC_KIND = DESIGN_INSTANCE_KIND
| DESIGN_STATIC_KIND,
DESIGN_INSTANCE_DYNAMIC_KIND = DESIGN_INSTANCE_KIND
| DESIGN_DYNAMIC_KIND,
// DEFAULT
DESIGN_PROTOTYPE_STATIC_KIND = DESIGN_INSTANCE_STATIC_KIND
| DESIGN_MODEL_KIND,
DESIGN_PROTOTYPE_DYNAMIC_KIND = DESIGN_INSTANCE_DYNAMIC_KIND
| DESIGN_MODEL_KIND,
DESIGN_INSTANCE_RUNTIME_KIND = DESIGN_INSTANCE_KIND
| DESIGN_RUNTIME_KIND,
};
/**
* TYPEDEF
*/
typedef unsigned short bit_field_t;
/**
* BIT FIELDS
*/
bit_field_t component : 7;
bit_field_t computation : 6;
bit_field_t group : 3;
bit_field_t state : 4;
bit_field_t pseudostate : 11;
bit_field_t feature : 3;
bit_field_t design : 5;
/**
* ENABLING POSITION
*/
enum
{
FIELD_COMPONENT_POSITION = 0x001,
FIELD_COMPUTATION_POSITION = 0x002,
FIELD_GROUP_POSITION = 0x004,
FIELD_STATE_POSITION = 0x008,
FIELD_PSEUDOSTATE_POSITION = 0x010,
FIELD_FEATURE_POSITION = 0x020,
FIELD_DESIGN_POSITION = 0x040,
ENABLE_ALL_FIELDS = 0xFFF,
ENABLE_COMPONENT_DESIGN_FIELD = FIELD_COMPONENT_POSITION
| FIELD_DESIGN_POSITION,
DISABLE_COMPONENT_DESIGN_FIELD = (~ ENABLE_COMPONENT_DESIGN_FIELD),
ENABLE_FEATURE_DESIGN_FIELD = FIELD_FEATURE_POSITION
| FIELD_DESIGN_POSITION,
DISABLE_FEATURE_DESIGN_FIELD = (~ ENABLE_FEATURE_DESIGN_FIELD)
};
/**
* STATIC EXECUTABLE SPECIFIER
*/
static Specifier EXECUTABLE_UNDEFINED_SPECIFIER;
static Specifier COMPONENT_PACKAGE_SPECIFIER;
static Specifier COMPONENT_SYSTEM_SPECIFIER;
static Specifier COMPONENT_EXECUTABLE_SPECIFIER;
static Specifier COMPONENT_PROCEDURE_SPECIFIER;
static Specifier EXECUTABLE_PROCEDURE_COMPOSITE_SPECIFIER;
static Specifier EXECUTABLE_PROCEDURE_MODEL_SPECIFIER;
static Specifier EXECUTABLE_PROCEDURE_INSTANCE_STATIC_SPECIFIER;
/**
* EXECUTABLE DESIGN
*/
static Specifier DESIGN_MODEL_SPECIFIER;
static Specifier DESIGN_PROTOTYPE_STATIC_SPECIFIER;
static Specifier DESIGN_INSTANCE_STATIC_SPECIFIER;
static Specifier DESIGN_INSTANCE_DYNAMIC_SPECIFIER;
/**
* CONSTRUCTORS
*/
Specifier()
: component( COMPONENT_UNDEFINED_KIND ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(bit_field_t componentKind,
bit_field_t modelOfComputationKind, bit_field_t groupKind,
bit_field_t stateMoc, bit_field_t pseudostateMoc,
bit_field_t featureKind, bit_field_t designKind)
: component( componentKind ),
computation( modelOfComputationKind ),
group( groupKind ),
state( stateMoc ),
pseudostate( pseudostateMoc ),
feature( featureKind ),
design( designKind )
{
//!! NOTHING
}
Specifier(COMPONENT_KIND componentKind, MOC_KIND modelOfComputationKind)
: component( componentKind ),
computation( modelOfComputationKind ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(COMPONENT_KIND componentKind, DESIGN_KIND designKind)
: component( componentKind ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( designKind )
{
//!! NOTHING
}
Specifier(COMPONENT_KIND componentKind)
: component( componentKind ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate ( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(MOC_KIND modelOfComputationKind)
: component( COMPONENT_UNDEFINED_KIND ),
computation( modelOfComputationKind ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate ( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(GROUP_KIND groupKind)
: component( COMPONENT_UNDEFINED_KIND ),
computation( MOC_UNDEFINED_KIND ),
group( groupKind ),
state( STATE_UNDEFINED_MOC ),
pseudostate ( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(STATE_MOC stateMoc)
: component( COMPONENT_UNDEFINED_KIND ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( stateMoc ),
pseudostate ( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(PSEUDOSTATE_MOC pseudostateMoc)
: component( COMPONENT_UNDEFINED_KIND ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate ( pseudostateMoc ),
feature( FEATURE_UNDEFINED_KIND ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(FEATURE_KIND featureKind)
: component( COMPONENT_UNDEFINED_KIND ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate ( PSEUDOSTATE_UNDEFINED_MOC ),
feature( featureKind ),
design( DESIGN_UNDEFINED_KIND )
{
//!! NOTHING
}
Specifier(DESIGN_KIND designKind)
: component( COMPONENT_UNDEFINED_KIND ),
computation( MOC_UNDEFINED_KIND ),
group( GROUP_UNDEFINED_KIND ),
state( STATE_UNDEFINED_MOC ),
pseudostate ( PSEUDOSTATE_UNDEFINED_MOC ),
feature( FEATURE_UNDEFINED_KIND ),
design( designKind )
{
//!! NOTHING
}
/**
* DESTRUCTOR
*/
~Specifier()
{
//!! NOTHING
}
/**
* TESTER
*/
inline bool isDefined() const
{
return( (component != COMPONENT_UNDEFINED_KIND )
|| (computation != MOC_UNDEFINED_KIND )
|| (group != GROUP_UNDEFINED_KIND )
|| (state != STATE_UNDEFINED_MOC )
|| (pseudostate != PSEUDOSTATE_UNDEFINED_MOC)
|| (feature != FEATURE_UNDEFINED_KIND )
|| (design != DESIGN_UNDEFINED_KIND ) );
}
inline bool isDefined(bit_field_t enabledFields) const
{
return( (((enabledFields & FIELD_COMPONENT_POSITION ) != 0)
&& (component != COMPONENT_UNDEFINED_KIND ))
|| (((enabledFields & FIELD_COMPUTATION_POSITION) != 0)
&& (computation != MOC_UNDEFINED_KIND ))
|| (((enabledFields & FIELD_GROUP_POSITION ) != 0)
&& (group != GROUP_UNDEFINED_KIND ))
|| (((enabledFields & FIELD_STATE_POSITION ) != 0)
&& (state != STATE_UNDEFINED_MOC ))
|| (((enabledFields & FIELD_PSEUDOSTATE_POSITION) != 0)
&& (pseudostate != PSEUDOSTATE_UNDEFINED_MOC ))
|| (((enabledFields & FIELD_FEATURE_POSITION ) != 0)
&& (feature != FEATURE_UNDEFINED_KIND ))
|| (((enabledFields & FIELD_DESIGN_POSITION ) != 0)
&& (design != DESIGN_UNDEFINED_KIND )) );
}
inline bool isDefined_otherThan(const Specifier & other) const
{
return( ( (*this) & (~ other) ).isDefined() );
}
inline bool isUndefined() const
{
return( (component == COMPONENT_UNDEFINED_KIND )
&& (computation == MOC_UNDEFINED_KIND )
&& (group == GROUP_UNDEFINED_KIND )
&& (state == STATE_UNDEFINED_MOC )
&& (pseudostate == PSEUDOSTATE_UNDEFINED_MOC)
&& (feature == FEATURE_UNDEFINED_KIND )
&& (design == DESIGN_UNDEFINED_KIND ) );
}
/**
* SETTER
*/
Specifier & set(const std::string strSpecifier);
Specifier & setMoc(const std::string strSpecifier);
////////////////////////////////////////////////////////////////////////////
// OPERATOR =
////////////////////////////////////////////////////////////////////////////
inline Specifier & override_ifdef(const Specifier & other)
{
if( other.component != COMPONENT_UNDEFINED_KIND )
{
component = other.component;
}
if( other.computation != MOC_UNDEFINED_KIND )
{
computation = other.computation;
}
if( other.group != GROUP_UNDEFINED_KIND )
{
group = other.group;
}
if( other.state != STATE_UNDEFINED_MOC )
{
state = other.state;
}
if( other.pseudostate != PSEUDOSTATE_UNDEFINED_MOC )
{
pseudostate = other.pseudostate;
}
if( other.feature != FEATURE_UNDEFINED_KIND )
{
feature = other.feature;
}
if( other.design != DESIGN_UNDEFINED_KIND )
{
design = other.design;
}
return( *this );
}
inline Specifier & ifnot_define(const Specifier & other)
{
if( component == COMPONENT_UNDEFINED_KIND )
{
component = other.component;
}
if( (computation <= MOC_COMPOSITE_MASK_KIND)
&& (other.computation != MOC_UNDEFINED_KIND) )
{
computation = other.computation;
}
if( (group <= GROUP_MASK_KIND)
&& (other.group != GROUP_UNDEFINED_KIND) )
{
group = other.group;
}
if( state == STATE_UNDEFINED_MOC )
{
state = other.state;
}
if( pseudostate == PSEUDOSTATE_UNDEFINED_MOC )
{
pseudostate = other.pseudostate;
}
if( feature == FEATURE_UNDEFINED_KIND )
{
feature = other.feature;
}
if( design == DESIGN_UNDEFINED_KIND )
{
design = other.design;
}
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// OPERATOR &=
////////////////////////////////////////////////////////////////////////////
inline Specifier & operator&=(const Specifier & other)
{
component &= other.component;
computation &= other.computation;
group &= other.group;
state &= other.state;
pseudostate &= other.pseudostate;
feature &= other.feature;
design &= other.design;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// OPERATOR |=
////////////////////////////////////////////////////////////////////////////
inline Specifier & operator|=(const Specifier & other)
{
component |= other.component;
computation |= other.computation;
group |= other.group;
state |= other.state;
pseudostate |= other.pseudostate;
feature |= other.feature;
design |= other.design;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// OPERATOR == !=
////////////////////////////////////////////////////////////////////////////
inline bool operator==(const Specifier & other) const
{
return( (component == other.component )
&& (computation == other.computation )
&& (group == other.group )
&& (state == other.state )
&& (pseudostate == other.pseudostate)
&& (feature == other.feature )
&& (design == other.design ) );
}
inline bool operator!=(const Specifier & other) const
{
return( (component != other.component )
|| (computation != other.computation )
|| (group != other.group )
|| (state != other.state )
|| (pseudostate != other.pseudostate)
|| (feature != other.feature )
|| (design != other.design ) );
}
////////////////////////////////////////////////////////////////////////////
// OPERATOR |
////////////////////////////////////////////////////////////////////////////
inline Specifier operator|(const Specifier & other) const
{
return( Specifier(
component | other.component,
computation | other.computation,
group | other.group,
state | other.state,
pseudostate | other.pseudostate,
feature | other.feature,
design | other.design ) );
}
////////////////////////////////////////////////////////////////////////////
// OPERATOR &
////////////////////////////////////////////////////////////////////////////
inline Specifier operator&(const Specifier & other) const
{
return( Specifier(
component & other.component,
computation & other.computation,
group & other.group,
state & other.state,
pseudostate & other.pseudostate,
feature & other.feature,
design & other.design ) );
}
////////////////////////////////////////////////////////////////////////////
// OPERATOR &
////////////////////////////////////////////////////////////////////////////
inline Specifier operator~() const
{
return( Specifier(
(~ component),
(~ computation),
(~ group),
(~ state),
(~ pseudostate),
(~ feature),
(~ design) ) );
}
////////////////////////////////////////////////////////////////////////////
// COMPONENT KIND
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* component
*/
inline COMPONENT_KIND getComponentKind() const
{
return( static_cast< COMPONENT_KIND >( component ) );
}
inline bool hasComponentKind() const
{
return( component != COMPONENT_UNDEFINED_KIND );
}
inline bool noneComponentKind() const
{
return( component == COMPONENT_UNDEFINED_KIND );
}
inline bool isComponentKind(COMPONENT_KIND componentKind) const
{
return( component == componentKind );
}
inline Specifier & addComponentKind(COMPONENT_KIND componentKind)
{
component |= componentKind;
return( *this );
}
inline Specifier & remComponentKind(COMPONENT_KIND componentKind)
{
component &= (~ componentKind);
return( *this );
}
inline Specifier & setComponentKind(COMPONENT_KIND componentKind)
{
component = componentKind;
return( *this );
}
inline Specifier & unsetComponentKind()
{
component = COMPONENT_UNDEFINED_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "system" component
*/
inline bool isComponentSystem() const
{
return( component == COMPONENT_SYSTEM_KIND );
}
inline Specifier & setComponentSystem()
{
component = COMPONENT_SYSTEM_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "executable" component
*/
inline bool isComponentExecutable() const
{
return( component == COMPONENT_EXECUTABLE_KIND );
}
inline Specifier & setComponentExecutable()
{
component = COMPONENT_EXECUTABLE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "procedure" component
*/
inline bool isComponentProcedure() const
{
return( component == COMPONENT_PROCEDURE_KIND );
}
inline Specifier & setComponentProcedure()
{
component = COMPONENT_PROCEDURE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "routine" component
*/
inline bool isComponentRoutine() const
{
return( component == COMPONENT_ROUTINE_KIND );
}
inline Specifier & setComponentRoutine()
{
component = COMPONENT_ROUTINE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "statemachine" component
*/
inline bool isComponentStatemachine() const
{
return( component == COMPONENT_STATEMACHINE_KIND );
}
inline Specifier & setComponentStatemachine()
{
component = COMPONENT_STATEMACHINE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "state" component
*/
inline bool isComponentState() const
{
return( component == COMPONENT_STATE_KIND );
}
inline Specifier & setComponentState()
{
component = COMPONENT_STATE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "pseudostate" component
*/
inline bool isComponentPseudostate() const
{
return( component == COMPONENT_PSEUDOSTATE_KIND );
}
inline Specifier & setComponentPseudostate()
{
component = COMPONENT_PSEUDOSTATE_KIND;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// MODEL OF COMPUTATION
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* Model Of Computation
*/
inline MOC_KIND getModelOfComputation() const
{
return( static_cast< MOC_KIND >( computation ) );
}
inline bool hasModelOfComputation() const
{
return( computation != MOC_UNDEFINED_KIND );
}
inline bool isModelOfComputation(MOC_KIND modelOfComputationKind) const
{
return( computation == modelOfComputationKind );
}
inline Specifier & setModelOfComputation(MOC_KIND modelOfComputationKind)
{
computation = modelOfComputationKind;
return( *this );
}
inline Specifier & unsetModelOfComputation()
{
computation = MOC_UNDEFINED_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "composite" Model Of Computation
*/
inline bool hasMocComposite() const
{
return( (computation & MOC_COMPOSITE_MASK_KIND) != 0 );
}
inline bool noneMocComposite() const
{
return( computation == MOC_UNDEFINED_KIND );
}
inline Specifier & setMocComposite()
{
computation = MOC_COMPOSITE_MASK_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "AND" as composite structure MOC
*/
inline bool isMocCompositeStructure() const
{
return( computation == MOC_COMPOSITE_STRUCTURE_KIND );
}
inline Specifier & setMocCompositeStructure()
{
computation = MOC_COMPOSITE_STRUCTURE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "OR" as State Transition MOC
*/
inline bool isMocStateTransitionStructure() const
{
return( (computation & MOC_STATE_TRANSITION_STRUCTURE_KIND)
== MOC_STATE_TRANSITION_STRUCTURE_KIND );
}
/**
* GETTER - SETTER
* "OR" as State Transition System MOC
* has at least one state< simple >
*/
inline bool isMocStateTransitionSystem() const
{
return( computation == MOC_STATE_TRANSITION_SYSTEM_KIND );
}
inline Specifier & setMocStateTransitionSystem()
{
computation = MOC_STATE_TRANSITION_SYSTEM_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "OR" as State Transition Flow MOC
* has only pseudostate
*/
inline bool isMocStateTransitionFlow() const
{
return( computation == MOC_STATE_TRANSITION_FLOW_KIND );
}
inline Specifier & setMocStateTransitionFlow()
{
computation = MOC_STATE_TRANSITION_FLOW_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "FLOW" as DataFlow computation
*/
inline bool isCompositeMocDataFlow() const
{
return( computation == MOC_DATA_FLOW_KIND );
}
inline Specifier & setCompositeMocDataFlow()
{
computation = MOC_DATA_FLOW_KIND;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// GROUP KIND
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* group
*/
inline GROUP_KIND getGroupKind() const
{
return( static_cast< GROUP_KIND >( group ) );
}
inline bool hasGroupKind() const
{
return( group != GROUP_UNDEFINED_KIND );
}
inline bool isGroupKind(GROUP_KIND groupKind) const
{
return( group == groupKind );
}
inline Specifier & setGroupKind(GROUP_KIND groupKind)
{
group = groupKind;
return( *this );
}
inline Specifier & unsetGroupKind()
{
group = GROUP_UNDEFINED_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "group"
*/
inline bool hasGroupMask() const
{
return( (group & GROUP_MASK_KIND) != 0 );
}
inline Specifier & setGroupMasK()
{
group = GROUP_MASK_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "some" group
*/
inline bool isGroupSome() const
{
return( group == GROUP_SOME_KIND );
}
inline Specifier & setGroupSome()
{
group = GROUP_SOME_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "except" group
*/
inline bool isGroupExcept() const
{
return( group == GROUP_EXCEPT_KIND );
}
inline Specifier & setGroupExcept()
{
group = GROUP_EXCEPT_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "every" group
*/
inline bool isGroupEvery() const
{
return( group == GROUP_EVERY_KIND );
}
inline Specifier & setGroupEvery()
{
group = GROUP_EVERY_KIND;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// STATE MOC
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* state
*/
inline STATE_MOC getStateMoc() const
{
return( static_cast< STATE_MOC >( state ) );
}
inline bool hasStateMoc() const
{
return( state != STATE_UNDEFINED_MOC );
}
inline bool noneStateMoc() const
{
return( state == STATE_UNDEFINED_MOC );
}
inline bool isStateMoc(STATE_MOC stateMoc) const
{
return( state == stateMoc );
}
inline Specifier & addStateMoc(STATE_MOC stateMoc)
{
state |= stateMoc;
return( *this );
}
inline Specifier & remStateMoc(STATE_MOC stateMoc)
{
state &= (~ stateMoc);
return( *this );
}
inline Specifier & setStateMoc(STATE_MOC stateMoc)
{
state = stateMoc;
return( *this );
}
inline Specifier & unsetStateMoc()
{
state = STATE_UNDEFINED_MOC;
return( *this );
}
/**
* MIX-IN with component "state"
*/
inline bool isState() const
{
return( isComponentState() && hasStateMoc() );
}
/**
* GETTER - SETTER
* "SIMPLE" state
*/
inline bool isStateMocSIMPLE() const
{
return( state == STATE_SIMPLE_MOC );
}
inline Specifier & setStateMocSIMPLE()
{
state = STATE_SIMPLE_MOC;
return( *this );
}
/**
* MIX-IN with component "state"
*/
inline bool isStateSimple() const
{
return( isComponentState() && isStateMocSIMPLE() );
}
inline Specifier & setStateSimple()
{
setComponentState();
setStateMocSIMPLE();
return( *this );
}
/**
* GETTER - SETTER
* "START" state
*/
inline bool isStateMocSTART() const
{
return( state == STATE_START_MOC );
}
inline bool hasStateMocSTART() const
{
return( (state & STATE_START_MOC) != 0 );
}
inline Specifier & addStateMocSTART()
{
state |= STATE_START_MOC;
return( *this );
}
inline Specifier & setStateMocSTART()
{
state = STATE_START_MOC;
return( *this );
}
/**
* MIX-IN with component "state"
*/
inline bool isStateStart() const
{
return( isComponentState() && isStateMocSTART() );
}
inline Specifier & setStateStart()
{
setComponentState();
setStateMocSTART();
return( *this );
}
/**
* GETTER - SETTER
* "FINAL" state
*/
inline bool isStateMocFINAL() const
{
return( state == STATE_FINAL_MOC );
}
inline bool hasStateMocFINAL() const
{
return( (state & STATE_FINAL_MOC) != 0 );
}
inline Specifier & addStateMocFINAL()
{
state |= STATE_FINAL_MOC;
return( *this );
}
inline Specifier & setStateMocFINAL()
{
state = STATE_FINAL_MOC;
return( *this );
}
/**
* MIX-IN with component "state"
*/
inline bool isStateFinal() const
{
return( isComponentState() && isStateMocFINAL() );
}
inline Specifier & setStateFinal()
{
setComponentState();
setStateMocFINAL();
return( *this );
}
/**
* GETTER - SETTER
* "SYNC" state
*/
inline bool isStateMocSYNC() const
{
return( state == STATE_SYNC_MOC );
}
inline Specifier & setStateMocSYNC()
{
state = STATE_SYNC_MOC;
return( *this );
}
/**
* MIX-IN with component "state"
*/
inline bool isStateSync() const
{
return( isComponentState() && isStateMocSYNC() );
}
inline Specifier & setStateSync()
{
setComponentState();
setStateMocSYNC();
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// PSEUDOSTATE MOC
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* pseudostate
*/
inline PSEUDOSTATE_MOC getPseudostateMoc() const
{
return( static_cast< PSEUDOSTATE_MOC >( pseudostate ) );
}
inline bool hasPseudostateMoc() const
{
return( pseudostate != PSEUDOSTATE_UNDEFINED_MOC );
}
inline bool nonePseudostateMoc() const
{
return( pseudostate == PSEUDOSTATE_UNDEFINED_MOC );
}
inline bool isPseudostateMoc(PSEUDOSTATE_MOC pseudostateMoc) const
{
return( pseudostate == pseudostateMoc );
}
inline Specifier & addPseudostateMoc(PSEUDOSTATE_MOC pseudostateMoc)
{
pseudostate |= pseudostateMoc;
return( *this );
}
inline Specifier & remPseudostateMoc(PSEUDOSTATE_MOC pseudostateMoc)
{
pseudostate &= (~ pseudostateMoc);
return( *this );
}
inline Specifier & setPseudostateMoc(PSEUDOSTATE_MOC pseudostateMoc)
{
pseudostate = pseudostateMoc;
return( *this );
}
inline Specifier & unsetPseudostateMoc()
{
pseudostate = PSEUDOSTATE_UNDEFINED_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostate() const
{
return( isComponentPseudostate() && hasPseudostateMoc() );
}
/**
* GETTER - SETTER
* "INITIAL" pseudostate
*/
inline bool isPseudostateMocINITIAL() const
{
return( pseudostate == PSEUDOSTATE_INITIAL_MOC );
}
inline bool hasPseudostateMocINITIAL() const
{
return( (pseudostate & PSEUDOSTATE_INITIAL_MOC) != 0 );
}
inline Specifier & addPseudostateMocINITIAL()
{
pseudostate |= PSEUDOSTATE_INITIAL_MOC;
return( *this );
}
inline Specifier & setPseudostateMocINITIAL()
{
pseudostate = PSEUDOSTATE_INITIAL_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateInitial() const
{
return( isComponentPseudostate() && isPseudostateMocINITIAL() );
}
inline Specifier & setPseudostateInitial()
{
setComponentPseudostate();
setPseudostateMocINITIAL();
return( *this );
}
/**
* GETTER - SETTER
* "TERMINAL" pseudostate
*/
inline bool isPseudostateMocTERMINAL() const
{
return( pseudostate == PSEUDOSTATE_TERMINAL_MOC );
}
inline bool hasPseudostateMocTERMINAL() const
{
return( (pseudostate & PSEUDOSTATE_TERMINAL_MOC) != 0 );
}
inline Specifier & addPseudostateMocTERMINAL()
{
pseudostate |= PSEUDOSTATE_TERMINAL_MOC;
return( *this );
}
inline Specifier & setPseudostateMocTERMINAL()
{
pseudostate = PSEUDOSTATE_TERMINAL_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateTerminal() const
{
return( isComponentPseudostate() && isPseudostateMocTERMINAL() );
}
inline Specifier & setPseudostateTerminal()
{
setComponentPseudostate();
setPseudostateMocTERMINAL();
return( *this );
}
/**
* GETTER - SETTER
* "RETURN" pseudostate
*/
inline bool isPseudostateMocRETURN() const
{
return( pseudostate == PSEUDOSTATE_RETURN_MOC );
}
inline bool hasPseudostateMocRETURN() const
{
return( (pseudostate & PSEUDOSTATE_RETURN_MOC) != 0 );
}
inline Specifier & addPseudostateMocRETURN()
{
pseudostate |= PSEUDOSTATE_RETURN_MOC;
return( *this );
}
inline Specifier & setPseudostateMocRETURN()
{
pseudostate = PSEUDOSTATE_RETURN_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateReturn() const
{
return( isComponentPseudostate() && isPseudostateMocRETURN() );
}
inline Specifier & setPseudostateReturn()
{
setComponentPseudostate();
setPseudostateMocRETURN();
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool hasFamilyPseudostateENDING() const
{
return( (pseudostate & FAMILY_PSEUDO_ENDING_MOC) != 0 );
}
inline bool hasFamilyPseudostateEnding() const
{
return( isComponentPseudostate() && hasFamilyPseudostateENDING() );
}
/**
* GETTER - SETTER
* "JUNCTION" pseudostate
*/
inline bool isPseudostateMocJUNCTION() const
{
return( pseudostate == PSEUDOSTATE_JUNCTION_MOC );
}
inline Specifier & setPseudostateMocJUNCTION()
{
pseudostate = PSEUDOSTATE_JUNCTION_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateJunction() const
{
return( isComponentPseudostate() && isPseudostateMocJUNCTION() );
}
inline Specifier & setPseudostateJunction()
{
setComponentPseudostate();
setPseudostateMocJUNCTION();
return( *this );
}
/**
* GETTER - SETTER
* "CHOICE" pseudostate
*/
inline bool isPseudostateMocCHOICE() const
{
return( pseudostate == PSEUDOSTATE_CHOICE_MOC );
}
inline Specifier & setPseudostateMocCHOICE()
{
pseudostate = PSEUDOSTATE_CHOICE_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateChoice() const
{
return( isComponentPseudostate() && isPseudostateMocCHOICE() );
}
inline Specifier & setPseudostateChoice()
{
setComponentPseudostate();
setPseudostateMocCHOICE();
return( *this );
}
/**
* GETTER - SETTER
* "ENTRY_POINT" pseudostate
*/
inline bool isPseudostateMocENTRY_POINT() const
{
return( pseudostate == PSEUDOSTATE_ENTRY_POINT_MOC );
}
inline Specifier & setPseudostateMocENTRY_POINT()
{
pseudostate = PSEUDOSTATE_ENTRY_POINT_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateEntryPoint() const
{
return( isComponentPseudostate() && isPseudostateMocENTRY_POINT() );
}
inline Specifier & setPseudostateEntryPoint()
{
setComponentPseudostate();
setPseudostateMocENTRY_POINT();
return( *this );
}
/**
* GETTER - SETTER
* "EXIT_POINT" pseudostate
*/
inline bool isPseudostateMocEXIT_POINT() const
{
return( pseudostate == PSEUDOSTATE_EXIT_POINT_MOC );
}
inline Specifier & setPseudostateMocEXIT_POINT()
{
pseudostate = PSEUDOSTATE_EXIT_POINT_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateExitPoint() const
{
return( isComponentPseudostate() && isPseudostateMocEXIT_POINT() );
}
inline Specifier & setPseudostateExitPoint()
{
setComponentPseudostate();
setPseudostateMocEXIT_POINT();
return( *this );
}
/**
* GETTER - SETTER
* "CONECTION POINT" pseudostate
*/
inline bool hasPseudostateMocConnectionPoint() const
{
return( (pseudostate & FAMILY_PSEUDO_CONNECTION_POINT_MOC) != 0 );
}
/**
* GETTER - SETTER
* "FORK" pseudostate
*/
inline bool isPseudostateMocFORK() const
{
return( pseudostate == PSEUDOSTATE_FORK_MOC );
}
inline Specifier & setPseudostateMocFORK()
{
pseudostate = PSEUDOSTATE_FORK_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateFork() const
{
return( isComponentPseudostate() && isPseudostateMocFORK() );
}
inline Specifier & setPseudostateFork()
{
setComponentPseudostate();
setPseudostateMocFORK();
return( *this );
}
/**
* GETTER - SETTER
* "JOIN" pseudostate
*/
inline bool isPseudostateMocJOIN() const
{
return( pseudostate == PSEUDOSTATE_JOIN_MOC );
}
inline Specifier & setPseudostateMocJOIN()
{
pseudostate = PSEUDOSTATE_JOIN_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateJoin() const
{
return( isComponentPseudostate() && isPseudostateMocJOIN() );
}
inline Specifier & setPseudostateJoin()
{
setComponentPseudostate();
setPseudostateMocJOIN();
return( *this );
}
/**
* GETTER - SETTER
* "DHISTORY" pseudostate
*/
inline bool isPseudostateMocDEEP_HISTORY() const
{
return( pseudostate == PSEUDOSTATE_DEEP_HISTORY_MOC );
}
inline bool hasPseudostateMocDEEP_HISTORY() const
{
return( (pseudostate & PSEUDOSTATE_DEEP_HISTORY_MOC) != 0 );
}
inline Specifier & addPseudostateMocDEEP_HISTORY()
{
pseudostate |= PSEUDOSTATE_DEEP_HISTORY_MOC;
return( *this );
}
inline Specifier & setPseudostateMocDEEP_HISTORY()
{
pseudostate = PSEUDOSTATE_DEEP_HISTORY_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateDeepHistory() const
{
return( isComponentPseudostate() && isPseudostateMocDEEP_HISTORY() );
}
inline Specifier & setPseudostateDeepHistory()
{
setComponentPseudostate();
setPseudostateMocDEEP_HISTORY();
return( *this );
}
/**
* GETTER - SETTER
* "SHISTORY" pseudostate
*/
inline bool isPseudostateMocSHALLOW_HISTORY() const
{
return( pseudostate == PSEUDOSTATE_SHALLOW_HISTORY_MOC );
}
inline bool hasPseudostateMocSHALLOW_HISTORY() const
{
return( (pseudostate & PSEUDOSTATE_SHALLOW_HISTORY_MOC) != 0 );
}
inline Specifier & addPseudostateMocSHALLOW_HISTORY()
{
pseudostate |= PSEUDOSTATE_SHALLOW_HISTORY_MOC;
return( *this );
}
inline Specifier & setPseudostateMocSHALLOW_HISTORY()
{
pseudostate = PSEUDOSTATE_SHALLOW_HISTORY_MOC;
return( *this );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool isPseudostateShallowHistory() const
{
return( isComponentPseudostate() && isPseudostateMocSHALLOW_HISTORY() );
}
inline Specifier & setPseudostateShallowHistory()
{
setComponentPseudostate();
setPseudostateMocSHALLOW_HISTORY();
return( *this );
}
/**
* GETTER - SETTER
* "HISTORY" pseudostate
*/
inline bool hasPseudostateMocHISTORY() const
{
return( (pseudostate & FAMILY_PSEUDO_HISTORY_MOC) != 0 );
}
/**
* MIX-IN with component "pseudostate"
*/
inline bool hasPseudostateHistory() const
{
return( isComponentPseudostate() && hasPseudostateMocHISTORY() );
}
////////////////////////////////////////////////////////////////////////////
// FEATURE KIND
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* feature
*/
inline FEATURE_KIND getFeatureKind() const
{
return( static_cast< FEATURE_KIND >( feature ) );
}
inline bool hasFeatureKind() const
{
return( feature != FEATURE_UNDEFINED_KIND );
}
inline bool hasFeatureKind(FEATURE_KIND designKind) const
{
return( (feature & designKind) != 0 );
}
inline bool isFeatureKind(FEATURE_KIND designKind) const
{
return( feature == designKind );
}
inline Specifier & setFeatureKind(FEATURE_KIND designKind)
{
feature = designKind;
return( *this );
}
inline Specifier & addFeatureKind(FEATURE_KIND designKind)
{
feature |= designKind;
return( *this );
}
inline Specifier & remFeatureKind(FEATURE_KIND designKind)
{
feature &= (~ designKind);
return( *this );
}
inline Specifier & unsetFeatureKind()
{
feature = FEATURE_UNDEFINED_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "timed" feature
*/
inline bool hasFeatureTimed() const
{
return( (feature & FEATURE_TIMED_KIND) != 0 );
}
inline bool noFeatureTimed() const
{
return( (feature & FEATURE_TIMED_KIND) == 0 );
}
inline Specifier & remFeatureTimed()
{
feature &= (~ FEATURE_TIMED_KIND);
return( *this );
}
inline Specifier & setFeatureTimed()
{
feature |= FEATURE_TIMED_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "input_enabled" feature
*/
inline bool hasFeatureInputEnabled() const
{
return( (feature & FEATURE_INPUT_ENABLED_KIND) != 0 );
}
inline bool noFeatureInputEnabled() const
{
return( (feature & FEATURE_INPUT_ENABLED_KIND) == 0 );
}
inline Specifier & remFeatureInputEnabled()
{
feature &= (~ FEATURE_INPUT_ENABLED_KIND);
return( *this );
}
inline Specifier & setFeatureInputEnabled()
{
feature |= FEATURE_INPUT_ENABLED_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "input_enabled" feature
*/
inline bool hasFeatureLifeline() const
{
return( (feature & FEATURE_LIFELINE_KIND) != 0 );
}
inline bool noFeatureLifeline() const
{
return( (feature & FEATURE_LIFELINE_KIND) == 0 );
}
inline Specifier & remFeatureLifeline()
{
feature &= (~ FEATURE_LIFELINE_KIND);
return( *this );
}
inline Specifier & setFeatureLifeline()
{
feature |= FEATURE_LIFELINE_KIND;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// DESIGN KIND
////////////////////////////////////////////////////////////////////////////
/**
* GETTER - SETTER
* design
*/
inline DESIGN_KIND getDesignKind() const
{
return( static_cast< DESIGN_KIND >( design ) );
}
inline bool hasDesignKind() const
{
return( design != DESIGN_UNDEFINED_KIND );
}
inline bool noneDesignKind() const
{
return( design == DESIGN_UNDEFINED_KIND );
}
inline bool hasDesignKind(DESIGN_KIND designKind) const
{
return( (design & designKind) != 0 );
}
inline bool isDesignKind(DESIGN_KIND designKind) const
{
return( design == designKind );
}
inline Specifier & setDesignKind(DESIGN_KIND designKind)
{
design = designKind;
return( *this );
}
inline Specifier & addDesignKind(DESIGN_KIND designKind)
{
design |= designKind;
return( *this );
}
inline Specifier & remDesignKind(DESIGN_KIND designKind)
{
design &= (~ designKind);
return( *this );
}
inline Specifier & unsetDesignKind()
{
design = DESIGN_UNDEFINED_KIND;
return( *this );
}
static DESIGN_KIND toDesignKind(const std::string & strDesign);
/**
* GETTER - SETTER
* "#model" design
*/
inline bool isDesignModel() const
{
return(design == DESIGN_MODEL_KIND );
}
inline bool hasDesignModel() const
{
return( (design & DESIGN_MODEL_KIND) != 0 );
}
inline Specifier & setDesignModel()
{
design = DESIGN_MODEL_KIND;
return( *this );
}
inline Specifier & addDesignModel()
{
design |= DESIGN_MODEL_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "#instance" design
*/
inline bool isDesignInstance() const
{
return(design == DESIGN_INSTANCE_KIND );
}
inline bool hasDesignInstance() const
{
return( (design & DESIGN_INSTANCE_KIND) != 0 );
}
inline Specifier & setDesignInstance()
{
design = DESIGN_INSTANCE_KIND;
return( *this );
}
inline Specifier & addDesignInstance()
{
design |= DESIGN_INSTANCE_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "#static" design
*/
inline bool isDesignStatic() const
{
return(design == DESIGN_STATIC_KIND );
}
inline bool hasDesignStatic() const
{
return( (design & DESIGN_STATIC_KIND) != 0 );
}
inline Specifier & setDesignStatic()
{
design = DESIGN_STATIC_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "#static instance" design
*/
inline bool isDesignInstanceStatic() const
{
return(design == DESIGN_INSTANCE_STATIC_KIND );
}
inline bool hasDesignInstanceStatic() const
{
return( (design & DESIGN_INSTANCE_STATIC_KIND) ==
DESIGN_INSTANCE_STATIC_KIND );
}
inline Specifier & setDesignInstanceStatic()
{
design = DESIGN_INSTANCE_STATIC_KIND;
return( *this );
}
inline Specifier & addDesignInstanceStatic()
{
design |= DESIGN_INSTANCE_STATIC_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "#static prototype" design
*/
inline bool isDesignPrototypeStatic() const
{
return(design == DESIGN_PROTOTYPE_STATIC_KIND );
}
inline Specifier & setDesignPrototypeStatic()
{
design = DESIGN_PROTOTYPE_STATIC_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "dynamic" design
*/
inline bool isDesignDynamic() const
{
return(design == DESIGN_DYNAMIC_KIND );
}
inline bool hasDesignDynamic() const
{
return( (design & DESIGN_DYNAMIC_KIND) != 0 );
}
inline Specifier & setDesignDynamic()
{
design = DESIGN_DYNAMIC_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "#dynamic instance" design
*/
inline bool isDesignInstanceDynamic() const
{
return(design == DESIGN_INSTANCE_DYNAMIC_KIND );
}
inline bool hasDesignInstanceDynamic() const
{
return( (design & DESIGN_INSTANCE_DYNAMIC_KIND) ==
DESIGN_INSTANCE_DYNAMIC_KIND );
}
inline Specifier & setDesignInstanceDynamic()
{
design = DESIGN_INSTANCE_DYNAMIC_KIND;
return( *this );
}
/**
* GETTER - SETTER
* "instance [ dynamic ]" design
*/
inline bool hasDesignInstanceNotModel() const
{
return( ((design & DESIGN_INSTANCE_KIND) != 0)
&& ((design & DESIGN_MODEL_KIND) == 0) );
}
/**
* GETTER - SETTER
* "runtime" design
*/
inline bool isDesignRuntime() const
{
return(design == DESIGN_RUNTIME_KIND );
}
inline Specifier & setDesignRuntime()
{
design = DESIGN_RUNTIME_KIND;
return( *this );
}
////////////////////////////////////////////////////////////////////////////
// MIX-IN MODIFIER
////////////////////////////////////////////////////////////////////////////
inline bool isFamilyComponentComposite() const
{
return( hasMocComposite()
|| ( (component & FAMILY_COMPONENT_COMPOSITE_KIND) != 0) );
}
inline bool isFamilyComponentState() const
{
return( (component & FAMILY_COMPONENT_STATE_KIND) != 0 );
}
inline bool isFamilyComponentStatemachine() const
{
return( ( (component & FAMILY_COMPONENT_STATEMACHINE_KIND) != 0)
|| isMocStateTransitionStructure() );
}
inline bool isStateBasic() const
{
return( noneMocComposite() && (isState() || isPseudostate()) );
}
inline bool isStateComposite() const
{
return( hasMocComposite() && isState() );
}
inline bool isPseudostateInitialOrStateStart() const
{
return( isPseudostateInitial() || isStateStart() );
}
inline bool hasMocINITIAL_START() const
{
return( hasPseudostateMocINITIAL() || hasStateMocSTART() );
}
inline bool couldBeStateMocSIMPLE() const
{
return( noneStateMoc() && nonePseudostateMoc() && noneMocComposite() );
}
/**
* COMPONENT KIND to STRING
*/
inline std::string keywordComponent() const
{
return( Specifier::keywordComponent( component ) );
}
static std::string keywordComponent(bit_field_t componentKind);
inline std::string strComponent(const std::string & separator = " ") const
{
return( Specifier::strComponent( component , separator ) );
}
static std::string strComponent(bit_field_t componentKind,
const std::string & separator = " ");
static std::string xstrComponent(bit_field_t direction,
const std::string & separator = " ");
/**
* COMPOSITE MOC to STRING
*/
inline std::string strModelOfComputation(
const std::string & separator = " ") const
{
return( Specifier::strModelOfComputation( computation , separator ) );
}
static std::string strModelOfComputation(
bit_field_t modelOfComputationKind,
const std::string & separator = " ");
/**
* GROUP KIND to STRING
*/
inline std::string strGroup(const std::string & separator = " ") const
{
return( Specifier::strGroup( group , separator ) );
}
static std::string strGroup(bit_field_t groupKind,
const std::string & separator = " ");
/**
* STATE MOC to STRING
*/
inline std::string strStateMoc(const std::string & separator = " ") const
{
return( Specifier::strStateMoc( state , separator ) );
}
static std::string strStateMoc(bit_field_t stateMoc,
const std::string & separator = " ");
static std::string xstrStateMoc(bit_field_t stateMoc,
const std::string & separator = " ");
/**
* PSEUDOSTATE MOC to STRING
*/
inline std::string strPseudostateMoc(
const std::string & separator = " ") const
{
return( Specifier::strPseudostateMoc( pseudostate , separator ) );
}
static std::string strPseudostateMoc(bit_field_t pseudostateMoc,
const std::string & separator = " ");
static std::string xstrPseudostateMoc(bit_field_t pseudostateMoc,
const std::string & separator = " ");
/**
* ANY-STATE MOC to STRING
*/
inline std::string strAnyStateMoc(
const std::string & separator = " ") const
{
if( pseudostate != PSEUDOSTATE_UNDEFINED_MOC )
{
return( Specifier::strPseudostateMoc( pseudostate , separator ) );
}
else if( state != STATE_UNDEFINED_MOC )
{
return( Specifier::strStateMoc( pseudostate , separator ) );
}
else if( computation != MOC_UNDEFINED_KIND )
{
return( Specifier::strModelOfComputation( computation , separator ) );
}
else
{
return( "<any:state:undef>" );
}
}
/**
* FEATURE KIND to STRING
*/
inline std::string strFeature(const std::string & separator = " ") const
{
return( Specifier::strFeature( feature , separator ) );
}
static std::string strFeature(bit_field_t featureKind,
const std::string & separator = " ");
/**
* DESIGN KIND to STRING
*/
inline std::string strDesign(const std::string & separator = " ") const
{
return( Specifier::strDesign( design , separator ) );
}
std::string strDesign_not(DESIGN_KIND designKind,
const std::string & separator = " ") const;
static std::string strDesign(bit_field_t designKind,
const std::string & separator = " ");
static std::string xstrDesign(bit_field_t designKind,
const std::string & separator = " ");
/**
* Serialization
*/
static std::string SEPARATOR;
inline std::string str(bit_field_t enabledFields,
const std::string & separator = SEPARATOR) const
{
return( StringTools::removeLastIfEndsWith(
toString(enabledFields, separator ), separator) );
}
inline std::string str(const std::string & separator = SEPARATOR) const
{
return( StringTools::removeLastIfEndsWith(
toString(ENABLE_ALL_FIELDS, separator ), separator) );
}
inline std::string str_otherThan(
Specifier::COMPONENT_KIND componentKing,
const std::string & separator = SEPARATOR) const
{
Specifier xSpecifier( *this );
xSpecifier.remComponentKind( componentKing );
return( StringTools::removeLastIfEndsWith(
xSpecifier.toString( separator ), separator) );
}
inline std::string str_otherThan(
Specifier::COMPONENT_KIND componentKing,
Specifier::STATE_MOC stateMoc,
const std::string & separator = SEPARATOR) const
{
Specifier xSpecifier( *this );
xSpecifier.remComponentKind( componentKing );
xSpecifier.remStateMoc( stateMoc );
return( StringTools::removeLastIfEndsWith(
xSpecifier.toString( separator ), separator) );
}
std::string toString(bit_field_t enabledFields = ENABLE_ALL_FIELDS,
const std::string & separator = " ") const;
inline std::string toString(const std::string & separator) const
{
return( toString( ENABLE_ALL_FIELDS , separator) );
}
std::string toString_not(DESIGN_KIND designKind,
const std::string & separator = " ") const
{
return( Specifier::strComponent( component , separator ) +
Specifier::strModelOfComputation( computation , separator ) +
Specifier::strGroup ( group , separator ) +
Specifier::strStateMoc( state , separator ) +
Specifier::strPseudostateMoc( pseudostate , separator ) +
Specifier::strFeature( feature , separator ) +
Specifier::strDesign_not( designKind , separator) );
}
};
class SpecifierImpl
{
protected:
/**
* ATTRIBUTES
*/
Specifier mSpecifier;
public:
/**
* CONSTRUCTOR
*/
SpecifierImpl()
: mSpecifier( )
{
//!! NOTHING
}
SpecifierImpl(const Specifier & aSpecifier)
: mSpecifier( aSpecifier )
{
//!! NOTHING
}
SpecifierImpl(const SpecifierImpl & aCopy)
: mSpecifier( aCopy.mSpecifier )
{
//!! NOTHING
}
SpecifierImpl(const SpecifierImpl * aCopy)
: mSpecifier( (aCopy != NULL) ?
aCopy->getSpecifier() : Specifier::EXECUTABLE_UNDEFINED_SPECIFIER )
{
//!! NOTHING
}
/**
* DESTRUCTOR
*/
~SpecifierImpl()
{
//!! NOTHING
}
/**
* GETTER
* mSpecifier
*/
inline const Specifier & getSpecifier() const
{
return( mSpecifier );
}
inline Specifier & getwSpecifier()
{
return( mSpecifier );
}
inline bool hasSpecifier() const
{
return( mSpecifier.isDefined() );
}
inline bool hasSpecifier_otherThan(const Specifier & aSpecifier) const
{
return( mSpecifier.isDefined_otherThan( aSpecifier ) );
}
inline void setSpecifier(const Specifier & xSpecifier)
{
mSpecifier = xSpecifier;
}
};
} /* namespace sep */
#endif /* FML_COMMON_SPECIFIERELEMENT_H_ */