diff --git a/src/com/bdjb/api/AbstractInt.java b/src/com/bdjb/api/AbstractInt.java index 7b96610..145d904 100644 --- a/src/com/bdjb/api/AbstractInt.java +++ b/src/com/bdjb/api/AbstractInt.java @@ -18,6 +18,16 @@ abstract class AbstractInt extends Buffer { this.elementSize = elementSize; } + protected AbstractInt(long address, int[] dimensions, int elementSize) { + super(address, size(dimensions, elementSize)); + this.dimensions = dimensions; + this.elementSize = elementSize; + } + + protected AbstractInt(long address, int elementSize) { + this(address, new int[] {1}, elementSize); + } + protected AbstractInt(int elementSize) { this(new int[] {1}, elementSize); } diff --git a/src/com/bdjb/api/Buffer.java b/src/com/bdjb/api/Buffer.java index cc21883..09b368c 100644 --- a/src/com/bdjb/api/Buffer.java +++ b/src/com/bdjb/api/Buffer.java @@ -22,13 +22,24 @@ public class Buffer { private final int size; + private final boolean allocated; + public Buffer(int size) { - this.size = size; this.address = api.malloc(size); + this.size = size; + this.allocated = true; + } + + public Buffer(long address, int size) { + this.address = address; + this.size = size; + this.allocated = false; } public void finalize() { - api.free(address); + if (allocated) { + api.free(address); + } } public long address() { diff --git a/src/com/bdjb/api/Int16.java b/src/com/bdjb/api/Int16.java index 77a4ba9..6ad01cc 100644 --- a/src/com/bdjb/api/Int16.java +++ b/src/com/bdjb/api/Int16.java @@ -10,17 +10,20 @@ package com.bdjb.api; public final class Int16 extends AbstractInt { public static final int SIZE = 2; - public Int16(int[] dimensions) { - super(dimensions, SIZE); - } - public Int16() { super(SIZE); } - public Int16(short value) { - this(); - this.set(value); + public Int16(long address) { + super(address, SIZE); + } + + public Int16(int[] dimensions) { + super(dimensions, SIZE); + } + + public Int16(long address, int[] dimensions) { + super(address, dimensions, SIZE); } public short get() { diff --git a/src/com/bdjb/api/Int32.java b/src/com/bdjb/api/Int32.java index bccf4ac..0ea2b6f 100644 --- a/src/com/bdjb/api/Int32.java +++ b/src/com/bdjb/api/Int32.java @@ -10,17 +10,20 @@ package com.bdjb.api; public final class Int32 extends AbstractInt { public static final int SIZE = 4; - public Int32(int[] dimensions) { - super(dimensions, SIZE); - } - public Int32() { super(SIZE); } - public Int32(int value) { - this(); - this.set(value); + public Int32(long address) { + super(address, SIZE); + } + + public Int32(int[] dimensions) { + super(dimensions, SIZE); + } + + public Int32(long address, int[] dimensions) { + super(address, dimensions, SIZE); } public int get() { diff --git a/src/com/bdjb/api/Int64.java b/src/com/bdjb/api/Int64.java index 3824c47..6424257 100644 --- a/src/com/bdjb/api/Int64.java +++ b/src/com/bdjb/api/Int64.java @@ -10,17 +10,20 @@ package com.bdjb.api; public final class Int64 extends AbstractInt { public static final int SIZE = 8; - public Int64(int[] dimensions) { - super(dimensions, SIZE); - } - public Int64() { super(SIZE); } - public Int64(long value) { - this(); - this.set(value); + public Int64(long address) { + super(address, SIZE); + } + + public Int64(int[] dimensions) { + super(dimensions, SIZE); + } + + public Int64(long address, int[] dimensions) { + super(address, dimensions, SIZE); } public long get() { diff --git a/src/com/bdjb/api/Int8.java b/src/com/bdjb/api/Int8.java index 72b9a90..86cc40e 100644 --- a/src/com/bdjb/api/Int8.java +++ b/src/com/bdjb/api/Int8.java @@ -10,17 +10,20 @@ package com.bdjb.api; public final class Int8 extends AbstractInt { public static final int SIZE = 1; - public Int8(int[] dimensions) { - super(dimensions, SIZE); - } - public Int8() { super(SIZE); } - public Int8(byte value) { - this(); - this.set(value); + public Int8(long address) { + super(address, SIZE); + } + + public Int8(int[] dimensions) { + super(dimensions, SIZE); + } + + public Int8(long address, int[] dimensions) { + super(address, dimensions, SIZE); } public byte get() {