変数


プログラム上でのスクリプト変数の扱い

iduoスクリプトは配列をサポートしています。
そのためには変数内容を動的メモリで割り当てる必要があり、
それに伴い開放も都度必要になります。
つまりクラスのようにインスタンスがあると考えてください。

変数はTVar型で表現されます。これは構造型で、キー名と変数タイプと、値を格納します。
TVar = record
  Key: string;
  Value: Pointer;
  VarType: TVarType;
end;
変数タイプVarTypeによって、保持する値の内容が変わります。
TVarTypeは二つの値をとり、vtValue(値), vtArray(配列)があります。
vtValueの場合、ValueにはVariant型へのポインタが入ります。
vtArrayの場合、ValueにはTVarArray型へのポインタが入ります。
つまり変数の実際のデータへアクセスするには、これらを判別しなければなりません。

これらの処理を行うのに便利な関数がiduoResourceに定義されているので紹介します。

変数を扱うための関数

function MakeVar(Key: string; Value: variant): TVar;
指定したキーと値の内容の変数データを作成します。

function MakeVarArray(Key: string; Value: TVarArray): TVar;
指定したキーと値の内容の配列変数データを作成します。

procedure SetVar(var Dest: TVar; const Src: TVar); overload;
Srcの値をDestへコピーします。

procedure SetVar(var Dest: TVar; Src: variant); overload;
変数の値を代入します。

procedure CopyVar(var Dest: TVar; const Src: TVar);
Srcの内容をキーも一緒にコピーします。

function AddArrayElement(var content: TVar; Key: string=''): PVar;
配列変数の要素を一つ追加します。それが配列で無い場合は配列化します。
Keyを指定しなかった場合は、そのKeyにゼロから数えたインデックスが与えられます。

function ArrayElementOf(const content: TVarArray; Key: string): PVar;
配列変数の指定キーの要素を検索して返します。

procedure FreeVar(var content: TVar);
変数を開放します。

function MakeNullVar(): TVar;
空の変数データを作成します。

function GetVarValue(content: TVar; def: variant): variant;
変数の値を取り出します。
内容が配列もしくは割り当てられていない場合はdefで指定された値を返します。

function GetVarArray(content: TVar): TVarArray;
変数の配列を取り出します。
内容が配列でない、もしくは割り当てられていない場合は長さ0の配列を返します。