mirror of
https://github.com/TheOfficialFloW/bd-jb
synced 2024-11-28 11:42:22 -05:00
Make AbstractInt subclass of Buffer and add Text class.
This commit is contained in:
parent
44ae595424
commit
c80b753e03
3
Makefile
3
Makefile
@ -10,9 +10,10 @@ CLASSES = \
|
|||||||
$(SRC)/com/bdjb/Exploit.java \
|
$(SRC)/com/bdjb/Exploit.java \
|
||||||
$(SRC)/com/bdjb/JIT.java \
|
$(SRC)/com/bdjb/JIT.java \
|
||||||
$(SRC)/com/bdjb/Screen.java \
|
$(SRC)/com/bdjb/Screen.java \
|
||||||
$(SRC)/com/bdjb/api/AbstractInt.java \
|
|
||||||
$(SRC)/com/bdjb/api/API.java \
|
$(SRC)/com/bdjb/api/API.java \
|
||||||
$(SRC)/com/bdjb/api/Buffer.java \
|
$(SRC)/com/bdjb/api/Buffer.java \
|
||||||
|
$(SRC)/com/bdjb/api/Text.java \
|
||||||
|
$(SRC)/com/bdjb/api/AbstractInt.java \
|
||||||
$(SRC)/com/bdjb/api/Int8.java \
|
$(SRC)/com/bdjb/api/Int8.java \
|
||||||
$(SRC)/com/bdjb/api/Int16.java \
|
$(SRC)/com/bdjb/api/Int16.java \
|
||||||
$(SRC)/com/bdjb/api/Int32.java \
|
$(SRC)/com/bdjb/api/Int32.java \
|
||||||
|
@ -7,54 +7,28 @@
|
|||||||
|
|
||||||
package com.bdjb.api;
|
package com.bdjb.api;
|
||||||
|
|
||||||
abstract class AbstractInt {
|
abstract class AbstractInt extends Buffer {
|
||||||
protected static final API api;
|
private final int[] dimensions;
|
||||||
|
|
||||||
static {
|
private final int elementSize;
|
||||||
try {
|
|
||||||
api = API.getInstance();
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new ExceptionInInitializerError(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final long address;
|
protected AbstractInt(int[] dimensions, int elementSize) {
|
||||||
|
super(size(dimensions, elementSize));
|
||||||
protected final int size;
|
|
||||||
|
|
||||||
protected final int[] dimensions;
|
|
||||||
|
|
||||||
protected AbstractInt(int[] dimensions) {
|
|
||||||
this.dimensions = dimensions;
|
this.dimensions = dimensions;
|
||||||
this.size = size(dimensions);
|
this.elementSize = elementSize;
|
||||||
this.address = api.malloc(size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AbstractInt() {
|
protected AbstractInt(int elementSize) {
|
||||||
this(new int[] {1});
|
this(new int[] {1}, elementSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract int elementSize();
|
static int size(int[] dimensions, int elementSize) {
|
||||||
|
|
||||||
public void finalize() {
|
|
||||||
api.free(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
public long address() {
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size() {
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size(int[] dimensions) {
|
|
||||||
assert (dimensions.length > 0);
|
assert (dimensions.length > 0);
|
||||||
int size = 1;
|
int size = 1;
|
||||||
for (int i = 0; i < dimensions.length; i++) {
|
for (int i = 0; i < dimensions.length; i++) {
|
||||||
size *= dimensions[i];
|
size *= dimensions[i];
|
||||||
}
|
}
|
||||||
size *= elementSize();
|
size *= elementSize;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,14 +40,8 @@ abstract class AbstractInt {
|
|||||||
offset += stride * indices[i];
|
offset += stride * indices[i];
|
||||||
stride *= dimensions[i];
|
stride *= dimensions[i];
|
||||||
}
|
}
|
||||||
offset *= elementSize();
|
offset *= elementSize;
|
||||||
checkOffset(offset);
|
checkOffset(offset, elementSize);
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkOffset(int offset) {
|
|
||||||
if (offset < 0 || (offset + elementSize()) > size) {
|
|
||||||
throw new IndexOutOfBoundsException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
package com.bdjb.api;
|
package com.bdjb.api;
|
||||||
|
|
||||||
public class Buffer {
|
public class Buffer {
|
||||||
private static final API api;
|
protected static final API api;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
@ -18,9 +18,9 @@ public class Buffer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final long address;
|
protected final long address;
|
||||||
|
|
||||||
private final int size;
|
protected final int size;
|
||||||
|
|
||||||
public Buffer(int size) {
|
public Buffer(int size) {
|
||||||
this.size = size;
|
this.size = size;
|
||||||
@ -84,11 +84,16 @@ public class Buffer {
|
|||||||
api.memcpy(address + offset, buffer.address(), buffer.size());
|
api.memcpy(address + offset, buffer.address(), buffer.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void put(int offset, byte[] buffer) {
|
||||||
|
checkOffset(offset, buffer.length);
|
||||||
|
api.memcpy(address + offset, buffer, buffer.length);
|
||||||
|
}
|
||||||
|
|
||||||
public void fill(byte value) {
|
public void fill(byte value) {
|
||||||
api.memset(address, value, size);
|
api.memset(address, value, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkOffset(int offset, int length) {
|
protected void checkOffset(int offset, int length) {
|
||||||
if (offset < 0 || length < 0 || (offset + length) > size) {
|
if (offset < 0 || length < 0 || (offset + length) > size) {
|
||||||
throw new IndexOutOfBoundsException();
|
throw new IndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,11 @@ public final class Int16 extends AbstractInt {
|
|||||||
public static final int SIZE = 2;
|
public static final int SIZE = 2;
|
||||||
|
|
||||||
public Int16(int[] dimensions) {
|
public Int16(int[] dimensions) {
|
||||||
super(dimensions);
|
super(dimensions, SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int16() {
|
public Int16() {
|
||||||
super();
|
super(SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int16(short value) {
|
public Int16(short value) {
|
||||||
@ -23,23 +23,19 @@ public final class Int16 extends AbstractInt {
|
|||||||
this.set(value);
|
this.set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int elementSize() {
|
|
||||||
return SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public short get() {
|
public short get() {
|
||||||
return api.read16(address);
|
return getShort(0x00);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(short value) {
|
public void set(short value) {
|
||||||
api.write16(address, value);
|
putShort(0x00, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public short get(int[] indices) {
|
public short get(int[] indices) {
|
||||||
return api.read16(address + offset(indices));
|
return getShort(offset(indices));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(int[] indices, short value) {
|
public void set(int[] indices, short value) {
|
||||||
api.write16(address + offset(indices), value);
|
putShort(offset(indices), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,11 @@ public final class Int32 extends AbstractInt {
|
|||||||
public static final int SIZE = 4;
|
public static final int SIZE = 4;
|
||||||
|
|
||||||
public Int32(int[] dimensions) {
|
public Int32(int[] dimensions) {
|
||||||
super(dimensions);
|
super(dimensions, SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int32() {
|
public Int32() {
|
||||||
super();
|
super(SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int32(int value) {
|
public Int32(int value) {
|
||||||
@ -23,23 +23,19 @@ public final class Int32 extends AbstractInt {
|
|||||||
this.set(value);
|
this.set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int elementSize() {
|
|
||||||
return SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int get() {
|
public int get() {
|
||||||
return api.read32(address);
|
return getInt(0x00);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(int value) {
|
public void set(int value) {
|
||||||
api.write32(address, value);
|
putInt(0x00, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int get(int[] indices) {
|
public int get(int[] indices) {
|
||||||
return api.read32(address + offset(indices));
|
return getInt(offset(indices));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(int[] indices, int value) {
|
public void set(int[] indices, int value) {
|
||||||
api.write32(address + offset(indices), value);
|
putInt(offset(indices), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,11 @@ public final class Int64 extends AbstractInt {
|
|||||||
public static final int SIZE = 8;
|
public static final int SIZE = 8;
|
||||||
|
|
||||||
public Int64(int[] dimensions) {
|
public Int64(int[] dimensions) {
|
||||||
super(dimensions);
|
super(dimensions, SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int64() {
|
public Int64() {
|
||||||
super();
|
super(SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int64(long value) {
|
public Int64(long value) {
|
||||||
@ -23,23 +23,19 @@ public final class Int64 extends AbstractInt {
|
|||||||
this.set(value);
|
this.set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int elementSize() {
|
|
||||||
return SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long get() {
|
public long get() {
|
||||||
return api.read64(address);
|
return getLong(0x00);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(long value) {
|
public void set(long value) {
|
||||||
api.write64(address, value);
|
putLong(0x00, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long get(int[] indices) {
|
public long get(int[] indices) {
|
||||||
return api.read64(address + offset(indices));
|
return getLong(offset(indices));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(int[] indices, long value) {
|
public void set(int[] indices, long value) {
|
||||||
api.write64(address + offset(indices), value);
|
putLong(offset(indices), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,11 @@ public final class Int8 extends AbstractInt {
|
|||||||
public static final int SIZE = 1;
|
public static final int SIZE = 1;
|
||||||
|
|
||||||
public Int8(int[] dimensions) {
|
public Int8(int[] dimensions) {
|
||||||
super(dimensions);
|
super(dimensions, SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int8() {
|
public Int8() {
|
||||||
super();
|
super(SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Int8(byte value) {
|
public Int8(byte value) {
|
||||||
@ -23,23 +23,19 @@ public final class Int8 extends AbstractInt {
|
|||||||
this.set(value);
|
this.set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int elementSize() {
|
|
||||||
return SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte get() {
|
public byte get() {
|
||||||
return api.read8(address);
|
return getByte(0x00);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(byte value) {
|
public void set(byte value) {
|
||||||
api.write8(address, value);
|
putByte(0x00, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte get(int[] indices) {
|
public byte get(int[] indices) {
|
||||||
return api.read8(address + offset(indices));
|
return getByte(offset(indices));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(int[] indices, byte value) {
|
public void set(int[] indices, byte value) {
|
||||||
api.write8(address + offset(indices), value);
|
putByte(offset(indices), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
22
src/com/bdjb/api/Text.java
Normal file
22
src/com/bdjb/api/Text.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 Andy Nguyen
|
||||||
|
*
|
||||||
|
* This software may be modified and distributed under the terms
|
||||||
|
* of the MIT license. See the LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.bdjb.api;
|
||||||
|
|
||||||
|
public class Text extends Buffer {
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
public Text(String text) {
|
||||||
|
super(text.length() + 1);
|
||||||
|
this.text = text;
|
||||||
|
api.strcpy(address, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user