6.1.6 配列オブジェクト操作
ここでは,Javaプログラム呼び出し機能が提供する配列オブジェクト操作のサービスルーチンについて説明します。
- 〈この項の構成〉
(1) CBLJNEWARRAY
CBLJNEWARRAYサービスルーチンは,配列オブジェクトのインスタンスを生成して,そのJavaオブジェクト参照を返します。
取得したJavaオブジェクト参照の扱いは,必ずJavaオブジェクト参照の使用ガイドラインに従ってください。Javaオブジェクト参照の使用ガイドラインについては,「3.2.5 Javaオブジェクト参照の使用ガイドライン」を参照してください。
- 形式
-
CALL 'CBLJNEWARRAY' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,作成する配列の型を示す文字列を英数字項目で指定します。英数字項目のサイズは,CBLJENV集団項目のCBLJSTRMAXLEN項目に指定した値と同じ値を指定してください。
配列の型と配列の型を示す文字列を次の表に示します。
表6‒9 配列の型と配列の型を示す文字列 項番
配列の型
配列の型を示す文字列
1
byte配列
[B
2
char配列
[C
3
short配列
[S
4
int配列
[I
5
long配列
[J
6
float配列
[F
7
double配列
[D
8
boolean配列
[Z
9
オブジェクト配列
[Lクラス完全修飾名;
10
配列オブジェクトの配列
[配列の型の文字列
2次元文字列配列の指定例を次に示します。
例)
[[Ljava/lang/String;
-
引数3には,作成する配列の要素数を持つ4バイト2進形式の数字項目を指定します。
-
引数4には,配列オブジェクトのJavaオブジェクト参照を受け取るポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
配列オブジェクトの生成に失敗した場合は実行時エラーとなります。
(2) CBLJARRAYLENGTH
CBLJARRAYLENGTHサービスルーチンは,配列オブジェクトの要素数を返します。
- 形式
-
CALL 'CBLJARRAYLENGTH' USING 引数1 引数2 引数3.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,要素数を受け取る4バイト2進形式の数字項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
長さの取得に失敗した場合は実行時エラーとなります。
(3) CBLJSETOBJARRAY
CBLJSETOBJARRAYサービスルーチンは,オブジェクト型の配列オブジェクトのインデクスが示す要素に,オブジェクトを格納します。
- 形式
-
CALL 'CBLJSETOBJARRAY' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,インデクスを持つ4バイト2進形式の数字項目を指定します。
-
引数4には,格納するJavaオブジェクト参照を持つポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
設定に失敗した場合は実行時エラーとなります。
- 注意事項
-
引数3には,Javaの要素のインデクス(0〜(配列の要素の数-1))を指定する必要があります。
(4) CBLJGETOBJARRAY
CBLJGETOBJARRAYサービスルーチンは,オブジェクト型の配列オブジェクトのインデクスの示す要素からオブジェクトを取り出します。
取り出したJavaオブジェクト参照の扱いは,必ずJavaオブジェクト参照の使用ガイドラインに従ってください。Javaオブジェクト参照の使用ガイドラインについては,「3.2.5 Javaオブジェクト参照の使用ガイドライン」を参照してください。
- 形式
-
CALL 'CBLJGETOBJARRAY' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,インデクスを持つ4バイト2進形式の数字項目を指定します。
-
引数4には,Javaオブジェクト参照を受け取るポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
取り出しに失敗した場合は実行時エラーとなります。
- 注意事項
-
引数3には,Javaの要素のインデクス(0〜(配列の要素の数-1))を指定する必要があります。
(5) CBLJGETARRAYADDR
CBLJGETARRAYADDRサービスルーチンは,基本型の配列オブジェクトから基本型配列のアドレスを取得します。
操作が完了した基本型配列の内容はCBLJRELEASEARRAYサービスルーチンで配列オブジェクトに反映します。
- 形式
-
CALL 'CBLJGETARRAYADDR' USING 引数1 引数2 引数3.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,基本型配列のアドレスを受け取るポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
取得に失敗した場合は実行時エラーとなります。
- 注意事項
-
配列の値を変更しない場合も,取得した配列のアドレスが不要になったときにCBLJRELEASEARRAYサービスルーチンを呼び出してください。呼び出さない場合は,領域が解放されないでメモリ不足の要因となることがあります。
(6) CBLJRELEASEARRAY
CBLJRELEASEARRAYサービスルーチンは,CBLJGETARRAYADDRで取得した基本型配列の内容変更を配列オブジェクトに反映させて,基本型配列の領域を解放します。
- 形式
-
CALL 'CBLJRELEASEARRAY' USING 引数1 引数2 引数3.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,基本型配列のアドレスを持つポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
反映に失敗した場合は実行時エラーとなります。