RICIS_IN() には、IS_IN() と同じ効果があります。このステートメントは、引数としてオブジェクトに対するポインターと検査する状態の名前をとります。状態の名前は、<object>_<state> という形式です。
例えば、Furnace オブジェクトが状態変化前に faultS 状態でないようにするには、以下の IS_IN() ステートメントを Furnace のステートチャート内で遷移に対するガードとして使用できます。
[!IS_IN(me,Furnace_faultS)]
IS_IN() の定義は以下のとおりです。
#define IS_IN(me, state) state##_IN((me))
このマクロは、状態に対して生成される IN() 操作を呼び出します。オブジェクトの状態の検査を参照してください。
状態を参照する場合、生成された状態名を使用する必要があります。同じ名前の兄弟状態を参照する場合、この方法は注意して使用する必要があります。例えば、オブジェクト A が And 状態 B で、並行状態が B1 と B2 で、しかもこれらのそれぞれがサブ状態 C である場合、これらの状態に対して以下の列挙値が生成されます。
/*states enumeration: */
enum A_Enum{ A_RiCNonState=0, A_B=1, A_B2=2,
A_B2_C=3, A_B1=4, A_C=5 }
B1 のサブ状態 C の生成された名前は A_C となります。 したがって、A が B1 の C であるかどうかを確認するための正しいマクロ呼び出しは、IS_IN(me, A_B1_C) ではなく、IS_IN(me, A_C) となります。