
일반 구성을 사용하여 이 상태 차트를 구현하는 경우, 다음 메소드가 클래스에 추가되며 rootState_dispatchEvent()로부터의 일련의 몇 가지 함수 호출을 통해 호출될 수 있습니다.
int MyClass::s2TakeNull() {
int res = eventNotConsumed;
s2_exit();
//#[ transition 2
f2();
f2();
//#]
s3_entDef();
res = eventConsumed;
return res;
};
int MyClass::s1TakeNull() {
int res = eventNotConsumed;
s1_exit();
//#[ transition 1
f1();
f1();
//#]
s2_entDef();
res = eventConsumed;
return res;
};
실제로는 다음과 같이 상태 전이 코드(//#[ 대괄호와 //#] 대괄호 사이)가 rootState_dispatchEvent() 내부에 즉시 인라인(임베드)됩니다.
int MyClass::rootState_dispatchEvent(short id) {
int res = eventNotConsumed;
switch(rootState_active) {
case s1:
{
if(id == Null_id)
{
popNullConfig();
//#[ transition 1
f1();
f1();
//#]
pushNullConfig();
rootState_subState = s2;
rootState_active = s2;
res = eventConsumed;
}
break;
};
case s2:
{
if(id == Null_id)
{
popNullConfig();
//#[ transition 2
f2();
f2();
//#]
rootState_subState = s3;
rootState_active = s3;
res = eventConsumed;
}
break;
};
};
return res;
};
이 코드는 코드 인라인을 사용하여 몇 가지 함수 호출을 저장하므로 보다 효율적입니다. 인라인은 클래스의 CG::Class::ComplexityForInlining 특성(기본적으로 3으로 설정됨)을 사용하여 사용할 수 있습니다. 이는 사용자 코드(상태 전이의 조치 파트)가 세 행보다 짧은 경우 함수 호출이 함수 호출 대신 사용될 위치에 인라인(임베드)됨을 의미합니다. "예상" 결과를 얻으려면(인라인되지 않음) 이 특성을 0으로 설정하십시오.