X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.uuid%2Fsrc%2Forg%2Fargeo%2Fapi%2Fuuid%2Flibuuid%2FDirectLibuuidFactory.java;fp=org.argeo.api.uuid%2Fsrc%2Forg%2Fargeo%2Fapi%2Fuuid%2Flibuuid%2FDirectLibuuidFactory.java;h=df3bb317427a3244acfa150c306100f4369d292a;hb=13467496582e30552566f872efbd25114716bb2f;hp=0000000000000000000000000000000000000000;hpb=aa5977955d1d0f89c8d5c3ffdb41b160c0c6b0a3;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.uuid/src/org/argeo/api/uuid/libuuid/DirectLibuuidFactory.java b/org.argeo.api.uuid/src/org/argeo/api/uuid/libuuid/DirectLibuuidFactory.java new file mode 100644 index 000000000..df3bb3174 --- /dev/null +++ b/org.argeo.api.uuid/src/org/argeo/api/uuid/libuuid/DirectLibuuidFactory.java @@ -0,0 +1,58 @@ +package org.argeo.api.uuid.libuuid; + +import java.nio.ByteBuffer; +import java.util.UUID; + +import org.argeo.api.uuid.UuidBinaryUtils; +import org.argeo.api.uuid.UuidFactory; + +/** + * @deprecated Rather use {@link LibuuidFactory}. This is just a proof of + * concept that using shared memory in order to limit the JNI + * overhead does not yield any significant performance gain. But it + * could be an approach for computing and transferring bulk UUIDs + * computations in one go, vi + * {@link ByteBuffer#allocateDirect(int)}. + */ +public class DirectLibuuidFactory implements UuidFactory { + static { + System.loadLibrary("Java_org_argeo_api_uuid_libuuid"); + } + + @Override + public UUID get() { + return timeUUID(); + } + + @Override + public UUID timeUUID() { + ByteBuffer buf = ByteBuffer.allocateDirect(16); + timeUUID(buf); + byte[] arr = new byte[16]; + buf.get(arr); + return UuidBinaryUtils.fromBytes(arr); + } + + protected native void timeUUID(ByteBuffer uuidBuf); + + @Override + public UUID nameUUIDv5(UUID namespace, byte[] data) { + throw new UnsupportedOperationException(); + } + + @Override + public UUID nameUUIDv3(UUID namespace, byte[] data) { + throw new UnsupportedOperationException(); + } + + @Override + public UUID randomUUIDStrong() { + throw new UnsupportedOperationException(); + } + + @Override + public UUID randomUUIDWeak() { + throw new UnsupportedOperationException(); + } + +}