diff options
author | Sven Gothel <[email protected]> | 2013-03-20 02:15:53 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-03-20 02:15:53 +0100 |
commit | 1610dbb4e4d1a1ecf31eb837a47e0f5be04afdac (patch) | |
tree | 89808f30f1f3937a46d872a161be7673ad516821 /src/java/com | |
parent | 4becdfa125b07ff969d6540e1112735b53cd15eb (diff) |
Fix intptr_t*, uintptr_t*, ptrdiff_t* and size_t* mapping, map them to PointerBuffer, since referenced memory-size is arch dependent
Added extensive PointerBuffer unit tests w/ new mapping in generated test class.
Diffstat (limited to 'src/java/com')
-rw-r--r-- | src/java/com/jogamp/gluegen/JavaEmitter.java | 7 | ||||
-rw-r--r-- | src/java/com/jogamp/gluegen/package.html | 8 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/java/com/jogamp/gluegen/JavaEmitter.java b/src/java/com/jogamp/gluegen/JavaEmitter.java index df6f00a..1a6c313 100644 --- a/src/java/com/jogamp/gluegen/JavaEmitter.java +++ b/src/java/com/jogamp/gluegen/JavaEmitter.java @@ -1245,7 +1245,7 @@ public class JavaEmitter implements GlueEmitter { // t is <type>[], we need to get <type> targetType = t.asArray().getElementType(); } - + // Handle Types of form pointer-to-type or array-of-type, like // char* or int[]; these are expanded out into Java primitive // arrays, NIO buffers, or both in expandMethodBinding @@ -1253,8 +1253,9 @@ public class JavaEmitter implements GlueEmitter { if (targetType.isVoid()) { return JavaType.createForCVoidPointer(); } else if (targetType.isInt()) { - // size_t and intptr_t is always a PointerBuffer since size is arch dependent - if ("size_t".equals(targetType.getName()) || "intptr_t".equals(targetType.getName())) { + final SizeThunk targetSizeThunk = targetType.getSize(); + if( null != targetSizeThunk && SizeThunk.POINTER == targetSizeThunk ) { + // Map intptr_t*, uintptr_t*, ptrdiff_t* and size_t* to PointerBuffer, since referenced memory-size is arch dependent return JavaType.forNIOPointerBufferClass(); } switch ((int) targetType.getSize(curMachDesc)) { diff --git a/src/java/com/jogamp/gluegen/package.html b/src/java/com/jogamp/gluegen/package.html index 7ea9d51..2b4f1fa 100644 --- a/src/java/com/jogamp/gluegen/package.html +++ b/src/java/com/jogamp/gluegen/package.html @@ -37,7 +37,13 @@ </table> <p> <b>Warning:</b> Try to avoid unspecified bit sized types, especially <b>long</b>, since it differs on Unix and Windows!<br/> - <b>Note 1:</b> Type <b>long</b> will result in broken code on Windows, since we don't differentiate the OS and it's bit size is ambiguous. + <b>Notes:</b> + <ol> + <li>Type <b>long</b> will result in broken code on Windows, since we don't differentiate the OS and it's bit size is ambiguous.</li> + <li>Anonymous void-pointer <i>void*</i> are mapped to NIO <i>Buffer</i>.</li> + <li>Pointers to pointer-size types like <i>intptr_t*</i>, <i>uintptr_t*</i>, <i>ptrdiff_t*</i> and <i>size_t*</i> are mapped to <i>PointerBuffer</i>, + to reflect the architecture depending storage size.</li> + </ol> </p> <h4>GlueGen Internal Alignment for Compound Data</h4> |