I tried to read an object from a pointer then set another pointer but I got the following error.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Cannot access to memory data of length 16 at offset 0 : valid memory start is 139964675668992, valid memory size is 8
at org.bridj.Pointer.invalidPeer(Pointer.java:1423)
at org.bridj.Pointer.getCheckedPeer(Pointer.java:1432)
at org.bridj.Pointer.copyBytesAtOffsetTo(Pointer.java:5029)
at org.bridj.Pointer.copyTo(Pointer.java:5109)
at org.bridj.Pointer.copyTo(Pointer.java:5101)
at org.bridj.CommonPointerIOs$NativeObjectPointerIO.set(CommonPointerIOs.java:80)
at org.bridj.CommonPointerIOs$NativeObjectPointerIO.set(CommonPointerIOs.java:41)
at org.bridj.Pointer.set(Pointer.java:2110)
at org.bridj.Pointer.set(Pointer.java:2069)
at OCLTest.main(OCLTest.java:57)
public class OCLTest {
public static class Point2D extends StructObject {
public Point2D() {}
public Point2D(Pointer pointer) {super(pointer);}
@org.bridj.ann.Field(0)
public int x() {
return io.getIntField(this, 0);
}
@org.bridj.ann.Field(0)
public Point2D x(int x) {
io.setIntField(this, 0, x);
return this;
}
@org.bridj.ann.Field(1)
public int y() {
return io.getIntField(this, 1);
}
@org.bridj.ann.Field(1)
public Point2D y(int y) {
io.setIntField(this, 1, y);
return this;
}
}
public static void main(String[] args) {
CLContext ctx = JavaCL.createBestContext();
CLQueue q = ctx.createDefaultQueue();
Point2D p1 = new Point2D().x(1).y(2);
Point2D p2 = new Point2D().x(2).y(5);
Pointer<Point2D> ptr = Pointer.allocateArray(Point2D.class, 2);
ptr.set(0, p1);
ptr.set(1, p2);
CLBuffer<Point2D> buf = ctx.createBuffer(CLMem.Usage.InputOutput, ptr);
Pointer<Point2D> readptr = buf.read(q);
q.finish();
Point2D readp = readptr.get(0);
Pointer<Point2D> newptr = Pointer.allocate(Point2D.class);
newptr.set(readp); // <-- Error
}
}