ステートチャート内のイベント引数は、以下の構文で、疑似変数 params‑> を使用して参照します。
event/params->event_arg1, params->event_arg2
引数 color を持つイベント discharge を処理するクラス Firecracker を考えます。引数 color は列挙型 Colors であり、可能な値は red (0)、green (1)、または blue (2) です。ステートチャート内で、遷移に以下のラベルを付けることで、発生したときにイベントにカラーを引き渡したいことを示します。
discharge/params->color
アニメーション付きのアプリケーションを実行する場合、アニメーション・コマンド・フィールドに以下のコマンドを入力することで、discharge イベントを生成して、値 red をそれに引き渡すことができます。
Firecracker[0]->GEN(discharge(red))
アプリケーションは params->color 表記により、red をイベント discharge の引数 color に引き渡される値として理解します。カラー red は整数値 (0) に変換され、イベントは以下のようにメイン・スレッドのイベント・キューに入ります。
Firecracker[0]->discharge((int)color = 0)
最後に、イベント・キューは params-> で渡された値 red を持つイベント discharge を処理します。Firecracker は赤で「発火」し、ready 状態から discharged 状態へ遷移します。
params-> メカニズムが機能する仕組みは以下のとおりです。 イベントを作成して引数を与えると、製品は、属性として引数を持つイベント・クラス (OMEvent から派生) を生成します。 パッケージ・ファイル内にイベントのコードが生成されます。
以下のサンプル・コードは、 color と呼ばれる 1 つの引数を持つイベント discharge を示したものです。 このコードは Default パッケージのヘッダー・ファイル内に生成されたものです。
//-------------------------------------------------------
// Default.h
//-------------------------------------------------------
class discharge;
class Firecracker;
enum Colors {red, green, blue};
class discharge : public OMEvent {
DECLARE_META_EVENT
//// User explicit entries ////
public :
Colors color;
//// User implicit entries ////
public :
// Constructors and destructors:
discharge();
//// Framework entries ////
public :
discharge(Colors p_color);
// This constructor is need in code instrumentation
discharge(int p_color);
};
Firecracker イベント・キューはイベント discharge を受け入れる準備ができると、SETPARAMS(discharge) を呼び出します。SETPARAMS は、oxf¥state.h に以下のように定義されているマクロです。
#define SETPARAMS(type) type *params; params=(type*)event
SETPARAMS(discharge) を呼び出すと、型 discharge のイベントへの型ポインターの変数 params が割り当てられます。 discharge‑>color の簡略表記として、遷移のアクション部分の params->color を使用します。