mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
Merge branch 'master' of dice:git/vm
This commit is contained in:
commit
ebbb45ad98
@ -1,3 +1,5 @@
|
|||||||
|
#include "math.h"
|
||||||
|
#include "stdlib.h"
|
||||||
#include "sys/time.h"
|
#include "sys/time.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
@ -22,7 +24,8 @@ Java_java_lang_System_getProperty(JNIEnv* e, jclass, jint code)
|
|||||||
LineSeparator = 100,
|
LineSeparator = 100,
|
||||||
FileSeparator = 101,
|
FileSeparator = 101,
|
||||||
OsName = 102,
|
OsName = 102,
|
||||||
JavaIoTmpdir = 103
|
JavaIoTmpdir = 103,
|
||||||
|
UserHome = 104
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (code) {
|
switch (code) {
|
||||||
@ -38,6 +41,14 @@ Java_java_lang_System_getProperty(JNIEnv* e, jclass, jint code)
|
|||||||
case JavaIoTmpdir:
|
case JavaIoTmpdir:
|
||||||
return e->NewStringUTF("/tmp");
|
return e->NewStringUTF("/tmp");
|
||||||
|
|
||||||
|
case UserHome:
|
||||||
|
return e->NewStringUTF("/home/scharff");
|
||||||
|
#ifdef WIN32
|
||||||
|
LPWSTR home = _wgetenv(L"USERPROFILE");
|
||||||
|
return JvNewString(reinterpret_cast<jchar*>(home), lstrlenW(home));
|
||||||
|
#else
|
||||||
|
return e->NewStringUTF(getenv("HOME"));
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
throwNew(e, "java/lang/RuntimeException", 0);
|
throwNew(e, "java/lang/RuntimeException", 0);
|
||||||
return 0;
|
return 0;
|
||||||
@ -70,8 +81,14 @@ Java_java_lang_System_doMapLibraryName(JNIEnv* e, jclass, jstring name)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" JNIEXPORT jdouble JNICALL
|
||||||
|
Java_java_lang_Math_floor(JNIEnv*, jclass, jdouble val)
|
||||||
|
{
|
||||||
|
return floor(val);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" JNIEXPORT jint JNICALL
|
extern "C" JNIEXPORT jint JNICALL
|
||||||
Java_java_lang_Double_fillBufferWithDouble(JNIEnv *e, jclass, jdouble val,
|
Java_java_lang_Double_fillBufferWithDouble(JNIEnv* e, jclass, jdouble val,
|
||||||
jbyteArray buffer, jint bufferSize) {
|
jbyteArray buffer, jint bufferSize) {
|
||||||
jboolean isCopy;
|
jboolean isCopy;
|
||||||
jbyte* buf = e->GetByteArrayElements(buffer, &isCopy);
|
jbyte* buf = e->GetByteArrayElements(buffer, &isCopy);
|
||||||
|
@ -301,13 +301,13 @@ public final class String implements Comparable<String> {
|
|||||||
return getBytes();
|
return getBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getChars(int srcOffset, int srcLength,
|
public void getChars(int srcOffset, int srcEnd,
|
||||||
char[] dst, int dstOffset)
|
char[] dst, int dstOffset)
|
||||||
{
|
{
|
||||||
if (srcOffset < 0 || srcOffset + srcLength > length) {
|
if (srcOffset < 0 || srcEnd > length) {
|
||||||
throw new IndexOutOfBoundsException();
|
throw new IndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
|
int srcLength = srcEnd-srcOffset;
|
||||||
if (data instanceof char[]) {
|
if (data instanceof char[]) {
|
||||||
char[] src = (char[]) data;
|
char[] src = (char[]) data;
|
||||||
System.arraycopy(src, offset + srcOffset, dst, dstOffset, srcLength);
|
System.arraycopy(src, offset + srcOffset, dst, dstOffset, srcLength);
|
||||||
|
@ -15,6 +15,7 @@ public abstract class System {
|
|||||||
private static final int FileSeparator = 101;
|
private static final int FileSeparator = 101;
|
||||||
private static final int OsName = 102;
|
private static final int OsName = 102;
|
||||||
private static final int JavaIoTmpdir = 103;
|
private static final int JavaIoTmpdir = 103;
|
||||||
|
private static final int UserHome = 104;
|
||||||
|
|
||||||
private static Property properties;
|
private static Property properties;
|
||||||
|
|
||||||
@ -50,6 +51,8 @@ public abstract class System {
|
|||||||
code = LineSeparator;
|
code = LineSeparator;
|
||||||
} else if (name.equals("file.separator")) {
|
} else if (name.equals("file.separator")) {
|
||||||
code = FileSeparator;
|
code = FileSeparator;
|
||||||
|
} else if (name.equals("user.home")) {
|
||||||
|
code = UserHome;
|
||||||
} else if (name.equals("os.name")) {
|
} else if (name.equals("os.name")) {
|
||||||
code = OsName;
|
code = OsName;
|
||||||
}
|
}
|
||||||
|
@ -6,17 +6,19 @@ public class ByteBuffer {
|
|||||||
private int capacity;
|
private int capacity;
|
||||||
private int position;
|
private int position;
|
||||||
private int limit;
|
private int limit;
|
||||||
|
private final boolean readOnly;
|
||||||
|
|
||||||
public static ByteBuffer allocate(int capacity) {
|
public static ByteBuffer allocate(int capacity) {
|
||||||
return new ByteBuffer(new byte[capacity]);
|
return new ByteBuffer(new byte[capacity], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ByteBuffer wrap(byte[] array) {
|
public static ByteBuffer wrap(byte[] array) {
|
||||||
return new ByteBuffer(array);
|
return new ByteBuffer(array, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ByteBuffer(byte[] array) {
|
private ByteBuffer(byte[] array, boolean readOnly) {
|
||||||
this.array = array;
|
this.array = array;
|
||||||
|
this.readOnly = readOnly;
|
||||||
arrayOffset = 0;
|
arrayOffset = 0;
|
||||||
capacity = array.length;
|
capacity = array.length;
|
||||||
limit = capacity;
|
limit = capacity;
|
||||||
@ -27,11 +29,17 @@ public class ByteBuffer {
|
|||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ByteBuffer clear() {
|
||||||
|
position = 0;
|
||||||
|
limit = capacity;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ByteBuffer slice() {
|
public ByteBuffer slice() {
|
||||||
ByteBuffer buf = new ByteBuffer(array);
|
ByteBuffer buf = new ByteBuffer(array, true);
|
||||||
buf.arrayOffset = arrayOffset + position;
|
buf.arrayOffset = arrayOffset + position;
|
||||||
buf.position = 0;
|
buf.position = 0;
|
||||||
buf.capacity = capacity - position;
|
buf.capacity = remaining();
|
||||||
buf.limit = buf.capacity;
|
buf.limit = buf.capacity;
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
@ -77,13 +85,15 @@ public class ByteBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer put(byte val) {
|
public ByteBuffer put(byte val) {
|
||||||
|
checkPut(1);
|
||||||
array[arrayOffset+(position++)] = val;
|
array[arrayOffset+(position++)] = val;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer put(ByteBuffer src) {
|
public ByteBuffer put(ByteBuffer src) {
|
||||||
|
checkPut(src.remaining());
|
||||||
put(src.array, src.arrayOffset + src.position, src.remaining());
|
put(src.array, src.arrayOffset + src.position, src.remaining());
|
||||||
position += src.remaining();
|
src.position += src.remaining();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,12 +102,14 @@ public class ByteBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer put(byte[] arr, int offset, int len) {
|
public ByteBuffer put(byte[] arr, int offset, int len) {
|
||||||
|
checkPut(len);
|
||||||
System.arraycopy(arr, offset, array, arrayOffset+position, len);
|
System.arraycopy(arr, offset, array, arrayOffset+position, len);
|
||||||
position += len;
|
position += len;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer putInt(int position, int val) {
|
public ByteBuffer putInt(int position, int val) {
|
||||||
|
checkPut(position, 4);
|
||||||
array[arrayOffset+position] = (byte)((val >> 24) & 0xff);
|
array[arrayOffset+position] = (byte)((val >> 24) & 0xff);
|
||||||
array[arrayOffset+position+1] = (byte)((val >> 16) & 0xff);
|
array[arrayOffset+position+1] = (byte)((val >> 16) & 0xff);
|
||||||
array[arrayOffset+position+2] = (byte)((val >> 8) & 0xff);
|
array[arrayOffset+position+2] = (byte)((val >> 8) & 0xff);
|
||||||
@ -106,18 +118,21 @@ public class ByteBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer putInt(int val) {
|
public ByteBuffer putInt(int val) {
|
||||||
|
checkPut(4);
|
||||||
putInt(position, val);
|
putInt(position, val);
|
||||||
position += 4;
|
position += 4;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer putShort(short val) {
|
public ByteBuffer putShort(short val) {
|
||||||
|
checkPut(2);
|
||||||
put((byte)((val >> 8) & 0xff));
|
put((byte)((val >> 8) & 0xff));
|
||||||
put((byte)(val & 0xff));
|
put((byte)(val & 0xff));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ByteBuffer putLong(long val) {
|
public ByteBuffer putLong(long val) {
|
||||||
|
checkPut(8);
|
||||||
putInt((int)(val >> 32));
|
putInt((int)(val >> 32));
|
||||||
putInt((int)val);
|
putInt((int)val);
|
||||||
return this;
|
return this;
|
||||||
@ -129,10 +144,12 @@ public class ByteBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public byte get() {
|
public byte get() {
|
||||||
|
checkGet(1);
|
||||||
return array[arrayOffset+(position++)];
|
return array[arrayOffset+(position++)];
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte get(int position) {
|
public byte get(int position) {
|
||||||
|
checkGet(position, 1);
|
||||||
return array[arrayOffset+position];
|
return array[arrayOffset+position];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +160,7 @@ public class ByteBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getInt() {
|
public int getInt() {
|
||||||
|
checkGet(4);
|
||||||
int i = get() << 24;
|
int i = get() << 24;
|
||||||
i |= (get() & 0xff) << 16;
|
i |= (get() & 0xff) << 16;
|
||||||
i |= (get() & 0xff) << 8;
|
i |= (get() & 0xff) << 8;
|
||||||
@ -151,14 +169,36 @@ public class ByteBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public short getShort() {
|
public short getShort() {
|
||||||
|
checkGet(2);
|
||||||
short s = (short)(get() << 8);
|
short s = (short)(get() << 8);
|
||||||
s |= get() & 0xff;
|
s |= get() & 0xff;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLong() {
|
public long getLong() {
|
||||||
|
checkGet(8);
|
||||||
long l = getInt() << 32;
|
long l = getInt() << 32;
|
||||||
l |= getInt() & 0xffffffff;
|
l |= getInt() & 0xffffffff;
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkPut(int amount) {
|
||||||
|
if (readOnly) throw new ReadOnlyBufferException();
|
||||||
|
if (amount > limit-position) throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkPut(int position, int amount) {
|
||||||
|
if (readOnly) throw new ReadOnlyBufferException();
|
||||||
|
if (position < 0 || position+amount > limit)
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkGet(int amount) {
|
||||||
|
if (amount > limit-position) throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkGet(int position, int amount) {
|
||||||
|
if (position < 0 || position+amount > limit)
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ public class SocketChannel extends SelectableChannel
|
|||||||
if (! connected) {
|
if (! connected) {
|
||||||
natThrowWriteError(socket);
|
natThrowWriteError(socket);
|
||||||
}
|
}
|
||||||
|
if (b.remaining() == 0) return 0;
|
||||||
int w = natWrite(socket, b.array(), b.arrayOffset() + b.position(), b.remaining());
|
int w = natWrite(socket, b.array(), b.arrayOffset() + b.position(), b.remaining());
|
||||||
if (w > 0) {
|
if (w > 0) {
|
||||||
b.position(b.position() + w);
|
b.position(b.position() + w);
|
||||||
|
@ -33,6 +33,7 @@ public class LinkedList<T> implements List<T> {
|
|||||||
front = rear = c;
|
front = rear = c;
|
||||||
} else {
|
} else {
|
||||||
c.next = front;
|
c.next = front;
|
||||||
|
front.prev = c;
|
||||||
front = c;
|
front = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,6 +45,7 @@ public class LinkedList<T> implements List<T> {
|
|||||||
front = rear = c;
|
front = rear = c;
|
||||||
} else {
|
} else {
|
||||||
c.prev = rear;
|
c.prev = rear;
|
||||||
|
rear.next = c;
|
||||||
rear = c;
|
rear = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,7 +105,7 @@ public class LinkedList<T> implements List<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean add(T element) {
|
public boolean add(T element) {
|
||||||
addFirst(element);
|
addLast(element);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user