diff options
author | Sven Gothel <[email protected]> | 2023-06-23 06:31:56 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-06-23 06:31:56 +0200 |
commit | 9e61409658358834c2ba26c69c3efcbb5755c128 (patch) | |
tree | 4fec6e32d6f7b5a11a7a46e2dde0a3de6495f56c /src/java/com/jogamp/gluegen/CMethodBindingEmitter.java | |
parent | f90a42bd693ab9d451902e69ad86359fae2510dc (diff) |
GlueGen: Type: Have get{Base,Target}Type() stop at isFunctionPointer(), enhance API doc; Add getArrayBaseOrPointerTargetType() and getTargetFunction()
Added getArrayBaseOrPointerTargetType() returns getBaseType() for arrays or getTargetType() for pointer,
i.e. stops traversing if an elementType is a pointer and returns the elementType as target-type.
This resolves 'int* intPtrArray[10]', but also simplifies all cases of 'int** intPtrPtr' and 'int intPtr[10]' etc.
Since get{Base,Target}Type() returns the functionPointer, getTargetFunction() allows to retrieve the actual target function type.
Diffstat (limited to 'src/java/com/jogamp/gluegen/CMethodBindingEmitter.java')
-rw-r--r-- | src/java/com/jogamp/gluegen/CMethodBindingEmitter.java | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java b/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java index a7de97d..b48d77a 100644 --- a/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java +++ b/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java @@ -652,7 +652,7 @@ public class CMethodBindingEmitter extends FunctionEmitter { } } } else if( cArgType.isArray() ) { - cArgElementType = cArgType.asArray().getBaseType(); + cArgElementType = cArgType.getBaseType(); cArgElementType2 = null; } else { cArgElementType = null; @@ -814,7 +814,7 @@ public class CMethodBindingEmitter extends FunctionEmitter { unit.emitln(" for (_copyIndex = 0; _copyIndex < _tmpArrayLen; ++_copyIndex) {"); unit.emitln(" _tmpObj = (*env)->GetObjectArrayElement(env, " + javaArgName + ", _copyIndex);"); emitReturnDirectBufferAddress("_tmpObj", - cArgType.asArray().getBaseType().getCName(), + cArgType.getBaseType().getCName(), "("+convName + "_copy + _copyIndex)", false /* receivingIsPtrPtr */, null); @@ -1112,12 +1112,7 @@ public class CMethodBindingEmitter extends FunctionEmitter { unit.emitln(" " + arrayRes + " = (*env)->NewObjectArray(env, " + arrayResLength + ", (*env)->FindClass(env, \"java/nio/ByteBuffer\"), NULL);"); unit.emitln(" for (" + arrayIdx + " = 0; " + arrayIdx + " < " + arrayResLength + "; " + arrayIdx + "++) {"); final Type retType = binding.getCSymbol().getReturnType(); - Type pointerType; - if (retType.isPointer()) { - pointerType = retType.asPointer().getTargetType(); - } else { - pointerType = retType.asArray().getBaseType(); - } + final Type pointerType = retType.getArrayBaseOrPointerTargetType(); unit.emitln(" (*env)->SetObjectArrayElement(env, " + arrayRes + ", " + arrayIdx + ", (*env)->NewDirectByteBuffer(env, (void *)_res[" + arrayIdx + "], sizeof(" + pointerType.getCName() + ")));"); unit.emitln(" }"); |