[jffi-next] 18/24: Type that describes an array (cherry picked from commit 2150fce31ccc5b1da3367a8c9b553999cd0d20ee)

Tim Potter tpot-guest at moszumanska.debian.org
Wed Mar 4 04:51:32 UTC 2015


This is an automated email from the git hooks/post-receive script.

tpot-guest pushed a commit to tag 0.6.5
in repository jffi-next.

commit 66eaa01685f2325c6dd1549f904d647142486918
Author: Wayne Meissner <wmeissner at gmail.com>
Date:   Fri Aug 21 19:14:32 2009 +1000

    Type that describes an array
    (cherry picked from commit 2150fce31ccc5b1da3367a8c9b553999cd0d20ee)
---
 src/com/kenai/jffi/Array.java | 65 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/src/com/kenai/jffi/Array.java b/src/com/kenai/jffi/Array.java
new file mode 100644
index 0000000..de4280d
--- /dev/null
+++ b/src/com/kenai/jffi/Array.java
@@ -0,0 +1,65 @@
+
+package com.kenai.jffi;
+
+/**
+ * Describes the layout of a C array
+ */
+public final class Array extends Type {
+    /* Keep a strong reference to the element types so it is not GCed */
+    private final Type elementType;
+
+    private final int length;
+
+    /**
+     * Creates a new C array layout description.
+     *
+     * @param fields The fields contained in the struct.
+     */
+    public Array(Type elementType, int length) {
+        super(newArray(elementType, length));
+        this.elementType = elementType;
+        this.length = length;
+    }
+
+    /**
+     * Creates a libffi ffi_type* handle for the array.
+     *
+     * Since libffi doesn't know about arrays, we fake them by defining an
+     * aggregate (struct) with <tt>length</tt> fields of type <tt>elementType</tt>
+     */
+    private static final long newArray(Type elementType, int length) {
+        long[] handles = new long[length];
+        for (int i = 0; i < handles.length; i++) {
+            handles[i] = elementType.handle();
+        }
+
+        return Foreign.getInstance().newStruct(handles, false);
+    }
+
+    /**
+     * Returns the type of elements in the array
+     *
+     * @return The <tt>Type</tt> of the elements in the array
+     */
+    public final Type getElementType() {
+        return elementType;
+    }
+
+    /**
+     * Returns the number of elements in the array
+     *
+     * @return The number of elements in the array
+     */
+    public final int length() {
+        return length;
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        try {
+            Foreign.getInstance().freeStruct(handle);
+        } finally {
+            super.finalize();
+        }
+    }
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jffi-next.git



More information about the pkg-java-commits mailing list