aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-06-23 06:31:56 +0200
committerSven Gothel <[email protected]>2023-06-23 06:31:56 +0200
commit9e61409658358834c2ba26c69c3efcbb5755c128 (patch)
tree4fec6e32d6f7b5a11a7a46e2dde0a3de6495f56c /src/java/com/jogamp/gluegen/CMethodBindingEmitter.java
parentf90a42bd693ab9d451902e69ad86359fae2510dc (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.java11
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(" }");