org.jocl.Pointerは、C/C++のvoidポインタをJavaのオブジェクトにラップしたものです。基本的にこのPointerオブジェクトはスタティックファクトリメソッドとコンストラクタを持つだけのシンプルなオブジェクトです。Pointerオブジェクト自体は、voidポインタ、Cポインタを理解することは不要です。
public final class Pointer extends NativePointerObject
Pointerオブジェクトは複数のコンストラクタを持ちますが、バッファを指すポインタを生成するのが役割です。
protected Pointer(Buffer buffer) { super(buffer); }
親クラスであるNativePointerObjectのコンストラクタは以下のようになっています。
private NativePointerObject pointers[]; NativePointerObject(Buffer buffer) { this.buffer = buffer; pointers = null; byteOffset = 0; }
このコンストラクタは引数bufferを指すポインタオブジェクトを生成します。つまりオフセット0のバッファオブジェクトを生成しています。
最後にPointerオブジェクトのスタティックファクトリメソッドについても軽く紹介させていただきます。メソッド名は「to」か「toXXX」という名称で、以下のようにバッファオブジェクトを指すPointerオブジェクトを生成しています。
public static Pointer to(byte values[]) { return new Pointer(ByteBuffer.wrap(values)); } public static Pointer to(int values[]) { return new Pointer(IntBuffer.wrap(values)); } public static Pointer to(float values[]) { return new Pointer(FloatBuffer.wrap(values)); }
これらのファクトリーメソッドの呼び出しは以下のようにします。
int[] data = new int[]{1,2,3} Pointer.to(data)
これだけでint/float/byteなどのプリミティブ型を指すポインタオブジェクトの生成ができます。
Copyright 2018-2019, by Masaki Komatsu