// cpp (meta datanetwork format) source file SFC.cpp
// generated from diagram SFC
// generated on Wed Dec 17 10:42:53 2008

#include "SFC.h"
#include <UmlExt.h>
#include <UdmStatic.h>

#include <UdmDom.h>
#include "SFC_xsd.h"

namespace SFC {

	::Uml::Class SetState::meta;

	::Uml::Class CheckState::meta;

	::Uml::Class CheckArg::meta;
	::Uml::AssociationRole CheckArg::meta_slab_end_;
	::Uml::AssociationRole CheckArg::meta_arg_end_;

	template <> const ::Uml::AssociationRole& CheckArg::_type2ARole< CheckArg::ACE_slab >() const { return meta_slab_end_; }
	template <> const ::Uml::AssociationRole& CheckArg::_type2ARole< CheckArg::ACE_arg >() const { return meta_arg_end_; }

	::Uml::Class StateRel::meta;
	::Uml::Attribute StateRel::meta_invert;
	::Uml::Attribute StateRel::meta_andState;
	::Uml::AssociationRole StateRel::meta_index;
	::Uml::AssociationRole StateRel::meta_svar;
	::Uml::AssociationRole StateRel::meta_value;

	template <> const ::Uml::AssociationRole& StateRel::_type2ARole< StateRel::AR_index >() const { return meta_index; }
	template <> const ::Uml::AssociationRole& StateRel::_type2ARole< StateRel::AR_svar >() const { return meta_svar; }
	template <> const ::Uml::AssociationRole& StateRel::_type2ARole< StateRel::AR_value >() const { return meta_value; }

	::Uml::Class Var::meta;
	::Uml::Attribute Var::meta_name;
	::Uml::Attribute Var::meta_type;
	::Uml::Attribute Var::meta_size;

	::Uml::Class ArgVal::meta;
	::Uml::Attribute ArgVal::meta_argIndex;
	::Uml::Attribute ArgVal::meta_val;
	::Uml::AssociationRole ArgVal::meta_arg;
	::Uml::CompositionChildRole ArgVal::meta_argexpr;
	::Uml::CompositionParentRole ArgVal::meta_FunctionCall_parent;

	template <> const ::Uml::AssociationRole& ArgVal::_type2ARole< ArgVal::AR_arg >() const { return meta_arg; }
	template <> const ::Uml::CompositionChildRole& ArgVal::_type2CCRole< ArgVal::CR_argexpr >() const { return meta_argexpr; }
	template <> const ::Uml::CompositionParentRole& ArgVal::_type2CPRole< ArgVal::PR_FunctionCall_parent >() const { return meta_FunctionCall_parent; }

	::Uml::Class FunctionCall::meta;
	::Uml::Attribute FunctionCall::meta_libFuncName;
	::Uml::Attribute FunctionCall::meta_argCount;
	::Uml::AssociationRole FunctionCall::meta_callee;
	::Uml::CompositionChildRole FunctionCall::meta_ArgVal_children;

	template <> const ::Uml::AssociationRole& FunctionCall::_type2ARole< FunctionCall::AR_callee >() const { return meta_callee; }
	template <> const ::Uml::CompositionChildRole& FunctionCall::_type2CCRole< FunctionCall::CR_ArgVal_children >() const { return meta_ArgVal_children; }

	::Uml::Class StateLabel::meta;
	::Uml::Attribute StateLabel::meta_name;
	::Uml::Attribute StateLabel::meta_comment;
	::Uml::Attribute StateLabel::meta_value;
	::Uml::Attribute StateLabel::meta_andSS;
	::Uml::AssociationRole StateLabel::meta_sri;
	::Uml::AssociationRole StateLabel::meta_srv;
	::Uml::AssociationRole StateLabel::meta_arg;
	::Uml::AssociationRole StateLabel::meta_arg_rev;

	template <> const ::Uml::AssociationRole& StateLabel::_type2ARole< StateLabel::AR_sri >() const { return meta_sri; }
	template <> const ::Uml::AssociationRole& StateLabel::_type2ARole< StateLabel::AR_srv >() const { return meta_srv; }
	template <> const pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> StateLabel::_type2ACARole< StateLabel::AR_arg >() const { return make_pair(&meta_arg, &meta_arg_rev); }

	::Uml::Class StateVar::meta;
	::Uml::AssociationRole StateVar::meta_srs;

	template <> const ::Uml::AssociationRole& StateVar::_type2ARole< StateVar::AR_srs >() const { return meta_srs; }

	::Uml::Class LocalVar::meta;
	::Uml::Attribute LocalVar::meta_initial;
	::Uml::Attribute LocalVar::meta_scope;
	::Uml::AssociationRole LocalVar::meta_arg;
	::Uml::AssociationRole LocalVar::meta_arg_rev;

	template <> const pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> LocalVar::_type2ACARole< LocalVar::AR_arg >() const { return make_pair(&meta_arg, &meta_arg_rev); }

	::Uml::Class IterativeBlock::meta;
	::Uml::CompositionChildRole IterativeBlock::meta_cond;

	template <> const ::Uml::CompositionChildRole& IterativeBlock::_type2CCRole< IterativeBlock::CR_cond >() const { return meta_cond; }

	::Uml::Class ConditionalGroup::meta;

	::Uml::Class OperationalStatement::meta;

	::Uml::Class Block::meta;

	::Uml::Class UserCode::meta;
	::Uml::Attribute UserCode::meta_expr;
	::Uml::CompositionChildRole UserCode::meta_codeexpr;

	template <> const ::Uml::CompositionChildRole& UserCode::_type2CCRole< UserCode::CR_codeexpr >() const { return meta_codeexpr; }

	::Uml::Class Statement::meta;
	::Uml::Attribute Statement::meta_statementIndex;
	::Uml::CompositionParentRole Statement::meta_csPar;

	template <> const ::Uml::CompositionParentRole& Statement::_type2CPRole< Statement::PR_csPar >() const { return meta_csPar; }

	::Uml::Class CompoundStatement::meta;
	::Uml::Attribute CompoundStatement::meta_statementCount;
	::Uml::CompositionChildRole CompoundStatement::meta_stmnt;

	template <> const ::Uml::CompositionChildRole& CompoundStatement::_type2CCRole< CompoundStatement::CR_stmnt >() const { return meta_stmnt; }

	::Uml::Class Program::meta;
	::Uml::Attribute Program::meta_stateCount;
	::Uml::Attribute Program::meta_filename;
	::Uml::Attribute Program::meta_numInstance;

	::Uml::Class Return::meta;
	::Uml::Attribute Return::meta_val;
	::Uml::CompositionChildRole Return::meta_retexpr;

	template <> const ::Uml::CompositionChildRole& Return::_type2CCRole< Return::CR_retexpr >() const { return meta_retexpr; }

	::Uml::Class ConditionalBlock::meta;
	::Uml::CompositionChildRole ConditionalBlock::meta_cond;

	template <> const ::Uml::CompositionChildRole& ConditionalBlock::_type2CCRole< ConditionalBlock::CR_cond >() const { return meta_cond; }

	::Uml::Class SimpleStatement::meta;

	::Uml::Class Function::meta;
	::Uml::Attribute Function::meta_scope;
	::Uml::Attribute Function::meta_returnType;
	::Uml::Attribute Function::meta_name;
	::Uml::Attribute Function::meta_argCount;
	::Uml::AssociationRole Function::meta_caller;
	::Uml::CompositionChildRole Function::meta_Arg_children;

	template <> const ::Uml::AssociationRole& Function::_type2ARole< Function::AR_caller >() const { return meta_caller; }
	template <> const ::Uml::CompositionChildRole& Function::_type2CCRole< Function::CR_Arg_children >() const { return meta_Arg_children; }

	::Uml::Class Arg::meta;
	::Uml::Attribute Arg::meta_type;
	::Uml::Attribute Arg::meta_name;
	::Uml::Attribute Arg::meta_size;
	::Uml::Attribute Arg::meta_ptr;
	::Uml::Attribute Arg::meta_argIndex;
	::Uml::AssociationRole Arg::meta_val;
	::Uml::AssociationRole Arg::meta_slab;
	::Uml::AssociationRole Arg::meta_slab_rev;
	::Uml::AssociationRole Arg::meta_lvar;
	::Uml::AssociationRole Arg::meta_lvar_rev;
	::Uml::CompositionParentRole Arg::meta_Function_parent;

	template <> const ::Uml::AssociationRole& Arg::_type2ARole< Arg::AR_val >() const { return meta_val; }
	template <> const pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> Arg::_type2ACARole< Arg::AR_slab >() const { return make_pair(&meta_slab, &meta_slab_rev); }
	template <> const pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> Arg::_type2ACARole< Arg::AR_lvar >() const { return make_pair(&meta_lvar, &meta_lvar_rev); }
	template <> const ::Uml::CompositionParentRole& Arg::_type2CPRole< Arg::PR_Function_parent >() const { return meta_Function_parent; }

	::Uml::Class Condition::meta;
	::Uml::CompositionParentRole Condition::meta_cbPar;
	::Uml::CompositionParentRole Condition::meta_ibPar;

	template <> const ::Uml::CompositionParentRole& Condition::_type2CPRole< Condition::PR_cbPar >() const { return meta_cbPar; }
	template <> const ::Uml::CompositionParentRole& Condition::_type2CPRole< Condition::PR_ibPar >() const { return meta_ibPar; }

	::Uml::Class BasicType::meta;

	::Uml::Class TypedEntity::meta;
	::Uml::AssociationRole TypedEntity::meta_dt;

	template <> const ::Uml::AssociationRole& TypedEntity::_type2ARole< TypedEntity::AR_dt >() const { return meta_dt; }

	::Uml::Class Array::meta;
	::Uml::Attribute Array::meta_noelem;

	::Uml::Class Project::meta;
	::Uml::Attribute Project::meta_name;

	::Uml::Class Class::meta;
	::Uml::Attribute Class::meta_name;

	::Uml::Class ArgDeclBase::meta;
	::Uml::AssociationRole ArgDeclBase::meta_ref;

	template <> const ::Uml::AssociationRole& ArgDeclBase::_type2ARole< ArgDeclBase::AR_ref >() const { return meta_ref; }

	::Uml::Class Struct::meta;
	::Uml::Attribute Struct::meta_memberCount;
	::Uml::CompositionChildRole Struct::meta_memb;

	template <> const ::Uml::CompositionChildRole& Struct::_type2CCRole< Struct::CR_memb >() const { return meta_memb; }

	::Uml::Class DT::meta;
	::Uml::Attribute DT::meta_name;
	::Uml::AssociationRole DT::meta_te;

	template <> const ::Uml::AssociationRole& DT::_type2ARole< DT::AR_te >() const { return meta_te; }

	::Uml::Class ArgDeclRef::meta;
	::Uml::Attribute ArgDeclRef::meta_unres;
	::Uml::AssociationRole ArgDeclRef::meta_argdecl;

	template <> const ::Uml::AssociationRole& ArgDeclRef::_type2ARole< ArgDeclRef::AR_argdecl >() const { return meta_argdecl; }

	::Uml::Class Declaration::meta;
	::Uml::CompositionParentRole Declaration::meta_strct;

	template <> const ::Uml::CompositionParentRole& Declaration::_type2CPRole< Declaration::PR_strct >() const { return meta_strct; }

	::Uml::Class Exprs::meta;
	::Uml::CompositionParentRole Exprs::meta_codeexprpar;
	::Uml::CompositionParentRole Exprs::meta_argexprpar;
	::Uml::CompositionParentRole Exprs::meta_retexprpar;
	::Uml::CompositionParentRole Exprs::meta_subexprpar;
	::Uml::CompositionParentRole Exprs::meta_leftexprpar;
	::Uml::CompositionParentRole Exprs::meta_rightexprpar;

	template <> const ::Uml::CompositionParentRole& Exprs::_type2CPRole< Exprs::PR_codeexprpar >() const { return meta_codeexprpar; }
	template <> const ::Uml::CompositionParentRole& Exprs::_type2CPRole< Exprs::PR_argexprpar >() const { return meta_argexprpar; }
	template <> const ::Uml::CompositionParentRole& Exprs::_type2CPRole< Exprs::PR_retexprpar >() const { return meta_retexprpar; }
	template <> const ::Uml::CompositionParentRole& Exprs::_type2CPRole< Exprs::PR_subexprpar >() const { return meta_subexprpar; }
	template <> const ::Uml::CompositionParentRole& Exprs::_type2CPRole< Exprs::PR_leftexprpar >() const { return meta_leftexprpar; }
	template <> const ::Uml::CompositionParentRole& Exprs::_type2CPRole< Exprs::PR_rightexprpar >() const { return meta_rightexprpar; }

	::Uml::Class NullaryExprs::meta;

	::Uml::Class UnaryExprs::meta;
	::Uml::Attribute UnaryExprs::meta_op;
	::Uml::CompositionChildRole UnaryExprs::meta_subexpr;

	template <> const ::Uml::CompositionChildRole& UnaryExprs::_type2CCRole< UnaryExprs::CR_subexpr >() const { return meta_subexpr; }

	::Uml::Class BinaryExprs::meta;
	::Uml::Attribute BinaryExprs::meta_op;
	::Uml::CompositionChildRole BinaryExprs::meta_rightexpr;
	::Uml::CompositionChildRole BinaryExprs::meta_leftexpr;

	template <> const ::Uml::CompositionChildRole& BinaryExprs::_type2CCRole< BinaryExprs::CR_rightexpr >() const { return meta_rightexpr; }
	template <> const ::Uml::CompositionChildRole& BinaryExprs::_type2CCRole< BinaryExprs::CR_leftexpr >() const { return meta_leftexpr; }

	::Uml::Class Int::meta;
	::Uml::Attribute Int::meta_val;

	::Uml::Class Double::meta;
	::Uml::Attribute Double::meta_val;

	::Uml::Class Str::meta;
	::Uml::Attribute Str::meta_val;

	::Uml::Class SetVar::meta;
	::Uml::Attribute SetVar::meta_invert;
	::Uml::AssociationRole SetVar::meta_lvar_end_;
	::Uml::AssociationRole SetVar::meta_arg_end_;

	template <> const ::Uml::AssociationRole& SetVar::_type2ARole< SetVar::ACE_lvar >() const { return meta_lvar_end_; }
	template <> const ::Uml::AssociationRole& SetVar::_type2ARole< SetVar::ACE_arg >() const { return meta_arg_end_; }

	::Uml::Diagram meta;

	void CreateMeta() {
		// classes, with attributes, constraints and constraint definitions
		Arg::meta = ::Uml::Class::Create(meta);
		Arg::meta_type = ::Uml::Attribute::Create(Arg::meta);
		Arg::meta_name = ::Uml::Attribute::Create(Arg::meta);
		Arg::meta_size = ::Uml::Attribute::Create(Arg::meta);
		Arg::meta_ptr = ::Uml::Attribute::Create(Arg::meta);
		Arg::meta_argIndex = ::Uml::Attribute::Create(Arg::meta);

		ArgDeclBase::meta = ::Uml::Class::Create(meta);

		ArgDeclRef::meta = ::Uml::Class::Create(meta);
		ArgDeclRef::meta_unres = ::Uml::Attribute::Create(ArgDeclRef::meta);

		ArgVal::meta = ::Uml::Class::Create(meta);
		ArgVal::meta_argIndex = ::Uml::Attribute::Create(ArgVal::meta);
		ArgVal::meta_val = ::Uml::Attribute::Create(ArgVal::meta);

		Array::meta = ::Uml::Class::Create(meta);
		Array::meta_noelem = ::Uml::Attribute::Create(Array::meta);

		BasicType::meta = ::Uml::Class::Create(meta);

		BinaryExprs::meta = ::Uml::Class::Create(meta);
		BinaryExprs::meta_op = ::Uml::Attribute::Create(BinaryExprs::meta);

		Block::meta = ::Uml::Class::Create(meta);

		CheckArg::meta = ::Uml::Class::Create(meta);

		CheckState::meta = ::Uml::Class::Create(meta);

		Class::meta = ::Uml::Class::Create(meta);
		Class::meta_name = ::Uml::Attribute::Create(Class::meta);

		CompoundStatement::meta = ::Uml::Class::Create(meta);
		CompoundStatement::meta_statementCount = ::Uml::Attribute::Create(CompoundStatement::meta);

		Condition::meta = ::Uml::Class::Create(meta);

		ConditionalBlock::meta = ::Uml::Class::Create(meta);

		ConditionalGroup::meta = ::Uml::Class::Create(meta);

		DT::meta = ::Uml::Class::Create(meta);
		DT::meta_name = ::Uml::Attribute::Create(DT::meta);

		Declaration::meta = ::Uml::Class::Create(meta);

		Double::meta = ::Uml::Class::Create(meta);
		Double::meta_val = ::Uml::Attribute::Create(Double::meta);

		Exprs::meta = ::Uml::Class::Create(meta);

		Function::meta = ::Uml::Class::Create(meta);
		Function::meta_scope = ::Uml::Attribute::Create(Function::meta);
		Function::meta_returnType = ::Uml::Attribute::Create(Function::meta);
		Function::meta_name = ::Uml::Attribute::Create(Function::meta);
		Function::meta_argCount = ::Uml::Attribute::Create(Function::meta);

		FunctionCall::meta = ::Uml::Class::Create(meta);
		FunctionCall::meta_libFuncName = ::Uml::Attribute::Create(FunctionCall::meta);
		FunctionCall::meta_argCount = ::Uml::Attribute::Create(FunctionCall::meta);

		Int::meta = ::Uml::Class::Create(meta);
		Int::meta_val = ::Uml::Attribute::Create(Int::meta);

		IterativeBlock::meta = ::Uml::Class::Create(meta);

		LocalVar::meta = ::Uml::Class::Create(meta);
		LocalVar::meta_initial = ::Uml::Attribute::Create(LocalVar::meta);
		LocalVar::meta_scope = ::Uml::Attribute::Create(LocalVar::meta);

		NullaryExprs::meta = ::Uml::Class::Create(meta);

		OperationalStatement::meta = ::Uml::Class::Create(meta);

		Program::meta = ::Uml::Class::Create(meta);
		Program::meta_stateCount = ::Uml::Attribute::Create(Program::meta);
		Program::meta_filename = ::Uml::Attribute::Create(Program::meta);
		Program::meta_numInstance = ::Uml::Attribute::Create(Program::meta);

		Project::meta = ::Uml::Class::Create(meta);
		Project::meta_name = ::Uml::Attribute::Create(Project::meta);

		Return::meta = ::Uml::Class::Create(meta);
		Return::meta_val = ::Uml::Attribute::Create(Return::meta);

		SetState::meta = ::Uml::Class::Create(meta);

		SetVar::meta = ::Uml::Class::Create(meta);
		SetVar::meta_invert = ::Uml::Attribute::Create(SetVar::meta);

		SimpleStatement::meta = ::Uml::Class::Create(meta);

		StateLabel::meta = ::Uml::Class::Create(meta);
		StateLabel::meta_name = ::Uml::Attribute::Create(StateLabel::meta);
		StateLabel::meta_comment = ::Uml::Attribute::Create(StateLabel::meta);
		StateLabel::meta_value = ::Uml::Attribute::Create(StateLabel::meta);
		StateLabel::meta_andSS = ::Uml::Attribute::Create(StateLabel::meta);

		StateRel::meta = ::Uml::Class::Create(meta);
		StateRel::meta_invert = ::Uml::Attribute::Create(StateRel::meta);
		StateRel::meta_andState = ::Uml::Attribute::Create(StateRel::meta);

		StateVar::meta = ::Uml::Class::Create(meta);

		Statement::meta = ::Uml::Class::Create(meta);
		Statement::meta_statementIndex = ::Uml::Attribute::Create(Statement::meta);

		Str::meta = ::Uml::Class::Create(meta);
		Str::meta_val = ::Uml::Attribute::Create(Str::meta);

		Struct::meta = ::Uml::Class::Create(meta);
		Struct::meta_memberCount = ::Uml::Attribute::Create(Struct::meta);

		TypedEntity::meta = ::Uml::Class::Create(meta);

		UnaryExprs::meta = ::Uml::Class::Create(meta);
		UnaryExprs::meta_op = ::Uml::Attribute::Create(UnaryExprs::meta);

		UserCode::meta = ::Uml::Class::Create(meta);
		UserCode::meta_expr = ::Uml::Attribute::Create(UserCode::meta);

		Var::meta = ::Uml::Class::Create(meta);
		Var::meta_name = ::Uml::Attribute::Create(Var::meta);
		Var::meta_type = ::Uml::Attribute::Create(Var::meta);
		Var::meta_size = ::Uml::Attribute::Create(Var::meta);

	}

	void InitMeta() {
		// classes, with attributes, constraints and constraint definitions
		::Uml::InitClassProps(Arg::meta, "Arg", false, NULL, NULL);
		::Uml::InitAttributeProps(Arg::meta_type, "type", "String", false, false, 1, 1, false, "public", vector<string>());
		::Uml::InitAttributeProps(Arg::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());
		vector<string> Arg_size_dva;
		Arg_size_dva.push_back("1");
		::Uml::InitAttributeProps(Arg::meta_size, "size", "Integer", false, false, 1, 1, false, "public", Arg_size_dva);
		vector<string> Arg_ptr_dva;
		Arg_ptr_dva.push_back("false");
		::Uml::InitAttributeProps(Arg::meta_ptr, "ptr", "Boolean", false, false, 1, 1, false, "public", Arg_ptr_dva);
		vector<string> Arg_argIndex_dva;
		Arg_argIndex_dva.push_back("0");
		::Uml::InitAttributeProps(Arg::meta_argIndex, "argIndex", "Integer", false, false, 1, 1, false, "public", Arg_argIndex_dva);

		::Uml::InitClassProps(ArgDeclBase::meta, "ArgDeclBase", true, NULL, NULL);

		::Uml::InitClassProps(ArgDeclRef::meta, "ArgDeclRef", false, NULL, NULL);
		::Uml::InitAttributeProps(ArgDeclRef::meta_unres, "unres", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(ArgVal::meta, "ArgVal", false, NULL, NULL);
		vector<string> ArgVal_argIndex_dva;
		ArgVal_argIndex_dva.push_back("0");
		::Uml::InitAttributeProps(ArgVal::meta_argIndex, "argIndex", "Integer", false, false, 1, 1, false, "public", ArgVal_argIndex_dva);
		::Uml::InitAttributeProps(ArgVal::meta_val, "val", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Array::meta, "Array", false, NULL, NULL);
		::Uml::InitAttributeProps(Array::meta_noelem, "noelem", "Integer", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(BasicType::meta, "BasicType", false, NULL, NULL);

		::Uml::InitClassProps(BinaryExprs::meta, "BinaryExprs", false, NULL, NULL);
		::Uml::InitAttributeProps(BinaryExprs::meta_op, "op", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Block::meta, "Block", true, NULL, NULL);

		::Uml::InitClassProps(CheckArg::meta, "CheckArg", false, NULL, NULL);

		::Uml::InitClassProps(CheckState::meta, "CheckState", false, NULL, NULL);

		::Uml::InitClassProps(Class::meta, "Class", false, NULL, NULL);
		::Uml::InitAttributeProps(Class::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(CompoundStatement::meta, "CompoundStatement", true, NULL, NULL);
		vector<string> CompoundStatement_statementCount_dva;
		CompoundStatement_statementCount_dva.push_back("0");
		::Uml::InitAttributeProps(CompoundStatement::meta_statementCount, "statementCount", "Integer", false, false, 1, 1, false, "public", CompoundStatement_statementCount_dva);

		::Uml::InitClassProps(Condition::meta, "Condition", true, NULL, NULL);

		::Uml::InitClassProps(ConditionalBlock::meta, "ConditionalBlock", false, NULL, NULL);

		::Uml::InitClassProps(ConditionalGroup::meta, "ConditionalGroup", false, NULL, NULL);

		::Uml::InitClassProps(DT::meta, "DT", true, NULL, NULL);
		::Uml::InitAttributeProps(DT::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Declaration::meta, "Declaration", true, NULL, NULL);

		::Uml::InitClassProps(Double::meta, "Double", false, NULL, NULL);
		::Uml::InitAttributeProps(Double::meta_val, "val", "Real", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Exprs::meta, "Exprs", true, NULL, NULL);

		::Uml::InitClassProps(Function::meta, "Function", false, NULL, NULL);
		::Uml::InitAttributeProps(Function::meta_scope, "scope", "String", false, false, 1, 1, false, "public", vector<string>());
		vector<string> Function_returnType_dva;
		Function_returnType_dva.push_back("void");
		::Uml::InitAttributeProps(Function::meta_returnType, "returnType", "String", false, false, 1, 1, false, "public", Function_returnType_dva);
		::Uml::InitAttributeProps(Function::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());
		vector<string> Function_argCount_dva;
		Function_argCount_dva.push_back("0");
		::Uml::InitAttributeProps(Function::meta_argCount, "argCount", "Integer", false, false, 1, 1, false, "public", Function_argCount_dva);

		::Uml::InitClassProps(FunctionCall::meta, "FunctionCall", false, NULL, NULL);
		::Uml::InitAttributeProps(FunctionCall::meta_libFuncName, "libFuncName", "String", false, false, 1, 1, false, "public", vector<string>());
		vector<string> FunctionCall_argCount_dva;
		FunctionCall_argCount_dva.push_back("0");
		::Uml::InitAttributeProps(FunctionCall::meta_argCount, "argCount", "Integer", false, false, 1, 1, false, "public", FunctionCall_argCount_dva);

		::Uml::InitClassProps(Int::meta, "Int", false, NULL, NULL);
		::Uml::InitAttributeProps(Int::meta_val, "val", "Integer", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(IterativeBlock::meta, "IterativeBlock", false, NULL, NULL);

		::Uml::InitClassProps(LocalVar::meta, "LocalVar", false, NULL, NULL);
		::Uml::InitAttributeProps(LocalVar::meta_initial, "initial", "String", false, false, 1, 1, false, "public", vector<string>());
		::Uml::InitAttributeProps(LocalVar::meta_scope, "scope", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(NullaryExprs::meta, "NullaryExprs", true, NULL, NULL);

		::Uml::InitClassProps(OperationalStatement::meta, "OperationalStatement", true, NULL, NULL);

		::Uml::InitClassProps(Program::meta, "Program", false, NULL, NULL);
		::Uml::InitAttributeProps(Program::meta_stateCount, "stateCount", "Integer", false, false, 1, 1, false, "public", vector<string>());
		::Uml::InitAttributeProps(Program::meta_filename, "filename", "String", false, false, 1, 1, false, "public", vector<string>());
		vector<string> Program_numInstance_dva;
		Program_numInstance_dva.push_back("1");
		::Uml::InitAttributeProps(Program::meta_numInstance, "numInstance", "Integer", false, false, 1, 1, false, "public", Program_numInstance_dva);

		::Uml::InitClassProps(Project::meta, "Project", false, NULL, NULL);
		::Uml::InitAttributeProps(Project::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Return::meta, "Return", false, NULL, NULL);
		::Uml::InitAttributeProps(Return::meta_val, "val", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(SetState::meta, "SetState", false, NULL, NULL);

		::Uml::InitClassProps(SetVar::meta, "SetVar", false, NULL, NULL);
		vector<string> SetVar_invert_dva;
		SetVar_invert_dva.push_back("false");
		::Uml::InitAttributeProps(SetVar::meta_invert, "invert", "Boolean", false, false, 1, 1, false, "public", SetVar_invert_dva);

		::Uml::InitClassProps(SimpleStatement::meta, "SimpleStatement", true, NULL, NULL);

		::Uml::InitClassProps(StateLabel::meta, "StateLabel", false, NULL, NULL);
		::Uml::InitAttributeProps(StateLabel::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());
		::Uml::InitAttributeProps(StateLabel::meta_comment, "comment", "String", false, false, 1, 1, false, "public", vector<string>());
		::Uml::InitAttributeProps(StateLabel::meta_value, "value", "Integer", false, false, 1, 1, false, "public", vector<string>());
		vector<string> StateLabel_andSS_dva;
		StateLabel_andSS_dva.push_back("0");
		::Uml::InitAttributeProps(StateLabel::meta_andSS, "andSS", "Integer", false, false, 1, 1, false, "public", StateLabel_andSS_dva);

		::Uml::InitClassProps(StateRel::meta, "StateRel", true, NULL, NULL);
		vector<string> StateRel_invert_dva;
		StateRel_invert_dva.push_back("false");
		::Uml::InitAttributeProps(StateRel::meta_invert, "invert", "Boolean", false, false, 1, 1, false, "public", StateRel_invert_dva);
		::Uml::InitAttributeProps(StateRel::meta_andState, "andState", "Boolean", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(StateVar::meta, "StateVar", false, NULL, NULL);

		::Uml::InitClassProps(Statement::meta, "Statement", true, NULL, NULL);
		vector<string> Statement_statementIndex_dva;
		Statement_statementIndex_dva.push_back("0");
		::Uml::InitAttributeProps(Statement::meta_statementIndex, "statementIndex", "Integer", false, false, 1, 1, false, "public", Statement_statementIndex_dva);

		::Uml::InitClassProps(Str::meta, "Str", false, NULL, NULL);
		::Uml::InitAttributeProps(Str::meta_val, "val", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Struct::meta, "Struct", false, NULL, NULL);
		vector<string> Struct_memberCount_dva;
		Struct_memberCount_dva.push_back("0");
		::Uml::InitAttributeProps(Struct::meta_memberCount, "memberCount", "Integer", false, false, 1, 1, false, "public", Struct_memberCount_dva);

		::Uml::InitClassProps(TypedEntity::meta, "TypedEntity", false, NULL, NULL);

		::Uml::InitClassProps(UnaryExprs::meta, "UnaryExprs", false, NULL, NULL);
		::Uml::InitAttributeProps(UnaryExprs::meta_op, "op", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(UserCode::meta, "UserCode", false, NULL, NULL);
		::Uml::InitAttributeProps(UserCode::meta_expr, "expr", "String", false, false, 1, 1, false, "public", vector<string>());

		::Uml::InitClassProps(Var::meta, "Var", true, NULL, NULL);
		::Uml::InitAttributeProps(Var::meta_name, "name", "String", false, false, 1, 1, false, "public", vector<string>());
		::Uml::InitAttributeProps(Var::meta_type, "type", "String", false, false, 1, 1, false, "public", vector<string>());
		vector<string> Var_size_dva;
		Var_size_dva.push_back("1");
		::Uml::InitAttributeProps(Var::meta_size, "size", "Integer", false, false, 1, 1, false, "public", Var_size_dva);

		// associations
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			StateRel::meta_index = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateRel::meta_index, "index", true, false, 1, 1);
			StateLabel::meta_sri = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateLabel::meta_sri, "sri", true, false, 0, -1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			StateRel::meta_svar = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateRel::meta_svar, "svar", true, false, 1, 1);
			StateVar::meta_srs = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateVar::meta_srs, "srs", true, false, 0, -1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			StateRel::meta_value = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateRel::meta_value, "value", true, false, 1, 1);
			StateLabel::meta_srv = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateLabel::meta_srv, "srv", true, false, 0, -1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			Arg::meta_val = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(Arg::meta_val, "val", true, false, 0, -1);
			ArgVal::meta_arg = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(ArgVal::meta_arg, "arg", true, false, 0, -1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			Function::meta_caller = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(Function::meta_caller, "caller", true, false, 0, -1);
			FunctionCall::meta_callee = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(FunctionCall::meta_callee, "callee", true, false, 0, 1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "CheckArg");
			StateLabel::meta_arg = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(StateLabel::meta_arg, "arg", true, false, 0, -1);
			Arg::meta_slab = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(Arg::meta_slab, "slab", true, false, 0, -1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "SetVar");
			LocalVar::meta_arg = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(LocalVar::meta_arg, "arg", true, false, 0, -1);
			Arg::meta_lvar = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(Arg::meta_lvar, "lvar", true, false, 0, -1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			DT::meta_te = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(DT::meta_te, "te", true, false, 0, -1);
			TypedEntity::meta_dt = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(TypedEntity::meta_dt, "dt", true, false, 0, 1);

		}
		{
			::Uml::Association ass = ::Uml::Association::Create(meta);
			::Uml::InitAssociationProps(ass, "Association");
			ArgDeclBase::meta_ref = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(ArgDeclBase::meta_ref, "ref", true, false, 0, -1);
			ArgDeclRef::meta_argdecl = ::Uml::AssociationRole::Create(ass);
			::Uml::InitAssociationRoleProps(ArgDeclRef::meta_argdecl, "argdecl", true, false, 0, 1);

		}

		// compositions
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Exprs::meta_argexprpar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Exprs::meta_argexprpar, "argexprpar", true);
			ArgVal::meta_argexpr = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(ArgVal::meta_argexpr, "argexpr", true, 0, 1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			ArgVal::meta_FunctionCall_parent = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(ArgVal::meta_FunctionCall_parent, "FunctionCall_parent", true);
			FunctionCall::meta_ArgVal_children = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(FunctionCall::meta_ArgVal_children, "ArgVal", true, 0, -1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Condition::meta_ibPar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Condition::meta_ibPar, "ibPar", true);
			IterativeBlock::meta_cond = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(IterativeBlock::meta_cond, "cond", true, 0, -1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Exprs::meta_codeexprpar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Exprs::meta_codeexprpar, "codeexprpar", true);
			UserCode::meta_codeexpr = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(UserCode::meta_codeexpr, "codeexpr", true, 0, 1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Statement::meta_csPar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Statement::meta_csPar, "csPar", true);
			CompoundStatement::meta_stmnt = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(CompoundStatement::meta_stmnt, "stmnt", true, 0, -1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Exprs::meta_retexprpar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Exprs::meta_retexprpar, "retexprpar", true);
			Return::meta_retexpr = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(Return::meta_retexpr, "retexpr", true, 0, 1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Condition::meta_cbPar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Condition::meta_cbPar, "cbPar", true);
			ConditionalBlock::meta_cond = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(ConditionalBlock::meta_cond, "cond", true, 0, -1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Arg::meta_Function_parent = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Arg::meta_Function_parent, "Function_parent", true);
			Function::meta_Arg_children = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(Function::meta_Arg_children, "Arg", true, 0, -1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Declaration::meta_strct = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Declaration::meta_strct, "strct", true);
			Struct::meta_memb = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(Struct::meta_memb, "memb", true, 0, -1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Exprs::meta_subexprpar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Exprs::meta_subexprpar, "subexprpar", true);
			UnaryExprs::meta_subexpr = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(UnaryExprs::meta_subexpr, "subexpr", true, 1, 1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Exprs::meta_rightexprpar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Exprs::meta_rightexprpar, "rightexprpar", true);
			BinaryExprs::meta_rightexpr = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(BinaryExprs::meta_rightexpr, "rightexpr", true, 1, 1);

		}
		{
			::Uml::Composition comp = ::Uml::Composition::Create(meta);
			::Uml::InitCompositionProps(comp, "Composition", false);
			Exprs::meta_leftexprpar = ::Uml::CompositionParentRole::Create(comp);
			::Uml::InitCompositionParentRoleProps(Exprs::meta_leftexprpar, "leftexprpar", true);
			BinaryExprs::meta_leftexpr = ::Uml::CompositionChildRole::Create(comp);
			::Uml::InitCompositionChildRoleProps(BinaryExprs::meta_leftexpr, "leftexpr", true, 1, 1);

		}

	}

	void InitMetaLinks() {
		Arg::meta_val.target() = ArgVal::meta;
		Arg::meta_slab.target() = StateLabel::meta;
		Arg::meta_lvar.target() = LocalVar::meta;
		Function::meta_Arg_children.target() = Arg::meta;

		ArgDeclBase::meta_ref.target() = ArgDeclRef::meta;
		ArgDeclBase::meta.subTypes() += Arg::meta;
		ArgDeclBase::meta.subTypes() += Declaration::meta;

		ArgDeclRef::meta_argdecl.target() = ArgDeclBase::meta;

		ArgVal::meta_arg.target() = Arg::meta;
		Exprs::meta_argexprpar.target() = ArgVal::meta;
		FunctionCall::meta_ArgVal_children.target() = ArgVal::meta;

		Exprs::meta_rightexprpar.target() = BinaryExprs::meta;
		Exprs::meta_leftexprpar.target() = BinaryExprs::meta;

		Block::meta.subTypes() += IterativeBlock::meta;
		Block::meta.subTypes() += ConditionalBlock::meta;
		Block::meta.subTypes() += Function::meta;

		CheckArg::meta.association() = StateLabel::meta_arg.parent();
		CheckArg::meta_arg_end_ = Arg::meta_slab_rev = StateLabel::meta_arg;
		CheckArg::meta_slab_end_ = StateLabel::meta_arg_rev = Arg::meta_slab;

		Statement::meta_csPar.target() = CompoundStatement::meta;
		CompoundStatement::meta.subTypes() += ConditionalGroup::meta;
		CompoundStatement::meta.subTypes() += Block::meta;
		CompoundStatement::meta.subTypes() += Program::meta;
		CompoundStatement::meta.subTypes() += Project::meta;
		CompoundStatement::meta.subTypes() += Class::meta;

		ConditionalBlock::meta_cond.target() = Condition::meta;
		IterativeBlock::meta_cond.target() = Condition::meta;
		Condition::meta.subTypes() += CheckState::meta;
		Condition::meta.subTypes() += CheckArg::meta;
		Condition::meta.subTypes() += UserCode::meta;

		Condition::meta_cbPar.target() = ConditionalBlock::meta;

		DT::meta_te.target() = TypedEntity::meta;
		DT::meta.subTypes() += BasicType::meta;
		DT::meta.subTypes() += Array::meta;
		DT::meta.subTypes() += Struct::meta;

		Struct::meta_memb.target() = Declaration::meta;
		Declaration::meta.subTypes() += Var::meta;
		Declaration::meta.subTypes() += StateLabel::meta;
		Declaration::meta.subTypes() += DT::meta;

		UserCode::meta_codeexpr.target() = Exprs::meta;
		ArgVal::meta_argexpr.target() = Exprs::meta;
		Return::meta_retexpr.target() = Exprs::meta;
		UnaryExprs::meta_subexpr.target() = Exprs::meta;
		BinaryExprs::meta_leftexpr.target() = Exprs::meta;
		BinaryExprs::meta_rightexpr.target() = Exprs::meta;
		Exprs::meta.subTypes() += NullaryExprs::meta;
		Exprs::meta.subTypes() += UnaryExprs::meta;
		Exprs::meta.subTypes() += BinaryExprs::meta;

		Function::meta_caller.target() = FunctionCall::meta;
		Arg::meta_Function_parent.target() = Function::meta;

		FunctionCall::meta_callee.target() = Function::meta;
		ArgVal::meta_FunctionCall_parent.target() = FunctionCall::meta;

		Condition::meta_ibPar.target() = IterativeBlock::meta;

		LocalVar::meta_arg.target() = Arg::meta;

		NullaryExprs::meta.subTypes() += FunctionCall::meta;
		NullaryExprs::meta.subTypes() += ArgDeclRef::meta;
		NullaryExprs::meta.subTypes() += Int::meta;
		NullaryExprs::meta.subTypes() += Double::meta;
		NullaryExprs::meta.subTypes() += Str::meta;

		OperationalStatement::meta.subTypes() += CompoundStatement::meta;
		OperationalStatement::meta.subTypes() += SimpleStatement::meta;

		Exprs::meta_retexprpar.target() = Return::meta;

		SetVar::meta.association() = LocalVar::meta_arg.parent();
		SetVar::meta_arg_end_ = Arg::meta_lvar_rev = LocalVar::meta_arg;
		SetVar::meta_lvar_end_ = LocalVar::meta_arg_rev = Arg::meta_lvar;

		SimpleStatement::meta.subTypes() += SetState::meta;
		SimpleStatement::meta.subTypes() += FunctionCall::meta;
		SimpleStatement::meta.subTypes() += UserCode::meta;
		SimpleStatement::meta.subTypes() += Return::meta;
		SimpleStatement::meta.subTypes() += SetVar::meta;

		StateLabel::meta_sri.target() = StateRel::meta;
		StateLabel::meta_srv.target() = StateRel::meta;
		StateLabel::meta_arg.target() = Arg::meta;

		StateRel::meta_index.target() = StateLabel::meta;
		StateRel::meta_svar.target() = StateVar::meta;
		StateRel::meta_value.target() = StateLabel::meta;
		StateRel::meta.subTypes() += SetState::meta;
		StateRel::meta.subTypes() += CheckState::meta;

		StateVar::meta_srs.target() = StateRel::meta;

		CompoundStatement::meta_stmnt.target() = Statement::meta;
		Statement::meta.subTypes() += OperationalStatement::meta;
		Statement::meta.subTypes() += Declaration::meta;

		Declaration::meta_strct.target() = Struct::meta;

		TypedEntity::meta_dt.target() = DT::meta;
		TypedEntity::meta.subTypes() += Function::meta;
		TypedEntity::meta.subTypes() += Array::meta;
		TypedEntity::meta.subTypes() += ArgDeclBase::meta;

		Exprs::meta_subexprpar.target() = UnaryExprs::meta;

		Exprs::meta_codeexprpar.target() = UserCode::meta;

		Var::meta.subTypes() += StateVar::meta;
		Var::meta.subTypes() += LocalVar::meta;

	}

	void InitMeta(const ::Uml::Diagram &parent) {
		// classes, with attributes, constraints and constraint definitions
		::Uml::SetClass(Arg::meta, parent, "Arg");
		::Uml::SetAttribute(Arg::meta_type, Arg::meta, "type");
		::Uml::SetAttribute(Arg::meta_name, Arg::meta, "name");
		::Uml::SetAttribute(Arg::meta_size, Arg::meta, "size");
		::Uml::SetAttribute(Arg::meta_ptr, Arg::meta, "ptr");
		::Uml::SetAttribute(Arg::meta_argIndex, Arg::meta, "argIndex");

		::Uml::SetClass(ArgDeclBase::meta, parent, "ArgDeclBase");

		::Uml::SetClass(ArgDeclRef::meta, parent, "ArgDeclRef");
		::Uml::SetAttribute(ArgDeclRef::meta_unres, ArgDeclRef::meta, "unres");

		::Uml::SetClass(ArgVal::meta, parent, "ArgVal");
		::Uml::SetAttribute(ArgVal::meta_argIndex, ArgVal::meta, "argIndex");
		::Uml::SetAttribute(ArgVal::meta_val, ArgVal::meta, "val");

		::Uml::SetClass(Array::meta, parent, "Array");
		::Uml::SetAttribute(Array::meta_noelem, Array::meta, "noelem");

		::Uml::SetClass(BasicType::meta, parent, "BasicType");

		::Uml::SetClass(BinaryExprs::meta, parent, "BinaryExprs");
		::Uml::SetAttribute(BinaryExprs::meta_op, BinaryExprs::meta, "op");

		::Uml::SetClass(Block::meta, parent, "Block");

		::Uml::SetClass(CheckArg::meta, parent, "CheckArg");

		::Uml::SetClass(CheckState::meta, parent, "CheckState");

		::Uml::SetClass(Class::meta, parent, "Class");
		::Uml::SetAttribute(Class::meta_name, Class::meta, "name");

		::Uml::SetClass(CompoundStatement::meta, parent, "CompoundStatement");
		::Uml::SetAttribute(CompoundStatement::meta_statementCount, CompoundStatement::meta, "statementCount");

		::Uml::SetClass(Condition::meta, parent, "Condition");

		::Uml::SetClass(ConditionalBlock::meta, parent, "ConditionalBlock");

		::Uml::SetClass(ConditionalGroup::meta, parent, "ConditionalGroup");

		::Uml::SetClass(DT::meta, parent, "DT");
		::Uml::SetAttribute(DT::meta_name, DT::meta, "name");

		::Uml::SetClass(Declaration::meta, parent, "Declaration");

		::Uml::SetClass(Double::meta, parent, "Double");
		::Uml::SetAttribute(Double::meta_val, Double::meta, "val");

		::Uml::SetClass(Exprs::meta, parent, "Exprs");

		::Uml::SetClass(Function::meta, parent, "Function");
		::Uml::SetAttribute(Function::meta_scope, Function::meta, "scope");
		::Uml::SetAttribute(Function::meta_returnType, Function::meta, "returnType");
		::Uml::SetAttribute(Function::meta_name, Function::meta, "name");
		::Uml::SetAttribute(Function::meta_argCount, Function::meta, "argCount");

		::Uml::SetClass(FunctionCall::meta, parent, "FunctionCall");
		::Uml::SetAttribute(FunctionCall::meta_libFuncName, FunctionCall::meta, "libFuncName");
		::Uml::SetAttribute(FunctionCall::meta_argCount, FunctionCall::meta, "argCount");

		::Uml::SetClass(Int::meta, parent, "Int");
		::Uml::SetAttribute(Int::meta_val, Int::meta, "val");

		::Uml::SetClass(IterativeBlock::meta, parent, "IterativeBlock");

		::Uml::SetClass(LocalVar::meta, parent, "LocalVar");
		::Uml::SetAttribute(LocalVar::meta_initial, LocalVar::meta, "initial");
		::Uml::SetAttribute(LocalVar::meta_scope, LocalVar::meta, "scope");

		::Uml::SetClass(NullaryExprs::meta, parent, "NullaryExprs");

		::Uml::SetClass(OperationalStatement::meta, parent, "OperationalStatement");

		::Uml::SetClass(Program::meta, parent, "Program");
		::Uml::SetAttribute(Program::meta_stateCount, Program::meta, "stateCount");
		::Uml::SetAttribute(Program::meta_filename, Program::meta, "filename");
		::Uml::SetAttribute(Program::meta_numInstance, Program::meta, "numInstance");

		::Uml::SetClass(Project::meta, parent, "Project");
		::Uml::SetAttribute(Project::meta_name, Project::meta, "name");

		::Uml::SetClass(Return::meta, parent, "Return");
		::Uml::SetAttribute(Return::meta_val, Return::meta, "val");

		::Uml::SetClass(SetState::meta, parent, "SetState");

		::Uml::SetClass(SetVar::meta, parent, "SetVar");
		::Uml::SetAttribute(SetVar::meta_invert, SetVar::meta, "invert");

		::Uml::SetClass(SimpleStatement::meta, parent, "SimpleStatement");

		::Uml::SetClass(StateLabel::meta, parent, "StateLabel");
		::Uml::SetAttribute(StateLabel::meta_name, StateLabel::meta, "name");
		::Uml::SetAttribute(StateLabel::meta_comment, StateLabel::meta, "comment");
		::Uml::SetAttribute(StateLabel::meta_value, StateLabel::meta, "value");
		::Uml::SetAttribute(StateLabel::meta_andSS, StateLabel::meta, "andSS");

		::Uml::SetClass(StateRel::meta, parent, "StateRel");
		::Uml::SetAttribute(StateRel::meta_invert, StateRel::meta, "invert");
		::Uml::SetAttribute(StateRel::meta_andState, StateRel::meta, "andState");

		::Uml::SetClass(StateVar::meta, parent, "StateVar");

		::Uml::SetClass(Statement::meta, parent, "Statement");
		::Uml::SetAttribute(Statement::meta_statementIndex, Statement::meta, "statementIndex");

		::Uml::SetClass(Str::meta, parent, "Str");
		::Uml::SetAttribute(Str::meta_val, Str::meta, "val");

		::Uml::SetClass(Struct::meta, parent, "Struct");
		::Uml::SetAttribute(Struct::meta_memberCount, Struct::meta, "memberCount");

		::Uml::SetClass(TypedEntity::meta, parent, "TypedEntity");

		::Uml::SetClass(UnaryExprs::meta, parent, "UnaryExprs");
		::Uml::SetAttribute(UnaryExprs::meta_op, UnaryExprs::meta, "op");

		::Uml::SetClass(UserCode::meta, parent, "UserCode");
		::Uml::SetAttribute(UserCode::meta_expr, UserCode::meta, "expr");

		::Uml::SetClass(Var::meta, parent, "Var");
		::Uml::SetAttribute(Var::meta_name, Var::meta, "name");
		::Uml::SetAttribute(Var::meta_type, Var::meta, "type");
		::Uml::SetAttribute(Var::meta_size, Var::meta, "size");

	}

	void InitMetaLinks(const ::Uml::Diagram &parent) {
		// classes
		::Uml::SetAssocRole(Arg::meta_val, Arg::meta, ArgVal::meta, "arg");
		::Uml::SetAssocRole(Arg::meta_slab, Arg::meta, StateLabel::meta, "arg");
		StateLabel::meta_arg_rev = Arg::meta_slab;
		::Uml::SetAssocRole(Arg::meta_lvar, Arg::meta, LocalVar::meta, "arg");
		LocalVar::meta_arg_rev = Arg::meta_lvar;
		::Uml::SetParentRole(Arg::meta_Function_parent, Arg::meta, Function::meta, "", "");

		::Uml::SetAssocRole(ArgDeclBase::meta_ref, ArgDeclBase::meta, ArgDeclRef::meta, "argdecl");

		::Uml::SetAssocRole(ArgDeclRef::meta_argdecl, ArgDeclRef::meta, ArgDeclBase::meta, "ref");

		::Uml::SetAssocRole(ArgVal::meta_arg, ArgVal::meta, Arg::meta, "val");
		::Uml::SetChildRole(ArgVal::meta_argexpr, ArgVal::meta, Exprs::meta, "argexprpar", "argexpr");
		::Uml::SetParentRole(ArgVal::meta_FunctionCall_parent, ArgVal::meta, FunctionCall::meta, "", "");

		::Uml::SetChildRole(BinaryExprs::meta_rightexpr, BinaryExprs::meta, Exprs::meta, "rightexprpar", "rightexpr");
		::Uml::SetChildRole(BinaryExprs::meta_leftexpr, BinaryExprs::meta, Exprs::meta, "leftexprpar", "leftexpr");

		CheckArg::meta_slab_end_ = Arg::meta_slab;
		CheckArg::meta_arg_end_ = StateLabel::meta_arg;

		::Uml::SetChildRole(CompoundStatement::meta_stmnt, CompoundStatement::meta, Statement::meta, "csPar", "stmnt");

		::Uml::SetParentRole(Condition::meta_cbPar, Condition::meta, ConditionalBlock::meta, "cond", "cbPar");
		::Uml::SetParentRole(Condition::meta_ibPar, Condition::meta, IterativeBlock::meta, "cond", "ibPar");

		::Uml::SetChildRole(ConditionalBlock::meta_cond, ConditionalBlock::meta, Condition::meta, "cbPar", "cond");

		::Uml::SetAssocRole(DT::meta_te, DT::meta, TypedEntity::meta, "dt");

		::Uml::SetParentRole(Declaration::meta_strct, Declaration::meta, Struct::meta, "memb", "strct");

		::Uml::SetParentRole(Exprs::meta_codeexprpar, Exprs::meta, UserCode::meta, "codeexpr", "codeexprpar");
		::Uml::SetParentRole(Exprs::meta_argexprpar, Exprs::meta, ArgVal::meta, "argexpr", "argexprpar");
		::Uml::SetParentRole(Exprs::meta_retexprpar, Exprs::meta, Return::meta, "retexpr", "retexprpar");
		::Uml::SetParentRole(Exprs::meta_subexprpar, Exprs::meta, UnaryExprs::meta, "subexpr", "subexprpar");
		::Uml::SetParentRole(Exprs::meta_leftexprpar, Exprs::meta, BinaryExprs::meta, "leftexpr", "leftexprpar");
		::Uml::SetParentRole(Exprs::meta_rightexprpar, Exprs::meta, BinaryExprs::meta, "rightexpr", "rightexprpar");

		::Uml::SetAssocRole(Function::meta_caller, Function::meta, FunctionCall::meta, "callee");
		::Uml::SetChildRole(Function::meta_Arg_children, Function::meta, Arg::meta, "", "");

		::Uml::SetAssocRole(FunctionCall::meta_callee, FunctionCall::meta, Function::meta, "caller");
		::Uml::SetChildRole(FunctionCall::meta_ArgVal_children, FunctionCall::meta, ArgVal::meta, "", "");

		::Uml::SetChildRole(IterativeBlock::meta_cond, IterativeBlock::meta, Condition::meta, "ibPar", "cond");

		::Uml::SetAssocRole(LocalVar::meta_arg, LocalVar::meta, Arg::meta, "lvar");
		Arg::meta_lvar_rev = LocalVar::meta_arg;

		::Uml::SetChildRole(Return::meta_retexpr, Return::meta, Exprs::meta, "retexprpar", "retexpr");

		SetVar::meta_lvar_end_ = Arg::meta_lvar;
		SetVar::meta_arg_end_ = LocalVar::meta_arg;

		::Uml::SetAssocRole(StateLabel::meta_sri, StateLabel::meta, StateRel::meta, "index");
		::Uml::SetAssocRole(StateLabel::meta_srv, StateLabel::meta, StateRel::meta, "value");
		::Uml::SetAssocRole(StateLabel::meta_arg, StateLabel::meta, Arg::meta, "slab");
		Arg::meta_slab_rev = StateLabel::meta_arg;

		::Uml::SetAssocRole(StateRel::meta_index, StateRel::meta, StateLabel::meta, "sri");
		::Uml::SetAssocRole(StateRel::meta_svar, StateRel::meta, StateVar::meta, "srs");
		::Uml::SetAssocRole(StateRel::meta_value, StateRel::meta, StateLabel::meta, "srv");

		::Uml::SetAssocRole(StateVar::meta_srs, StateVar::meta, StateRel::meta, "svar");

		::Uml::SetParentRole(Statement::meta_csPar, Statement::meta, CompoundStatement::meta, "stmnt", "csPar");

		::Uml::SetChildRole(Struct::meta_memb, Struct::meta, Declaration::meta, "strct", "memb");

		::Uml::SetAssocRole(TypedEntity::meta_dt, TypedEntity::meta, DT::meta, "te");

		::Uml::SetChildRole(UnaryExprs::meta_subexpr, UnaryExprs::meta, Exprs::meta, "subexprpar", "subexpr");

		::Uml::SetChildRole(UserCode::meta_codeexpr, UserCode::meta, Exprs::meta, "codeexprpar", "codeexpr");

	}

	void _SetXsdStorage()
	{
		UdmDom::str_xsd_storage::StoreXsd("SFC.xsd", SFC_xsd::getString());
	}

	void Initialize()
	{
		static bool first = true;
		if (!first) return;
		first = false;
		::Uml::Initialize();

	
		ASSERT( meta == Udm::null );

		UdmStatic::StaticDataNetwork * meta_dn = new UdmStatic::StaticDataNetwork(::Uml::diagram);
		meta_dn->CreateNew("SFC.mem", "", ::Uml::Diagram::meta, Udm::CHANGES_LOST_DEFAULT);
		meta = ::Uml::Diagram::Cast(meta_dn->GetRootObject());

		::Uml::InitDiagramProps(meta, "SFC", "1.00");


		CreateMeta();
		InitMeta();
		InitMetaLinks();

		_SetXsdStorage();

	}

	void Initialize(const ::Uml::Diagram &dgr)
	{
		
		meta = dgr;

		InitMeta(dgr);
		InitMetaLinks(dgr);

		
		_SetXsdStorage();
	}


	Udm::UdmDiagram diagram = { &meta, Initialize };
	static struct _regClass
	{
		_regClass()
		{
			Udm::MetaDepository::StoreDiagram("SFC", diagram);
		}
		~_regClass()
		{
			Udm::MetaDepository::RemoveDiagram("SFC");
		}
	} __regUnUsed;

}
