メッセージ・パラメーターの指定

メッセージ・データは、遷移のコンテキスト内で使用される仮パラメーターです。デフォルトでは、メッセージがイベントの場合、メッセージ・パラメーターの名前はイベント・クラスの引数 (データ・メンバー) と同じです。

このタスクについて

ステートチャート内のイベント引数は、以下の構文で、疑似変数 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 を使用します。


フィードバック