繰返し項目を、以下のようにsequenceデータ型にマッピングします。
次元数 | オブジェクト指向COBOL |
|---|---|
1次元 | sequence型(固定長) |
2次元~5次元 | 使用できません |
繰り返し定義のIDLファイルへの展開
ここでは、繰り返し定義のIDLファイルへの展開について説明します。
1次元の場合は、sequence型にマッピングします。
データ型に4バイト整数、型名にa、繰り返し数に10を指定した場合の展開について示します。
typedef sequence<long, 10> a ;
繰返し項目の操作
ここでは、繰返し項目の操作について説明します。
繰返し項目の操作を以下に示します。以下のIDLファイルをコンパイルした場合、sequence型は、シーケンスクラスにマッピングされます。
module ODsample {
typedef sequence<long,10> sampleseq;
interface seqtest {
sampleseq op1(in sampleseq param1,
out sampleseq param2,
inout sampleseq param3);
};
};シーケンスクラスのファクトリメソッド、オブジェクトメソッド、プロパティを以下に示します。
カテゴリ | メソッド名/プロパティ名 | 機能 |
|---|---|---|
ファクトリメソッド | NEW-WITH-LENGTH | 指定の長さでシーケンスクラスを作成します。 |
オブジェクトメソッド | GET-VALUE | 指定番号の要素の値を取得します。 |
SET-VALUE | 指定番号の要素に値を設定します。 | |
CLONE | シーケンスクラスを複製します。 | |
プロパティ | SEQ-MAXIMUM | シーケンス最大長の値を取得します。 |
SEQ-LENGTH | シーケンス長の値の取得/設定を行います。 |
METHOD-ID. OP1 AS "OP1" OVERRIDE.
* <IDL-INFO-START>
* sampleseq op1(in sampleseq param1,out sampleseq param2,inout sampleseq param3)
* <IDL-INFO-END>
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SEQ-VALUE TYPE CORBA-LONG.
01 I TYPE CORBA-UNSIGNED-LONG.
LINKAGE SECTION.
01 復帰値 TYPE ODSAMPLE-SAMPLESEQ.
01 PARAM1 TYPE ODSAMPLE-SAMPLESEQ.
01 PARAM2 TYPE ODSAMPLE-SAMPLESEQ.
01 PARAM3 TYPE ODSAMPLE-SAMPLESEQ.
PROCEDURE DIVISION
USING
PARAM1
PARAM2
PARAM3
RETURNING 復帰値
.
* IN PARAMETER
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
INVOKE PARAM1 "GET-VALUE" USING I RETURNING SEQ-VALUE
END-PERFORM.
* OUT PARAMETER
INVOKE SEQUENCE-LONG-10 "NEW" RETURNING PARAM2.
MOVE 10 TO SEQ-LENGTH OF PARAM2.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
COMPUTE SEQ-VALUE = I * 100
INVOKE PARAM2 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
* INOUT PARAMETER
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
INVOKE PARAM3 "GET-VALUE" USING I RETURNING SEQ-VALUE
COMPUTE SEQ-VALUE = SEQ-VALUE * 100
INVOKE PARAM3 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
* RESULT
INVOKE SEQUENCE-LONG-10 "NEW" RETURNING 復帰値.
MOVE 10 TO SEQ-LENGTH OF 復帰値.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
COMPUTE SEQ-VALUE = I * 10000
INVOKE 復帰値 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
END METHOD OP1.ポイント
inモードまたはinoutモードのパラメタの場合は、実際のデータ領域はすでに存在するため新たに確保する必要はありません。outモードのパラメタまたは復帰値の場合には実際の領域をサーバアプリケーションで確保する必要があります。