상태 차트 코드 인라인

이 태스크 정보

다음 상태 차트를 고려하십시오.

상태 차트

일반 구성을 사용하여 이 상태 차트를 구현하는 경우, 다음 메소드가 클래스에 추가되며 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으로 설정하십시오.


피드백