Put libuuid JNI bridge in a dedicated package.
[lgpl/argeo-commons.git] / org.argeo.api.uuid / src / org / argeo / api / uuid / libuuid / DirectLibuuidFactory.java
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 (file)
index 0000000..df3bb31
--- /dev/null
@@ -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();
+       }
+
+}