diff options
author | Sven Gothel <[email protected]> | 2023-06-16 02:16:20 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-06-16 02:16:20 +0200 |
commit | 8b127c4c1dd26fcb1756805ddb83729203161f78 (patch) | |
tree | f8563a0e39d293bc070ef01e457cfe08ee44096d /src/junit/com/jogamp/gluegen/test | |
parent | aeadfab9572e4b441b1bc1f0708cf4c72dfe181e (diff) |
GlueGen Struct [5]: Revised Struct Mapping + Documentation
GlueGen Revised Struct Mapping (esp pointer to array or single element), Struct String Charset, .. and Documentation
- Documentation:
- Added README.md
Let's have a proper face for the git repo
- Added doc/GlueGen_Mapping.md (and its html conversion doc/GlueGen_Mapping.html)
Created a new document covering application and implementation details suitable for users/devs.
- Added doc/JogAmpMacOSVersions.md conversion to doc/JogAmpMacOSVersions.html
- Updated www/index.html
- Use *CodeUnit instead of PrintWriter, representing a Java or C code unit covering a set of functions and structs.
The CCodeUnit also handles common code shared by its unit across functions etc.
- Dropping 'static initializer', as its no more required
due to simplified `JVMUtil_NewDirectByteBufferCopy()` variant.
- Revised Struct Mapping:
- Pure Java implementation to map primitive and struct fields within a struct
by utilizing ElementBuffer.
Only 'Function Pointer' fields within a struct require native code.
Exposes `static boolean usesNativeCode()` to query whether native code is used/required.
- Transparent native memory address API
Expose `long getDirectBufferAddress()` and `static TK_Struct derefPointer(long addr)`,
allowing to
- pass the native struct-pointer with native code
- reconstruct the struct from a native struct-pointer
- have a fully functional `TK_Struct.derefPointer(struct.getDirectBufferAddress())` cycle.
- Add 'boolean is<Val>Null() to query whether a pointer (array) is NULL
- *Changed* array get/set method for more flexibility alike `System.arraycopy(src, srcPos, dest, destPos, len)`,
where 'src' is being dropped for the getter and 'dest' is being dropped for the setter
as both objects are reflected by the struct instance.
- *Changed* `get<Val>ArrayLength()` -> `get<Val>ElemCount()` for clarity
- Considering all ConstElemCount values with config 'ReturnedArrayLength <int>'
to be owned by native code -> NativeOwnership -> Not changing the underlying memory region!
JavaOwnership is considered for all pointer-arrays not of NativeOwnership.
Hence any setter on a NativeOwnership pointer-array will fail with non-matching elem-count.
- Add 'release<Val>()' for JavaOwnership pointer-arrays,
allowing to release the Java owned native memory incl. null-ing pointer and set<Val>ElemCount(0).
- Support setter for 'const <type>*' w/ JavaOwnership, i.e. pointer to const value of a primitive or struct,
setter and getter using pointer to array or single element in general.
- Added Config `ImmutableAccess symbol` to disable all setter for whole struct or a field
- Added Config `MaxOneElement symbol` to restrict a pointer to maximum one element and unset
initial value (zero elements)
- Added Config `ReturnsStringOnly symbol` to restrict mapping only to a Java String,
dropping the ByteBuffer variant for 'char'
- String mapping default is UTF-8 and can be read and set via [get|set]Charset(..) per class.
- Dynamic string length retrieval in case no `ReturnedArrayLength` has been configured
has changed from `strlen()` to `strnlen(aptr, max_len)` to be on the safe site.
The maximum length default is 8192 bytes and can be read and set via [get|set]MaxStrnlen(..) per class.
FIXME: strnlen(..) using EOS byte non-functional for non 8-bit codecs like UTF-8, US-ASCII.
This is due to e.g. UTF-16 doesn't use an EOS byte, but interprets it as part of a code point.
- TODO: Perhaps a few more unit tests
- TODO: Allow plain 'int' to be mapped in structs IFF their size is same for all MachineDescriptions used.
Currently this is the case -> 4 bytes like int32_t.
Diffstat (limited to 'src/junit/com/jogamp/gluegen/test')
10 files changed, 1897 insertions, 520 deletions
diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java b/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java index 34cd925..ed23f54 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java @@ -40,6 +40,7 @@ import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.nio.LongBuffer; +import java.nio.charset.Charset; import java.util.Arrays; import jogamp.common.os.MachineDataInfoRuntime; @@ -1252,7 +1253,7 @@ public class BaseClass extends SingletonJunitCase { Assert.assertEquals(2, surface.getClipSize()); - final TK_Dimension[] allclips = surface.getClips(0, new TK_Dimension[surface.getClipSize()]); + final TK_Dimension[] allclips = surface.getClips(0, new TK_Dimension[surface.getClipSize()], 0, surface.getClipSize()); for(int i=0; i<surface.getClipSize(); i++) { final TK_Dimension clip0 = surface.getClip(i); @@ -1262,7 +1263,7 @@ public class BaseClass extends SingletonJunitCase { Assert.assertEquals(0x44444444 * (i+1) + 0x44444444, clip0.getHeight()); final TK_Dimension[] clip1 = new TK_Dimension[1]; - surface.getClips(i, clip1); + surface.getClips(i, clip1, 0, 1); Assert.assertEquals(0x44444444 * (i+1) + 0x11111111, clip1[0].getX()); Assert.assertEquals(0x44444444 * (i+1) + 0x22222222, clip1[0].getY()); Assert.assertEquals(0x44444444 * (i+1) + 0x33333333, clip1[0].getWidth()); @@ -1317,10 +1318,10 @@ public class BaseClass extends SingletonJunitCase { } final TK_DimensionPair dimPair = TK_DimensionPair.create(); - dimPair.setPair(0, sumands); + dimPair.setPair(sumands, 0, 0, sumands.length); { sub++; - final TK_Dimension[] dimsGet = dimPair.getPair(0, new TK_Dimension[2]); + final TK_Dimension[] dimsGet = dimPair.getPair(0, new TK_Dimension[2], 0, 2); assertDim("ch11."+sub+": dimsGet[0] ", 11, 22, 33, 44, dimsGet[0]); assertDim("ch11."+sub+": dimsGet[1] ", 1, 2, 3, 4, dimsGet[1]); } @@ -1388,430 +1389,865 @@ public class BaseClass extends SingletonJunitCase { } } - /** Test array and pointer bindings of structs */ - public void chapter12TestStructArrayModelConst(final Bindingtest1 binding) throws Exception { - final TK_ModelConst model = binding.createModelConst(); + /** Primitive.ConstValue.int32.Pointer - read access */ + private void chapter12_03aTestTKFieldConstValueInt32ReadAccess(final TK_Field model) { + // Primitive.ConstValue.int32.Array - read only + Assert.assertEquals(88, model.getConstInt32ArrayConstOneElem()); + Assert.assertEquals(3, TK_Field.getConstInt32ArrayConstLenElemCount()); + { + final int size = TK_Field.getConstInt32ArrayConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getConstInt32ArrayConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32ArrayConstLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(1 + i, all[i]); + Assert.assertEquals(1 + i, allB.get(i)); + final int[] s = model.getConstInt32ArrayConstLen(i /* srcPos */, new int[3] /* dest */, 1 /* destPos */, 1 /* length */); + Assert.assertEquals(1 + i, s[1]); + } + } + + // Primitive.ConstValue.int32.Pointer - read + Assert.assertEquals(1, TK_Field.getConstInt32PointerConstOneElemElemCount()); + Assert.assertEquals(false, model.isConstInt32PointerConstOneElemNull()); + Assert.assertEquals(10, model.getConstInt32PointerConstOneElem()); - Assert.assertEquals(3, model.getIntxxPointerCustomLenVal()); - Assert.assertEquals(3, model.getInt32PointerCustomLenVal()); - Assert.assertEquals(3, TK_ModelConst.getInt32ArrayFixedLenArrayLength()); - Assert.assertEquals(3, TK_ModelConst.getStructArrayFixedLenArrayLength()); - Assert.assertEquals(3, model.getStructPointerCustomLenVal()); + Assert.assertEquals(0, model.getConstInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerMaxOneElemNull()); + { + Exception e = null; + try { + @SuppressWarnings("unused") + final int i = model.getConstInt32PointerMaxOneElem(); // NULL -> exception + } catch(final Exception _e) { e = _e; } + Assert.assertNotNull(e); + System.err.println("Expected exception: "+e); + } - // field: int32ArrayFixedLen - // CType['int32_t *', size [fixed false, lnx64 12], [array*1]], with array length of 3 + Assert.assertEquals(3, TK_Field.getConstInt32PointerConstLenElemCount()); + Assert.assertEquals(false, model.isConstInt32PointerConstLenNull()); { - final int size = TK_ModelConst.getInt32ArrayFixedLenArrayLength(); - final int[] all = model.getInt32ArrayFixedLen(0, new int[size]); - final IntBuffer allB = model.getInt32ArrayFixedLen(); + final int size = TK_Field.getConstInt32PointerConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getConstInt32PointerConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerConstLen(); + Assert.assertEquals(size, all.length); Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { Assert.assertEquals(21 + i, all[i]); Assert.assertEquals(21 + i, allB.get(i)); - final int[] s = model.getInt32ArrayFixedLen(i, new int[1]); - Assert.assertEquals(21 + i, s[0]); + final int[] s = model.getConstInt32PointerConstLen(i /* srcPos */, new int[3] /* dest */, 2 /* destPos */, 1 /* length */); + Assert.assertEquals(21 + i, s[2]); } } - // field: int32ArrayOneElem - // CType['int32_t *', size [fixed false, lnx64 4], [array*1]], with array length of 1 + Assert.assertEquals(0, model.getConstInt32PointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerVariaLenNull()); { - Assert.assertEquals(30, model.getInt32ArrayOneElem()); + Exception e1 = null; + try { + @SuppressWarnings("unused") + final IntBuffer ib = model.getConstInt32PointerVariaLen(); // NULL -> exception + } catch(final Exception _e) { e1 = _e; } + Assert.assertNotNull(e1); + System.err.println("Expected exception-1: "+e1); + + Exception e2 = null; + try { + @SuppressWarnings("unused") + final int[] ia = model.getConstInt32PointerVariaLen(0, new int[0], 0, 0); // NULL -> exception + } catch(final Exception _e) { e2 = _e; } + Assert.assertNotNull(e2); + System.err.println("Expected exception-2: "+e2); } - // field: int32PointerCustomLen - // field: CType['int32_t *', size [fixed false, lnx64 8], [pointer*1]], with array length of getInt32PointerCustomLenVal() { - final int size = model.getInt32PointerCustomLenVal(); - final IntBuffer all = model.getInt32PointerCustomLen(); - Assert.assertEquals(size, all.limit()); + final int size = model.getConstInt32PointerCustomLenElemCount(); + Assert.assertEquals(4, size); + Assert.assertEquals(false, model.isConstInt32PointerCustomLenNull()); + final int[] all = model.getConstInt32PointerCustomLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerCustomLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - Assert.assertEquals(31 + i, all.get(i)); + Assert.assertEquals(31 + i, all[i]); + Assert.assertEquals(31 + i, allB.get(i)); + final int[] s = model.getConstInt32PointerCustomLen(i /* srcPos */, new int[1] /* dest */, 0 /* destPos */, 1 /* length */); + Assert.assertEquals(31 + i, s[0]); } } + } - // field: int32PointerOneElem - // CType['int32_t *', size [fixed false, lnx64 8], [pointer*1]], with array length of 1 - { - final IntBuffer all = model.getInt32PointerOneElem(); - Assert.assertEquals(1, all.limit()); - Assert.assertEquals(41, all.get(0)); - } - - // field: mat4x4 - // CType['float * *', size [fixed false, lnx64 64], [array*2]], with array length of <code>4*4</code> */ + /** Primitive.ConstValue.int32.Pointer - write access */ + @SuppressWarnings("unused") + private void chapter12_03bTestTKFieldConstValueInt32WriteAccess(final TK_Field model) { + Assert.assertEquals(0, model.getConstInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerMaxOneElemNull()); + model.setConstInt32PointerMaxOneElem(110); + Assert.assertEquals(1, model.getConstInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(false, model.isConstInt32PointerMaxOneElemNull()); + Assert.assertEquals(110, model.getConstInt32PointerMaxOneElem()); + model.releaseConstInt32PointerMaxOneElem(); + Assert.assertEquals(0, model.getConstInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerMaxOneElemNull()); + + Assert.assertEquals(3, TK_Field.getConstInt32PointerConstLenElemCount()); + Assert.assertEquals(false, model.isConstInt32PointerConstLenNull()); { - Assert.assertEquals(4*4, TK_ModelConst.getMat4x4ArrayLength()); - final FloatBuffer mat4x4 = model.getMat4x4(); - Assert.assertEquals(4*4, mat4x4.limit()); - for(int i=0; i<4; i++) { - final float[] vec4 = model.getMat4x4(i*4, new float[4]); - for(int j=0; j<4; j++) { - Assert.assertEquals(i*4+j, mat4x4.get(i*4+j), EPSILON); - Assert.assertEquals(i*4+j, vec4[j], EPSILON); + // write 1 via IntBuffer reference get + // FIXME: Sort of violates the contract + { + final IntBuffer ib = model.getConstInt32PointerConstLen(); + Assert.assertEquals(3, ib.limit()); + for(int i=0; i<3; ++i) { + ib.put(i, 120+i); + } + } + // verify 1 + { + final int size = TK_Field.getConstInt32PointerConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getConstInt32PointerConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerConstLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(120 + i, all[i]); + Assert.assertEquals(120 + i, allB.get(i)); + final int[] s = model.getConstInt32PointerConstLen(i, new int[1], 0, 1); + Assert.assertEquals(120 + i, s[0]); } } } - // field: structArrayFixedLen - // field: CType['TK_Dimension *', size [fixed false, lnx64 48], [array*1]], with array length of 3 + Assert.assertEquals(0, model.getConstInt32PointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerVariaLenNull()); { - final int size = TK_ModelConst.getStructArrayFixedLenArrayLength(); - final TK_Dimension[] all = model.getStructArrayFixedLen(0, new TK_Dimension[size]); - for(int i=0; i<size; i++) { - Assert.assertEquals(51 + i * 10, all[i].getX()); - Assert.assertEquals(52 + i * 10, all[i].getY()); - Assert.assertEquals(53 + i * 10, all[i].getWidth()); - Assert.assertEquals(54 + i * 10, all[i].getHeight()); + Exception e1 = null; + try { + @SuppressWarnings("unused") + final IntBuffer ib = model.getConstInt32PointerVariaLen(); // NULL -> exception + } catch(final Exception _e) { e1 = _e; } + Assert.assertNotNull(e1); + System.err.println("Expected exception-1: "+e1); + + Exception e2 = null; + try { + @SuppressWarnings("unused") + final int[] ia = model.getConstInt32PointerVariaLen(0, new int[0], 0, 0); // NULL -> exception + } catch(final Exception _e) { e2 = _e; } + Assert.assertNotNull(e2); + System.err.println("Expected exception-2: "+e2); + } + { + // write 1 via int[] set, also actually allocating initial memory + { + final int[] ia = { 220, 221, 222, 223, 224 }; + model.setConstInt32PointerVariaLen(ia, 0, 0, ia.length); + } + // verify 1 + { + final int size = model.getConstInt32PointerVariaLenElemCount(); + Assert.assertEquals(5, size); + final int[] all = model.getConstInt32PointerVariaLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerVariaLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(220 + i, all[i]); + Assert.assertEquals(220 + i, allB.get(i)); + final int[] s = model.getConstInt32PointerVariaLen(i, new int[1], 0, 1); + Assert.assertEquals(220 + i, s[0]); + } } + // write 2 via IntBuffer reference get + { + final IntBuffer ib = model.getConstInt32PointerVariaLen(); + Assert.assertEquals(5, ib.limit()); + for(int i=0; i<5; ++i) { + ib.put(i, 120+i); + } + } + // verify 2 + { + final int size = model.getConstInt32PointerVariaLenElemCount(); + Assert.assertEquals(5, size); + final int[] all = model.getConstInt32PointerVariaLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerVariaLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(120 + i, all[i]); + Assert.assertEquals(120 + i, allB.get(i)); + final int[] s = model.getConstInt32PointerVariaLen(i, new int[1], 0, 1); + Assert.assertEquals(120 + i, s[0]); + } + } + model.releaseConstInt32PointerVariaLen(); + Assert.assertEquals(0, model.getConstInt32PointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerVariaLenNull()); } - // field: structArrayOneElem - // CType['TK_Dimension *', size [fixed false, lnx64 16], [array*1]], with array length of 1 { - final TK_Dimension all = model.getStructArrayOneElem(); - Assert.assertEquals(81, all.getX()); - Assert.assertEquals(82, all.getY()); - Assert.assertEquals(83, all.getWidth()); - Assert.assertEquals(84, all.getHeight()); + // write 1 via IntBuffer reference get + { + final int size = model.getConstInt32PointerCustomLenElemCount(); + Assert.assertEquals(4, size); + Assert.assertEquals(false, model.isConstInt32PointerCustomLenNull()); + final IntBuffer ib = model.getConstInt32PointerCustomLen(); + Assert.assertEquals(size, ib.limit()); + for(int i=0; i<size; ++i) { + ib.put(i, 120+i); + } + } + // verify 1 + { + final int size = model.getConstInt32PointerCustomLenElemCount(); + Assert.assertEquals(4, size); + final int[] all = model.getConstInt32PointerCustomLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerCustomLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(120 + i, all[i]); + Assert.assertEquals(120 + i, allB.get(i)); + final int[] s = model.getConstInt32PointerCustomLen(i, new int[1], 0, 1); + Assert.assertEquals(120 + i, s[0]); + } + } + // write 2 via int[] set + { + final int[] ia = { 0, 220, 221, 222, 223, 224, 0 }; + model.setConstInt32PointerCustomLen(ia, 1 /* srcPos */, 0 /* destPos */, ia.length-2); + } + // verify 2 + { + final int size = model.getConstInt32PointerCustomLenElemCount(); + Assert.assertEquals(5, size); + final int[] all = model.getConstInt32PointerCustomLen(0, new int[size], 0, size); + final IntBuffer allB = model.getConstInt32PointerCustomLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(220 + i, all[i]); + Assert.assertEquals(220 + i, allB.get(i)); + final int[] s = model.getConstInt32PointerCustomLen(i, new int[1], 0, 1); + Assert.assertEquals(220 + i, s[0]); + } + } + model.releaseConstInt32PointerCustomLen(); // FIXME: Ownership is ambiguous, may leak native allocated memory, not free'ed! + Assert.assertEquals(0, model.getConstInt32PointerCustomLenElemCount()); + Assert.assertEquals(true, model.isConstInt32PointerCustomLenNull()); } + } - // field: structPointerCustomLen - // CType['TK_Dimension *', size [fixed false, lnx64 8], [pointer*1]], with array length of getStructPointerCustomLenVal() + /** Primitive.VariaValue.int32.Pointer - read access */ + private void chapter12_04aTestTKFieldVariaValueInt32ReadAccess(final TK_Field model) { + // Primitive.ConstValue.int32.Array - read only + Assert.assertEquals(88, model.getVariaInt32ArrayConstOneElem()); + Assert.assertEquals(3, TK_Field.getVariaInt32ArrayConstLenElemCount()); { - final int size = model.getStructPointerCustomLenVal(); - final TK_Dimension[] all = model.getStructPointerCustomLen(0, new TK_Dimension[size]); + final int size = TK_Field.getVariaInt32ArrayConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getVariaInt32ArrayConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32ArrayConstLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - Assert.assertEquals(91 + i * 10, all[i].getX()); - Assert.assertEquals(92 + i * 10, all[i].getY()); - Assert.assertEquals(93 + i * 10, all[i].getWidth()); - Assert.assertEquals(94 + i * 10, all[i].getHeight()); + Assert.assertEquals(1 + i, all[i]); + Assert.assertEquals(1 + i, allB.get(i)); + final int[] s = model.getVariaInt32ArrayConstLen(i /* srcPos */, new int[3] /* dest */, 1 /* destPos */, 1 /* length */); + Assert.assertEquals(1 + i, s[1]); } } - // field: structPointerOneElem - // CType['TK_Dimension *', size [fixed false, lnx64 8], [pointer*1]], with array length of 1 - { - final TK_Dimension all = model.getStructPointerOneElem(); - Assert.assertEquals(121, all.getX()); - Assert.assertEquals(122, all.getY()); - Assert.assertEquals(123, all.getWidth()); - Assert.assertEquals(124, all.getHeight()); + // Primitive.ConstValue.int32.Pointer - read + Assert.assertEquals(1, TK_Field.getVariaInt32PointerConstOneElemElemCount()); + Assert.assertEquals(false, model.isVariaInt32PointerConstOneElemNull()); + Assert.assertEquals(10, model.getVariaInt32PointerConstOneElem()); + Assert.assertEquals(0, model.getVariaInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerMaxOneElemNull()); + { + Exception e = null; + try { + @SuppressWarnings("unused") + final int i = model.getVariaInt32PointerMaxOneElem(); // NULL -> exception + } catch(final Exception _e) { e = _e; } + Assert.assertNotNull(e); + System.err.println("Expected exception: "+e); } - final long surfaceContext = model.getCtx(); - assertAPTR(0x123456789abcdef0L, surfaceContext); - - model.setCtx(surfaceContext); - assertAPTR(surfaceContext, model.getCtx()); - + Assert.assertEquals(3, TK_Field.getVariaInt32PointerConstLenElemCount()); + Assert.assertEquals(false, model.isVariaInt32PointerConstLenNull()); { - Assert.assertEquals(12, TK_ModelConst.getModelNameArrayFixedLenArrayLength()); - - final ByteBuffer bb = model.getModelNameArrayFixedLen(); - Assert.assertEquals(12, bb.limit()); - - final String exp = "Hello Array"; - final String has = model.getModelNameArrayFixedLenAsString(); - // System.err.println("exp '"+exp+"'"); - System.err.println("has '"+has+"'"); - // dumpStringChars("exp", exp); - dumpStringChars("has", has); - Assert.assertEquals(11, has.length()); // w/o EOS - Assert.assertEquals(exp, has); + final int size = TK_Field.getVariaInt32PointerConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getVariaInt32PointerConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerConstLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(21 + i, all[i]); + Assert.assertEquals(21 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerConstLen(i /* srcPos */, new int[3] /* dest */, 2 /* destPos */, 1 /* length */); + Assert.assertEquals(21 + i, s[2]); + } } - { - Assert.assertEquals(14, model.getModelNamePointerCStringArrayLength()); - final ByteBuffer bb = model.getModelNamePointerCString(); - Assert.assertEquals(14, bb.limit()); - - final String exp = "Hello CString"; - final String has = model.getModelNamePointerCStringAsString(); - // System.err.println("exp '"+exp+"'"); - System.err.println("has '"+has+"'"); - // dumpStringChars("exp", exp); - dumpStringChars("has", has); - Assert.assertEquals(13, has.length()); // w/o EOS - Assert.assertEquals(exp, has); - } + Assert.assertEquals(0, model.getVariaInt32PointerVariaLenElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerVariaLenNull()); { - Assert.assertEquals(14, model.getModelNamePointerCustomLenVal()); - - final ByteBuffer bb = model.getModelNamePointerCustomLen(); - Assert.assertEquals(14, bb.limit()); - - final String exp = "Hello Pointer"; - final String has = model.getModelNamePointerCustomLenAsString(); - // System.err.println("exp '"+exp+"'"); - System.err.println("has '"+has+"'"); - // dumpStringChars("exp", exp); - dumpStringChars("has", has); - Assert.assertEquals(13, has.length()); // w/o EOS - Assert.assertEquals(exp, has); + Exception e1 = null; + try { + @SuppressWarnings("unused") + final IntBuffer ib = model.getVariaInt32PointerVariaLen(); // NULL -> exception + } catch(final Exception _e) { e1 = _e; } + Assert.assertNotNull(e1); + System.err.println("Expected exception-1: "+e1); + + Exception e2 = null; + try { + @SuppressWarnings("unused") + final int[] ia = model.getVariaInt32PointerVariaLen(0, new int[0], 0, 0); // NULL -> exception + } catch(final Exception _e) { e2 = _e; } + Assert.assertNotNull(e2); + System.err.println("Expected exception-2: "+e2); } - binding.destroyModelConst(model); - } - private void dumpStringChars(final String prefix, final String s) { - final int len = s.length(); - for(int i=0; i<len; i++) { - final char c = s.charAt(i); - System.err.printf("%s %3d: 0x%X %c%n", prefix, i, (int)c, c); + { + final int size = model.getVariaInt32PointerCustomLenElemCount(); + Assert.assertEquals(4, size); + Assert.assertEquals(false, model.isVariaInt32PointerCustomLenNull()); + final int[] all = model.getVariaInt32PointerCustomLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerCustomLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); + for(int i=0; i<size; i++) { + Assert.assertEquals(31 + i, all[i]); + Assert.assertEquals(31 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerCustomLen(i /* srcPos */, new int[1] /* dest */, 0 /* destPos */, 1 /* length */); + Assert.assertEquals(31 + i, s[0]); + } } } - public void chapter13TestStructArrayModelMutable(final Bindingtest1 binding) throws Exception { - final TK_ModelMutable model = binding.createModelMutable(); - - Assert.assertEquals(3, model.getIntxxPointerCustomLenVal()); - Assert.assertEquals(3, model.getInt32PointerCustomLenVal()); - Assert.assertEquals(3, TK_ModelMutable.getInt32ArrayFixedLenArrayLength()); - Assert.assertEquals(3, TK_ModelMutable.getStructArrayFixedLenArrayLength()); - Assert.assertEquals(3, model.getStructPointerCustomLenVal()); - - // field: int32ArrayFixedLen - // CType['int32_t *', size [fixed false, lnx64 12], [array*1]], with array length of 3 + /** Primitive.VariaValue.int32.Pointer - write access */ + @SuppressWarnings("unused") + private void chapter12_04bTestTKFieldVariaValueInt32WriteAccess(final TK_Field model) { + Assert.assertEquals(1, TK_Field.getVariaInt32PointerConstOneElemElemCount()); + Assert.assertEquals(false, model.isVariaInt32PointerConstOneElemNull()); + model.setVariaInt32PointerConstOneElem(109); + Assert.assertEquals(109, model.getVariaInt32PointerConstOneElem()); + + Assert.assertEquals(0, model.getVariaInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerMaxOneElemNull()); + model.setVariaInt32PointerMaxOneElem(110); + Assert.assertEquals(1, model.getVariaInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(false, model.isVariaInt32PointerMaxOneElemNull()); + Assert.assertEquals(110, model.getVariaInt32PointerMaxOneElem()); + model.releaseVariaInt32PointerMaxOneElem(); + Assert.assertEquals(0, model.getVariaInt32PointerMaxOneElemElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerMaxOneElemNull()); + + Assert.assertEquals(3, TK_Field.getVariaInt32PointerConstLenElemCount()); + Assert.assertEquals(false, model.isVariaInt32PointerConstLenNull()); { - final int size = TK_ModelMutable.getInt32ArrayFixedLenArrayLength(); + // write 1 via IntBuffer reference get { - final int[] values = new int[] { 1, 2, 3 }; - model.setInt32ArrayFixedLen(0, values); - - final int[] all = model.getInt32ArrayFixedLen(0, new int[size]); - final IntBuffer allB = model.getInt32ArrayFixedLen(); + final IntBuffer ib = model.getVariaInt32PointerConstLen(); + Assert.assertEquals(3, ib.limit()); + for(int i=0; i<3; ++i) { + ib.put(i, 120+i); + } + } + // verify 1 + { + final int size = TK_Field.getVariaInt32PointerConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getVariaInt32PointerConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerConstLen(); + Assert.assertEquals(size, all.length); Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - Assert.assertEquals(1 + i, all[i]); - Assert.assertEquals(1 + i, allB.get(i)); - final int[] s = model.getInt32ArrayFixedLen(i, new int[1]); - Assert.assertEquals(1 + i, s[0]); + Assert.assertEquals(120 + i, all[i]); + Assert.assertEquals(120 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerConstLen(i, new int[1], 0, 1); + Assert.assertEquals(120 + i, s[0]); } } + // write 2 via int[] set + { + final int[] ia = { 220, 221, 222 }; + model.setVariaInt32PointerConstLen(ia, 0, 0, ia.length); + } + // verify 2 { + final int size = TK_Field.getVariaInt32PointerConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getVariaInt32PointerConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerConstLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - final int[] ia = new int[] { 4 + i }; - model.setInt32ArrayFixedLen(i, ia); + System.err.printf("%d/%d: A %d, B %d%n", i, size, all[i], allB.get(i)); } - - final int[] all = model.getInt32ArrayFixedLen(0, new int[size]); - final IntBuffer allB = model.getInt32ArrayFixedLen(); - Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - Assert.assertEquals(4 + i, all[i]); - Assert.assertEquals(4 + i, allB.get(i)); - final int[] s = model.getInt32ArrayFixedLen(i, new int[1]); - Assert.assertEquals(4 + i, s[0]); + Assert.assertEquals(220 + i, all[i]); + Assert.assertEquals(220 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerConstLen(i, new int[1], 0, 1); + Assert.assertEquals(220 + i, s[0]); } } - } - - // field: int32ArrayOneElem - // CType['int32_t *', size [fixed false, lnx64 4], [array*1]], with array length of 1 - { - model.setInt32ArrayOneElem(1); - Assert.assertEquals(1, model.getInt32ArrayOneElem()); - } - - // field: int32PointerCustomLen - // field: CType['int32_t *', size [fixed false, lnx64 8], [pointer*1]], with array length of getInt32PointerCustomLenVal() - { - final int size = model.getInt32PointerCustomLenVal(); { - final IntBuffer all0 = model.getInt32PointerCustomLen(); - Assert.assertEquals(size, all0.limit()); - for(int i=0; i<size; i++) { - all0.put(i, 1+i); + } + // write 3 via int[] single set @ offset + if( false ) { + { + final int[] ia = { 0, 320, 321, 322 }; + for(int i=0; i<3; i++) { + model.setVariaInt32PointerConstLen(ia, i+1, i, 3-i); } - - final IntBuffer all1 = model.getInt32PointerCustomLen(); - Assert.assertEquals(size, all1.limit()); + model.setVariaInt32PointerConstLen(new int[]{ 0, 320, 0, 0 }, 0+1 /* srcPos */, 0 /* destPos */, 3); + model.setVariaInt32PointerConstLen(new int[]{ 0, 0, 321, 0 }, 1+1 /* srcPos */, 1 /* destPos */, 2); + model.setVariaInt32PointerConstLen(new int[]{ 0, 0, 0, 322 }, 2+1 /* srcPos */, 2 /* destPos */, 1); + } + // verify 3 + { + final int size = TK_Field.getVariaInt32PointerConstLenElemCount(); + Assert.assertEquals(3, size); + final int[] all = model.getVariaInt32PointerConstLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerConstLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - Assert.assertEquals(1 + i, all1.get(i)); + Assert.assertEquals(320 + i, all[i]); + Assert.assertEquals(320 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerConstLen(i, new int[1], 0, 1); + Assert.assertEquals(320 + i, s[0]); } } - } - - // field: int32PointerOneElem - // CType['int32_t *', size [fixed false, lnx64 8], [pointer*1]], with array length of 1 - { - { - final IntBuffer one0 = model.getInt32PointerOneElem(); - Assert.assertEquals(1, one0.limit()); - one0.put(0, 1); - - final IntBuffer one1 = model.getInt32PointerOneElem(); - Assert.assertEquals(1, one1.limit()); - Assert.assertEquals(1, one1.get(0)); } } - - // field: mat4x4 - // CType['float * *', size [fixed false, lnx64 64], [array*2]], with array length of <code>4*4</code> */ + Assert.assertEquals(0, model.getVariaInt32PointerVariaLenElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerVariaLenNull()); { - model.setMat4x4(0*4, new float[] { 11, 12, 13, 14 } ); - model.setMat4x4(1*4, new float[] { 21, 22, 23, 24 } ); - model.setMat4x4(2*4, new float[] { 31, 32, 33, 34 } ); - model.setMat4x4(3*4, new float[] { 41, 42, 43, 44 } ); - - Assert.assertEquals(4*4, TK_ModelMutable.getMat4x4ArrayLength()); - final FloatBuffer mat4x4 = model.getMat4x4(); - Assert.assertEquals(4*4, mat4x4.limit()); - for(int i=0; i<4; i++) { - final float[] vec4 = model.getMat4x4(i*4, new float[4]); - for(int j=0; j<4; j++) { - Assert.assertEquals((i+1)*10+(j+1), mat4x4.get(i*4+j), EPSILON); - Assert.assertEquals((i+1)*10+(j+1), vec4[j], EPSILON); - } - } + Exception e1 = null; + try { + @SuppressWarnings("unused") + final IntBuffer ib = model.getVariaInt32PointerVariaLen(); // NULL -> exception + } catch(final Exception _e) { e1 = _e; } + Assert.assertNotNull(e1); + System.err.println("Expected exception-1: "+e1); + + Exception e2 = null; + try { + @SuppressWarnings("unused") + final int[] ia = model.getVariaInt32PointerVariaLen(0, new int[0], 0, 0); // NULL -> exception + } catch(final Exception _e) { e2 = _e; } + Assert.assertNotNull(e2); + System.err.println("Expected exception-2: "+e2); } - - // field: structArrayFixedLen - // field: CType['TK_Dimension *', size [fixed false, lnx64 48], [array*1]], with array length of 3 { - final int size = TK_ModelMutable.getStructArrayFixedLenArrayLength(); + // write 1 via int[] set, also actually allocating initial memory + { + final int[] ia = { 220, 221, 222, 223, 224 }; + model.setVariaInt32PointerVariaLen(ia, 0, 0, ia.length); + } + // verify 1 { + final int size = model.getVariaInt32PointerVariaLenElemCount(); + Assert.assertEquals(5, size); + final int[] all = model.getVariaInt32PointerVariaLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerVariaLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - final TK_Dimension d = TK_Dimension.create(); - d.setX(1+i*10); - d.setY(2+i*10); - d.setWidth(3+i*10); - d.setHeight(4+i*10); - model.setStructArrayFixedLen(i, d); + Assert.assertEquals(220 + i, all[i]); + Assert.assertEquals(220 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerVariaLen(i, new int[1], 0, 1); + Assert.assertEquals(220 + i, s[0]); } - final TK_Dimension[] all = model.getStructArrayFixedLen(0, new TK_Dimension[size]); - for(int i=0; i<size; i++) { - Assert.assertEquals(1 + i * 10, all[i].getX()); - Assert.assertEquals(2 + i * 10, all[i].getY()); - Assert.assertEquals(3 + i * 10, all[i].getWidth()); - Assert.assertEquals(4 + i * 10, all[i].getHeight()); - final TK_Dimension[] one = model.getStructArrayFixedLen(i, new TK_Dimension[1]); - Assert.assertEquals(1 + i * 10, one[0].getX()); - Assert.assertEquals(2 + i * 10, one[0].getY()); - Assert.assertEquals(3 + i * 10, one[0].getWidth()); - Assert.assertEquals(4 + i * 10, one[0].getHeight()); + } + // write 2 via IntBuffer reference get + { + final IntBuffer ib = model.getVariaInt32PointerVariaLen(); + Assert.assertEquals(5, ib.limit()); + for(int i=0; i<5; ++i) { + ib.put(i, 120+i); } } + // verify 2 { - final TK_Dimension[] da = new TK_Dimension[size]; + final int size = model.getVariaInt32PointerVariaLenElemCount(); + Assert.assertEquals(5, size); + final int[] all = model.getVariaInt32PointerVariaLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerVariaLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - final TK_Dimension d = TK_Dimension.create(); - d.setX(5+i*10); - d.setY(6+i*10); - d.setWidth(7+i*10); - d.setHeight(8+i*10); - da[i] = d; + Assert.assertEquals(120 + i, all[i]); + Assert.assertEquals(120 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerVariaLen(i, new int[1], 0, 1); + Assert.assertEquals(120 + i, s[0]); } - model.setStructArrayFixedLen(0, da); + } + model.releaseVariaInt32PointerVariaLen(); + Assert.assertEquals(0, model.getVariaInt32PointerVariaLenElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerVariaLenNull()); + } - final TK_Dimension[] all = model.getStructArrayFixedLen(0, new TK_Dimension[size]); - for(int i=0; i<size; i++) { - Assert.assertEquals(5 + i * 10, all[i].getX()); - Assert.assertEquals(6 + i * 10, all[i].getY()); - Assert.assertEquals(7 + i * 10, all[i].getWidth()); - Assert.assertEquals(8 + i * 10, all[i].getHeight()); - final TK_Dimension[] one = model.getStructArrayFixedLen(i, new TK_Dimension[1]); - Assert.assertEquals(5 + i * 10, one[0].getX()); - Assert.assertEquals(6 + i * 10, one[0].getY()); - Assert.assertEquals(7 + i * 10, one[0].getWidth()); - Assert.assertEquals(8 + i * 10, one[0].getHeight()); + { + // write 1 via IntBuffer reference get + { + final int size = model.getVariaInt32PointerCustomLenElemCount(); + Assert.assertEquals(4, size); + Assert.assertEquals(false, model.isVariaInt32PointerCustomLenNull()); + final IntBuffer ib = model.getVariaInt32PointerCustomLen(); + Assert.assertEquals(size, ib.limit()); + for(int i=0; i<size; ++i) { + ib.put(i, 120+i); } } + // verify 1 { + final int size = model.getVariaInt32PointerCustomLenElemCount(); + Assert.assertEquals(4, size); + final int[] all = model.getVariaInt32PointerCustomLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerCustomLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - final TK_Dimension d = TK_Dimension.create(); - d.setX(1+i*10); - d.setY(3+i*10); - d.setWidth(5+i*10); - d.setHeight(7+i*10); - model.setStructArrayFixedLen(i, new TK_Dimension[] { d }); + Assert.assertEquals(120 + i, all[i]); + Assert.assertEquals(120 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerCustomLen(i, new int[1], 0, 1); + Assert.assertEquals(120 + i, s[0]); } - - final TK_Dimension[] all = model.getStructArrayFixedLen(0, new TK_Dimension[size]); + } + // write 2 via int[] set + { + final int[] ia = { 0, 220, 221, 222, 223, 224, 0 }; + model.setVariaInt32PointerCustomLen(ia, 1 /* srcPos */, 0 /* destPos */, ia.length-2); + } + // verify 2 + { + final int size = model.getVariaInt32PointerCustomLenElemCount(); + Assert.assertEquals(5, size); + final int[] all = model.getVariaInt32PointerCustomLen(0, new int[size], 0, size); + final IntBuffer allB = model.getVariaInt32PointerCustomLen(); + Assert.assertEquals(size, all.length); + Assert.assertEquals(size, allB.limit()); for(int i=0; i<size; i++) { - Assert.assertEquals(1 + i * 10, all[i].getX()); - Assert.assertEquals(3 + i * 10, all[i].getY()); - Assert.assertEquals(5 + i * 10, all[i].getWidth()); - Assert.assertEquals(7 + i * 10, all[i].getHeight()); - final TK_Dimension[] one = model.getStructArrayFixedLen(i, new TK_Dimension[1]); - Assert.assertEquals(1 + i * 10, one[0].getX()); - Assert.assertEquals(3 + i * 10, one[0].getY()); - Assert.assertEquals(5 + i * 10, one[0].getWidth()); - Assert.assertEquals(7 + i * 10, one[0].getHeight()); + Assert.assertEquals(220 + i, all[i]); + Assert.assertEquals(220 + i, allB.get(i)); + final int[] s = model.getVariaInt32PointerCustomLen(i, new int[1], 0, 1); + Assert.assertEquals(220 + i, s[0]); } } + model.releaseVariaInt32PointerCustomLen(); // FIXME: Ownership is ambiguous, may leak native allocated memory, not free'ed! + Assert.assertEquals(0, model.getVariaInt32PointerCustomLenElemCount()); + Assert.assertEquals(true, model.isVariaInt32PointerCustomLenNull()); } + } + + /** Struct */ + private void chapter12_05aTestTKFieldStruct(final TK_Field model) { // field: structArrayOneElem // CType['TK_Dimension *', size [fixed false, lnx64 16], [array*1]], with array length of 1 { - { - final TK_Dimension d = TK_Dimension.create(); - d.setX(1); - d.setY(2); - d.setWidth(3); - d.setHeight(4); - model.setStructArrayOneElem(d); - } - { - final TK_Dimension one = model.getStructArrayOneElem(); - Assert.assertEquals(1, one.getX()); - Assert.assertEquals(2, one.getY()); - Assert.assertEquals(3, one.getWidth()); - Assert.assertEquals(4, one.getHeight()); - } + final TK_Dimension all = model.getConstStructArrayConstOneElem(); + Assert.assertEquals(51, all.getX()); + Assert.assertEquals(52, all.getY()); + Assert.assertEquals(53, all.getWidth()); + Assert.assertEquals(54, all.getHeight()); } // field: structPointerCustomLen // CType['TK_Dimension *', size [fixed false, lnx64 8], [pointer*1]], with array length of getStructPointerCustomLenVal() { - final int size = model.getStructPointerCustomLenVal(); - { - final TK_Dimension[] all = model.getStructPointerCustomLen(0, new TK_Dimension[size]); - for(int i=0; i<size; i++) { - final TK_Dimension d = all[i]; - d.setX(1+i*10); - d.setY(2+i*10); - d.setWidth(3+i*10); - d.setHeight(4+i*10); - } - } - { - final TK_Dimension[] all = model.getStructPointerCustomLen(0, new TK_Dimension[size]); - for(int i=0; i<size; i++) { - Assert.assertEquals(1 + i * 10, all[i].getX()); - Assert.assertEquals(2 + i * 10, all[i].getY()); - Assert.assertEquals(3 + i * 10, all[i].getWidth()); - Assert.assertEquals(4 + i * 10, all[i].getHeight()); - final TK_Dimension[] one = model.getStructPointerCustomLen(i, new TK_Dimension[1]); - Assert.assertEquals(1 + i * 10, one[0].getX()); - Assert.assertEquals(2 + i * 10, one[0].getY()); - Assert.assertEquals(3 + i * 10, one[0].getWidth()); - Assert.assertEquals(4 + i * 10, one[0].getHeight()); - } + final int size = model.getConstStructPointerCustomLenElemCount(); + Assert.assertEquals(4, size); + final TK_Dimension[] all = model.getConstStructPointerCustomLen(0, new TK_Dimension[size], 0, size); + for(int i=0; i<size; i++) { + Assert.assertEquals(131 + i * 10, all[i].getX()); + Assert.assertEquals(132 + i * 10, all[i].getY()); + Assert.assertEquals(133 + i * 10, all[i].getWidth()); + Assert.assertEquals(134 + i * 10, all[i].getHeight()); } } // field: structPointerOneElem // CType['TK_Dimension *', size [fixed false, lnx64 8], [pointer*1]], with array length of 1 { + final TK_Dimension all = model.getConstStructPointerConstOneElem(); + Assert.assertEquals(91, all.getX()); + Assert.assertEquals(92, all.getY()); + Assert.assertEquals(93, all.getWidth()); + Assert.assertEquals(94, all.getHeight()); + + } + } + + private static ByteBuffer toEOSByteBuffer(final String val, final Charset cs) { + final byte[] ba = val.getBytes( cs ); + final ByteBuffer bb = Buffers.newDirectByteBuffer( ba.length + 1 ); + bb.put(ba); + bb.put((byte)0); + bb.rewind(); + return bb; + } + + /** String - Read Access */ + private void chapter12_10aTestTKFieldConstStringReadAccess(final TK_Field model) { + { + final int expStrLen = 12; // w/o EOS + final String exp = "Hello Array1"; + final ByteBuffer expBB = toEOSByteBuffer( exp, TK_Field.getCharset() ); + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(expStrLen+1, expBB.limit()); + Assert.assertEquals(expStrLen+1, TK_Field.getConstCharArrayConstLenElemCount()); + + final ByteBuffer hasBB = model.getConstCharArrayConstLen(); + Assert.assertEquals(expStrLen+1, hasBB.limit()); + Assert.assertEquals(expBB, hasBB); + + final String has = model.getConstCharArrayConstLenAsString(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + } + { + final int expStrLen = 14; // w/o EOS + final String exp = "Hello CString1"; + final ByteBuffer expBB = toEOSByteBuffer( exp, TK_Field.getCharset() ); + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(expStrLen+1, expBB.limit()); + Assert.assertEquals(expStrLen+1, TK_Field.getConstCharPointerConstLenElemCount()); + Assert.assertEquals(false, model.isConstCharPointerConstLenNull()); + + final ByteBuffer hasBB = model.getConstCharPointerConstLen(); + Assert.assertEquals(expStrLen+1, hasBB.limit()); + Assert.assertEquals(expBB, hasBB); + + final String has = model.getConstCharPointerConstLenAsString(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + } + { + Assert.assertEquals(0, model.getConstCharPointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstCharPointerVariaLenNull()); + } + { + final int expStrLen = 14; // w/o EOS + final String exp = "Hello CString3"; + final ByteBuffer expBB = toEOSByteBuffer( exp, TK_Field.getCharset() ); + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(expStrLen+1, expBB.limit()); + Assert.assertEquals(expStrLen+1, model.getConstCharPointerCustomLenElemCount()); + Assert.assertEquals(false, model.isConstCharPointerCustomLenNull()); + + final ByteBuffer hasBB = model.getConstCharPointerCustomLen(); + Assert.assertEquals(expStrLen+1, hasBB.limit()); + Assert.assertEquals(expBB, hasBB); + + final String has = model.getConstCharPointerCustomLenAsString(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + } + } + + /** String - Read Access */ + private void chapter12_11aTestTKFieldConstStringOnlyReadAccess(final TK_Field model) { + { + final int expStrLen = 12; // w/o EOS + final String exp = "Hello Array1"; + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(expStrLen+1, TK_Field.getConstStringOnlyArrayConstLenElemCount()); + + final String has = model.getConstStringOnlyArrayConstLen(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + } + { + final int expStrLen = 14; // w/o EOS + final String exp = "Hello CString1"; + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(expStrLen+1, TK_Field.getConstStringOnlyPointerConstLenElemCount()); + Assert.assertEquals(false, model.isConstStringOnlyPointerConstLenNull()); + + final String has = model.getConstStringOnlyPointerConstLen(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + } + { + Assert.assertEquals(0, model.getConstStringOnlyPointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstStringOnlyPointerVariaLenNull()); + } + { + final int expStrLen = 14; // w/o EOS + final String exp = "Hello CString3"; + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(expStrLen+1, model.getConstStringOnlyPointerCustomLenElemCount()); + Assert.assertEquals(false, model.isConstStringOnlyPointerCustomLenNull()); + + final String has = model.getConstStringOnlyPointerCustomLen(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + } + } + + /** String - Write Access */ + private void chapter12_11bTestTKFieldConstStringOnlyWriteAccess(final TK_Field model) { + { + Assert.assertEquals(0, model.getConstStringOnlyPointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstStringOnlyPointerVariaLenNull()); + + final int expStrLen = 15; // w/o EOS + final String exp = "Hello World2222"; + Assert.assertEquals(expStrLen, exp.length()); + + model.setConstStringOnlyPointerVariaLen(exp); + Assert.assertEquals(expStrLen+1, model.getConstStringOnlyPointerVariaLenElemCount()); + Assert.assertEquals(false, model.isConstStringOnlyPointerVariaLenNull()); + + final String has = model.getConstStringOnlyPointerVariaLen(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + + model.releaseConstStringOnlyPointerVariaLen(); + Assert.assertEquals(0, model.getConstStringOnlyPointerVariaLenElemCount()); + Assert.assertEquals(true, model.isConstStringOnlyPointerVariaLenNull()); + } + { + final int expStrLen = 15; // w/o EOS + final String exp = "Hello World4444"; + Assert.assertEquals(expStrLen, exp.length()); + Assert.assertEquals(false, model.isConstStringOnlyPointerCustomLenNull()); + + model.setConstStringOnlyPointerCustomLen(exp); + Assert.assertEquals(expStrLen+1, model.getConstStringOnlyPointerCustomLenElemCount()); + Assert.assertEquals(false, model.isConstStringOnlyPointerCustomLenNull()); + + final String has = model.getConstStringOnlyPointerCustomLen(); + System.err.println("has '"+has+"'"); + // dumpStringChars("has", has); + Assert.assertEquals(expStrLen, has.length()); // w/o EOS + Assert.assertEquals(exp, has); + + model.releaseConstStringOnlyPointerCustomLen(); // FIXME: Ownership is ambiguous, may leak native allocated memory, not free'ed! + Assert.assertEquals(0, model.getConstStringOnlyPointerCustomLenElemCount()); + Assert.assertEquals(true, model.isConstStringOnlyPointerCustomLenNull()); + } + } + + /** Test array and pointer bindings of structs */ + public void chapter12TestTKField(final Bindingtest1 binding) throws Exception { + Assert.assertEquals(false, TK_Field.usesNativeCode()); + Assert.assertNotEquals(0, TK_Field.size()); + + final TK_Field model0 = binding.createTKField(); + { + // Fetch native memory + final ByteBuffer bb0 = model0.getBuffer(); + Assert.assertNotNull(bb0); + Assert.assertEquals(TK_Field.size(), bb0.limit()); + + final long addr0 = model0.getDirectBufferAddress(); + Assert.assertNotEquals(0, addr0); + + // Compare a reference by memory address -> identical! { - final TK_Dimension d = model.getStructPointerOneElem(); - d.setX(1); - d.setY(2); - d.setWidth(3); - d.setHeight(4); + final TK_Field model1 = TK_Field.derefPointer(addr0); + final ByteBuffer bb1 = model1.getBuffer(); + Assert.assertNotNull(bb1); + Assert.assertEquals(TK_Field.size(), bb1.limit()); + + final long addr1 = model1.getDirectBufferAddress(); + Assert.assertNotEquals(0, addr1); } - { - final TK_Dimension one = model.getStructPointerOneElem(); - Assert.assertEquals(1, one.getX()); - Assert.assertEquals(2, one.getY()); - Assert.assertEquals(3, one.getWidth()); - Assert.assertEquals(4, one.getHeight()); + } + + chapter12_03aTestTKFieldConstValueInt32ReadAccess(model0); + chapter12_03bTestTKFieldConstValueInt32WriteAccess(model0); + chapter12_04aTestTKFieldVariaValueInt32ReadAccess(model0); + chapter12_04bTestTKFieldVariaValueInt32WriteAccess(model0); + chapter12_05aTestTKFieldStruct(model0); + chapter12_10aTestTKFieldConstStringReadAccess(model0); + chapter12_11aTestTKFieldConstStringOnlyReadAccess(model0); + chapter12_11bTestTKFieldConstStringOnlyWriteAccess(model0); + + binding.destroyTKField(model0); + } + @SuppressWarnings("unused") + private void dumpStringChars(final String prefix, final String s) { + final int len = s.length(); + for(int i=0; i<len; i++) { + final char c = s.charAt(i); + System.err.printf("%s %3d: 0x%X %c%n", prefix, i, (int)c, c); + } + } + + public void chapter13TestTKFieldImmutable(final Bindingtest1 binding) throws Exception { + Assert.assertEquals(false, TK_FieldImmutable.usesNativeCode()); + + final TK_FieldImmutable model = binding.createTKFieldImmutable(); + + binding.destroyTKFieldImmutable(model); + } + + public void chapter15TestTKMixed(final Bindingtest1 binding) throws Exception { + Assert.assertEquals(false, TK_ModelMixed.usesNativeCode()); + + final TK_ModelMixed model = binding.createTKModelMixed(); + + Assert.assertEquals(4*4, TK_ModelMixed.getMat4x4ElemCount()); + { + final FloatBuffer mat4x4 = model.getMat4x4(); + Assert.assertEquals(4*4, mat4x4.limit()); + for(int i=0; i<4; i++) { + final float[] vec4 = model.getMat4x4(i*4, new float[4], 0, 4); + for(int j=0; j<4; j++) { + Assert.assertEquals(i*4+j, mat4x4.get(i*4+j), EPSILON); + Assert.assertEquals(i*4+j, vec4[j], EPSILON); + } } + } + { + final float[] data = { 11, 12, 13, 14, + 21, 22, 23, 24, + 31, 32, 33, 34, + 41, 42, 43, 44 }; + model.setMat4x4(data, 0*4, 0*4, 4); + model.setMat4x4(data, 1*4, 1*4, 4); + model.setMat4x4(data, 2*4, 2*4, 4); + model.setMat4x4(data, 3*4, 3*4, 4); + final FloatBuffer mat4x4 = model.getMat4x4(); + Assert.assertEquals(4*4, mat4x4.limit()); + for(int i=0; i<4; i++) { + final float[] vec4 = model.getMat4x4(i*4, new float[4], 0, 4); + for(int j=0; j<4; j++) { + Assert.assertEquals((i+1)*10+(j+1), mat4x4.get(i*4+j), EPSILON); + Assert.assertEquals((i+1)*10+(j+1), vec4[j], EPSILON); + } + } } final long surfaceContext = model.getCtx(); @@ -1819,7 +2255,5 @@ public class BaseClass extends SingletonJunitCase { model.setCtx(surfaceContext); assertAPTR(surfaceContext, model.getCtx()); - - binding.destroyModelMutable(model); } } diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p1JavaEmitter.java b/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p1JavaEmitter.java index 5809acf..3e19232 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p1JavaEmitter.java +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p1JavaEmitter.java @@ -145,19 +145,24 @@ public class Test1p1JavaEmitter extends BaseClass { } /** - * Test compound access read-only + * Test compound access read-write */ @Test - public void chapter12TestStructArrayModelConst() throws Exception { - chapter12TestStructArrayModelConst(new Bindingtest1p1Impl()); + public void chapter12TestTKField() throws Exception { + chapter12TestTKField(new Bindingtest1p1Impl()); } /** - * Test compound access read-write + * Test compound access read-only */ @Test - public void chapter13TestStructArrayModelMutable() throws Exception { - chapter13TestStructArrayModelMutable(new Bindingtest1p1Impl()); + public void chapter13TestTKFieldImmutable() throws Exception { + chapter13TestTKFieldImmutable(new Bindingtest1p1Impl()); + } + + @Test + public void chapter15TestTKMixed() throws Exception { + chapter15TestTKMixed(new Bindingtest1p1Impl()); } public static void main(final String args[]) throws IOException { diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2DynamicLibraryBundle.java b/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2DynamicLibraryBundle.java index c063d15..def7655 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2DynamicLibraryBundle.java +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2DynamicLibraryBundle.java @@ -28,6 +28,7 @@ package com.jogamp.gluegen.test.junit.generation; +import com.jogamp.gluegen.test.junit.generation.impl.Bindingtest1p1Impl; import com.jogamp.gluegen.test.junit.generation.impl.Bindingtest1p2Impl; import com.jogamp.common.os.DynamicLibraryBundle; import com.jogamp.common.os.DynamicLibraryBundleInfo; @@ -152,19 +153,24 @@ public class Test1p2DynamicLibraryBundle extends BaseClass { } /** - * Test compound access read-only + * Test compound access read-write */ @Test - public void chapter12TestStructArrayModelConst() throws Exception { - chapter12TestStructArrayModelConst(new Bindingtest1p2Impl()); + public void chapter12TestTKField() throws Exception { + chapter12TestTKField(new Bindingtest1p2Impl()); } /** - * Test compound access read-write + * Test compound access read-only */ @Test - public void chapter13TestStructArrayModelMutable() throws Exception { - chapter13TestStructArrayModelMutable(new Bindingtest1p2Impl()); + public void chapter13TestTKFieldImmutable() throws Exception { + chapter13TestTKFieldImmutable(new Bindingtest1p2Impl()); + } + + @Test + public void chapter15TestTKMixed() throws Exception { + chapter15TestTKMixed(new Bindingtest1p2Impl()); } /** diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2ProcAddressEmitter.java b/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2ProcAddressEmitter.java index fa99915..711f218 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2ProcAddressEmitter.java +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/Test1p2ProcAddressEmitter.java @@ -154,19 +154,24 @@ public class Test1p2ProcAddressEmitter extends BaseClass { } /** - * Test compound access read-only + * Test compound access read-write */ @Test - public void chapter12TestStructArrayModelConst() throws Exception { - chapter12TestStructArrayModelConst(new Bindingtest1p2Impl()); + public void chapter12TestTKField() throws Exception { + chapter12TestTKField(new Bindingtest1p2Impl()); } /** - * Test compound access read-write + * Test compound access read-only */ @Test - public void chapter13TestStructArrayModelMutable() throws Exception { - chapter13TestStructArrayModelMutable(new Bindingtest1p2Impl()); + public void chapter13TestTKFieldImmutable() throws Exception { + chapter13TestTKFieldImmutable(new Bindingtest1p2Impl()); + } + + @Test + public void chapter15TestTKMixed() throws Exception { + chapter15TestTKMixed(new Bindingtest1p2Impl()); } /** diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test1-common.cfg b/src/junit/com/jogamp/gluegen/test/junit/generation/test1-common.cfg index 6c516c2..7e9ba4a 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/test1-common.cfg +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test1-common.cfg @@ -71,39 +71,300 @@ ReturnValueCapacity TK_Surface.getClip sizeof(TK_Dimension) ReturnValueCapacity createComplicatedSuperSet sizeof(TK_ComplicatedSuperSet) -EmitStruct TK_ModelConst -StructPackage TK_ModelConst com.jogamp.gluegen.test.junit.generation -ReturnedArrayLength TK_ModelConst.intxxArrayCustomLen getIntxxArrayCustomLenVal() -ReturnedArrayLength TK_ModelConst.intxxPointerCustomLen getIntxxPointerCustomLenVal() -ReturnedArrayLength TK_ModelConst.int32ArrayCustomLen getInt32ArrayCustomLenVal() -ReturnedArrayLength TK_ModelConst.int32PointerCustomLen getInt32PointerCustomLenVal() -ReturnedArrayLength TK_ModelConst.structArrayCustomLen getStructArrayCustomLenVal() -ReturnedArrayLength TK_ModelConst.structPointerCustomLen getStructPointerCustomLenVal() -ReturnedArrayLength TK_ModelConst.int32PointerOneElem 1 -ReturnValueCapacity TK_ModelConst.int32PointerOneElem 1 * sizeof(int32_t) /* overridden by ReturnValueCapacity */ -ReturnedArrayLength TK_ModelConst.structPointerOneElem 1 -ReturnsString TK_ModelConst.modelNameArrayFixedLen -ReturnsString TK_ModelConst.modelNamePointerCString -ReturnsString TK_ModelConst.modelNamePointerCustomLen -ReturnedArrayLength TK_ModelConst.modelNamePointerCustomLen getModelNamePointerCustomLenVal() - -EmitStruct TK_ModelMutable -StructPackage TK_ModelMutable com.jogamp.gluegen.test.junit.generation -ReturnedArrayLength TK_ModelMutable.intxxArrayCustomLen getIntxxArrayCustomLenVal() -ReturnedArrayLength TK_ModelMutable.intxxPointerCustomLen getIntxxPointerCustomLenVal() -ReturnedArrayLength TK_ModelMutable.int32ArrayCustomLen getInt32ArrayCustomLenVal() -ReturnedArrayLength TK_ModelMutable.int32PointerCustomLen getInt32PointerCustomLenVal() -ReturnedArrayLength TK_ModelMutable.structArrayCustomLen getStructArrayCustomLenVal() -ReturnedArrayLength TK_ModelMutable.structPointerCustomLen getStructPointerCustomLenVal() -ReturnedArrayLength TK_ModelMutable.int32PointerOneElem 1 -ReturnedArrayLength TK_ModelMutable.structPointerOneElem 1 -ReturnsString TK_ModelMutable.modelNameArrayFixedLen -ReturnsString TK_ModelMutable.modelNamePointerCString -ReturnsString TK_ModelMutable.modelNamePointerCustomLen -ReturnedArrayLength TK_ModelMutable.modelNamePointerCustomLen getModelNamePointerCustomLenVal() - -ReturnValueCapacity createModelConst sizeof(TK_ModelConst) -ReturnValueCapacity createModelMutable sizeof(TK_ModelMutable) +# +# TK_FieldImmutable +# + +EmitStruct TK_FieldImmutable +StructPackage TK_FieldImmutable com.jogamp.gluegen.test.junit.generation + +# TK_FieldImmutable Primitive.ConstValue.intxx +ImmutableAccess TK_FieldImmutable.constIntxxArrayConstOneElem +ImmutableAccess TK_FieldImmutable.constIntxxArrayConstLen +ImmutableAccess TK_FieldImmutable.constIntxxPointerConstOneElem +ReturnedArrayLength TK_FieldImmutable.constIntxxPointerConstOneElem 1 +ImmutableAccess TK_FieldImmutable.constIntxxPointerMaxOneElem +MaxOneElement TK_FieldImmutable.constIntxxPointerMaxOneElem +ImmutableAccess TK_FieldImmutable.constIntxxPointerConstLen +ReturnedArrayLength TK_FieldImmutable.constIntxxPointerConstLen 3 +ImmutableAccess TK_FieldImmutable.constIntxxPointerVariaLen +ImmutableAccess TK_FieldImmutable.constIntxxPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.constIntxxPointerCustomLen getConstIntxxPointerCustomLenElemCount() + +# TK_FieldImmutable Primitive.VariaValue.intxx +ImmutableAccess TK_FieldImmutable.variaIntxxArrayConstOneElem +ImmutableAccess TK_FieldImmutable.variaIntxxArrayConstLen +ImmutableAccess TK_FieldImmutable.variaIntxxPointerConstOneElem +ReturnedArrayLength TK_FieldImmutable.variaIntxxPointerConstOneElem 1 +ImmutableAccess TK_FieldImmutable.variaIntxxPointerMaxOneElem +MaxOneElement TK_FieldImmutable.variaIntxxPointerMaxOneElem +ImmutableAccess TK_FieldImmutable.variaIntxxPointerConstLen +ReturnedArrayLength TK_FieldImmutable.variaIntxxPointerConstLen 3 +ImmutableAccess TK_FieldImmutable.variaIntxxPointerVariaLen +ImmutableAccess TK_FieldImmutable.variaIntxxPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.variaIntxxPointerCustomLen getVariaIntxxPointerCustomLenElemCount() + +# TK_FieldImmutable Primitive.ConstValue.int32 +ImmutableAccess TK_FieldImmutable.constInt32ArrayConstOneElem +ImmutableAccess TK_FieldImmutable.constInt32ArrayConstLen +ImmutableAccess TK_FieldImmutable.constInt32PointerConstOneElem +ReturnedArrayLength TK_FieldImmutable.constInt32PointerConstOneElem 1 +ImmutableAccess TK_FieldImmutable.constInt32PointerMaxOneElem +MaxOneElement TK_FieldImmutable.constInt32PointerMaxOneElem +ImmutableAccess TK_FieldImmutable.constInt32PointerConstLen +ReturnedArrayLength TK_FieldImmutable.constInt32PointerConstLen 3 +ImmutableAccess TK_FieldImmutable.constInt32PointerVariaLen +ImmutableAccess TK_FieldImmutable.constInt32PointerCustomLen +ReturnedArrayLength TK_FieldImmutable.constInt32PointerCustomLen getConstInt32PointerCustomLenElemCount() + +# TK_FieldImmutable Primitive.VariaValue.int32 +ImmutableAccess TK_FieldImmutable.variaInt32ArrayConstOneElem +ImmutableAccess TK_FieldImmutable.variaInt32ArrayConstLen +ImmutableAccess TK_FieldImmutable.variaInt32PointerConstOneElem +ReturnedArrayLength TK_FieldImmutable.variaInt32PointerConstOneElem 1 +ImmutableAccess TK_FieldImmutable.variaInt32PointerMaxOneElem +MaxOneElement TK_FieldImmutable.variaInt32PointerMaxOneElem +ImmutableAccess TK_FieldImmutable.variaInt32PointerConstLen +ReturnedArrayLength TK_FieldImmutable.variaInt32PointerConstLen 3 +ImmutableAccess TK_FieldImmutable.variaInt32PointerVariaLen +ImmutableAccess TK_FieldImmutable.variaInt32PointerCustomLen +ReturnedArrayLength TK_FieldImmutable.variaInt32PointerCustomLen getVariaInt32PointerCustomLenElemCount() + +# TK_FieldImmutable Struct.ConstValue.TK_Dimension +ImmutableAccess TK_FieldImmutable.constStructArrayConstOneElem +ImmutableAccess TK_FieldImmutable.constStructArrayConstLen +ImmutableAccess TK_FieldImmutable.constStructPointerConstOneElem +ReturnedArrayLength TK_FieldImmutable.constStructPointerConstOneElem 1 +ImmutableAccess TK_FieldImmutable.constStructPointerMaxOneElem +MaxOneElement TK_FieldImmutable.constStructPointerMaxOneElem +ImmutableAccess TK_FieldImmutable.constStructPointerConstLen +ReturnedArrayLength TK_FieldImmutable.constStructPointerConstLen 3 +ImmutableAccess TK_FieldImmutable.constStructPointerVariaLen +ImmutableAccess TK_FieldImmutable.constStructPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.constStructPointerCustomLen getConstStructPointerCustomLenElemCount() + +# TK_FieldImmutable Struct.VariaValue.TK_Dimension +ImmutableAccess TK_FieldImmutable.variaStructArrayConstOneElem +ImmutableAccess TK_FieldImmutable.variaStructArrayConstLen +ImmutableAccess TK_FieldImmutable.variaStructPointerConstOneElem +ReturnedArrayLength TK_FieldImmutable.variaStructPointerConstOneElem 1 +ImmutableAccess TK_FieldImmutable.variaStructPointerMaxOneElem +MaxOneElement TK_FieldImmutable.variaStructPointerMaxOneElem +ImmutableAccess TK_FieldImmutable.variaStructPointerConstLen +ReturnedArrayLength TK_FieldImmutable.variaStructPointerConstLen 3 +ImmutableAccess TK_FieldImmutable.variaStructPointerVariaLen +ImmutableAccess TK_FieldImmutable.variaStructPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.variaStructPointerCustomLen getVariaStructPointerCustomLenElemCount() + +# TK_FieldImmutable String.ConstValue 1A + 3P = 4 +ImmutableAccess TK_FieldImmutable.constCharArrayConstLen +ReturnsString TK_FieldImmutable.constCharArrayConstLen +ImmutableAccess TK_FieldImmutable.constCharPointerConstLen +ReturnsString TK_FieldImmutable.constCharPointerConstLen +ReturnedArrayLength TK_FieldImmutable.constCharPointerConstLen 15 +ImmutableAccess TK_FieldImmutable.constCharPointerVariaLen +ReturnsString TK_FieldImmutable.constCharPointerVariaLen +ImmutableAccess TK_FieldImmutable.constCharPointerCustomLen +ReturnsString TK_FieldImmutable.constCharPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.constCharPointerCustomLen getConstCharPointerCustomLenElemCount() + +# TK_FieldImmutable String.VariaValue 1A + 3P = 4 +ImmutableAccess TK_FieldImmutable.variaCharArrayConstLen +ReturnsString TK_FieldImmutable.variaCharArrayConstLen +ImmutableAccess TK_FieldImmutable.variaCharPointerConstLen +ReturnsString TK_FieldImmutable.variaCharPointerConstLen +ReturnedArrayLength TK_FieldImmutable.variaCharPointerConstLen 15 +ImmutableAccess TK_FieldImmutable.variaCharPointerVariaLen +ReturnsString TK_FieldImmutable.variaCharPointerVariaLen +ImmutableAccess TK_FieldImmutable.variaCharPointerCustomLen +ReturnsString TK_FieldImmutable.variaCharPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.variaCharPointerCustomLen getVariaCharPointerCustomLenElemCount() + +# TK_FieldImmutable StringOnly.ConstValue 1A + 3P = 4 +ImmutableAccess TK_FieldImmutable.constStringOnlyArrayConstLen +ReturnsStringOnly TK_FieldImmutable.constStringOnlyArrayConstLen +ImmutableAccess TK_FieldImmutable.constStringOnlyPointerConstLen +ReturnsStringOnly TK_FieldImmutable.constStringOnlyPointerConstLen +ReturnedArrayLength TK_FieldImmutable.constStringOnlyPointerConstLen 15 +ImmutableAccess TK_FieldImmutable.constStringOnlyPointerVariaLen +ReturnsStringOnly TK_FieldImmutable.constStringOnlyPointerVariaLen +ImmutableAccess TK_FieldImmutable.constStringOnlyPointerCustomLen +ReturnsStringOnly TK_FieldImmutable.constStringOnlyPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.constStringOnlyPointerCustomLen getConstStringOnlyPointerCustomLenElemCount() + +# TK_FieldImmutable StringOnly.VariaValue 1A + 3P = 4 +ImmutableAccess TK_FieldImmutable.variaStringOnlyArrayConstLen +ReturnsStringOnly TK_FieldImmutable.variaStringOnlyArrayConstLen +ImmutableAccess TK_FieldImmutable.variaStringOnlyPointerConstLen +ReturnsStringOnly TK_FieldImmutable.variaStringOnlyPointerConstLen +ReturnedArrayLength TK_FieldImmutable.variaStringOnlyPointerConstLen 15 +ImmutableAccess TK_FieldImmutable.variaStringOnlyPointerVariaLen +ReturnsStringOnly TK_FieldImmutable.variaStringOnlyPointerVariaLen +ImmutableAccess TK_FieldImmutable.variaStringOnlyPointerCustomLen +ReturnsStringOnly TK_FieldImmutable.variaStringOnlyPointerCustomLen +ReturnedArrayLength TK_FieldImmutable.variaStringOnlyPointerCustomLen getVariaStringOnlyPointerCustomLenElemCount() + + +# +# TK_StructImmutable +# + +EmitStruct TK_StructImmutable +StructPackage TK_StructImmutable com.jogamp.gluegen.test.junit.generation + +ImmutableAccess TK_StructImmutable + +# TK_StructImmutable Primitive.ConstValue.intxx +ReturnedArrayLength TK_StructImmutable.constIntxxPointerConstOneElem 1 +MaxOneElement TK_StructImmutable.constIntxxPointerMaxOneElem +ReturnedArrayLength TK_StructImmutable.constIntxxPointerConstLen 3 +ReturnedArrayLength TK_StructImmutable.constIntxxPointerCustomLen getConstIntxxPointerCustomLenElemCount() + +# TK_StructImmutable Primitive.VariaValue.intxx +ReturnedArrayLength TK_StructImmutable.variaIntxxPointerConstOneElem 1 +MaxOneElement TK_StructImmutable.variaIntxxPointerMaxOneElem +ReturnedArrayLength TK_StructImmutable.variaIntxxPointerConstLen 3 +ReturnedArrayLength TK_StructImmutable.variaIntxxPointerCustomLen getVariaIntxxPointerCustomLenElemCount() + +# TK_StructImmutable Primitive.ConstValue.int32 +ReturnedArrayLength TK_StructImmutable.constInt32PointerConstOneElem 1 +MaxOneElement TK_StructImmutable.constInt32PointerMaxOneElem +ReturnedArrayLength TK_StructImmutable.constInt32PointerConstLen 3 +ReturnedArrayLength TK_StructImmutable.constInt32PointerCustomLen getConstInt32PointerCustomLenElemCount() + +# TK_StructImmutable Primitive.VariaValue.int32 +ReturnedArrayLength TK_StructImmutable.variaInt32PointerConstOneElem 1 +MaxOneElement TK_StructImmutable.variaInt32PointerMaxOneElem +ReturnedArrayLength TK_StructImmutable.variaInt32PointerConstLen 3 +ReturnedArrayLength TK_StructImmutable.variaInt32PointerCustomLen getVariaInt32PointerCustomLenElemCount() + +# TK_StructImmutable Struct.ConstValue.TK_Dimension +ReturnedArrayLength TK_StructImmutable.constStructPointerConstOneElem 1 +MaxOneElement TK_StructImmutable.constStructPointerMaxOneElem +ReturnedArrayLength TK_StructImmutable.constStructPointerConstLen 3 +ReturnedArrayLength TK_StructImmutable.constStructPointerCustomLen getConstStructPointerCustomLenElemCount() + +# TK_StructImmutable Struct.VariaValue.TK_Dimension +ReturnedArrayLength TK_StructImmutable.variaStructPointerConstOneElem 1 +MaxOneElement TK_StructImmutable.variaStructPointerMaxOneElem +ReturnedArrayLength TK_StructImmutable.variaStructPointerConstLen 3 +ReturnedArrayLength TK_StructImmutable.variaStructPointerCustomLen getVariaStructPointerCustomLenElemCount() + +# TK_StructImmutable String.ConstValue 1A + 3P = 4 +ReturnsString TK_StructImmutable.constCharArrayConstLen +ReturnsString TK_StructImmutable.constCharPointerConstLen +ReturnedArrayLength TK_StructImmutable.constCharPointerConstLen 15 +ReturnsString TK_StructImmutable.constCharPointerVariaLen +ReturnsString TK_StructImmutable.constCharPointerCustomLen +ReturnedArrayLength TK_StructImmutable.constCharPointerCustomLen getConstCharPointerCustomLenElemCount() + +# TK_StructImmutable String.VariaValue 1A + 3P = 4 +ReturnsString TK_StructImmutable.variaCharArrayConstLen +ReturnsString TK_StructImmutable.variaCharPointerConstLen +ReturnedArrayLength TK_StructImmutable.variaCharPointerConstLen 15 +ReturnsString TK_StructImmutable.variaCharPointerVariaLen +ReturnsString TK_StructImmutable.variaCharPointerCustomLen +ReturnedArrayLength TK_StructImmutable.variaCharPointerCustomLen getVariaCharPointerCustomLenElemCount() + +# TK_StructImmutable StringOnly.ConstValue 1A + 3P = 4 +ReturnsStringOnly TK_StructImmutable.constStringOnlyArrayConstLen +ReturnsStringOnly TK_StructImmutable.constStringOnlyPointerConstLen +ReturnedArrayLength TK_StructImmutable.constStringOnlyPointerConstLen 15 +ReturnsStringOnly TK_StructImmutable.constStringOnlyPointerVariaLen +ReturnsStringOnly TK_StructImmutable.constStringOnlyPointerCustomLen +ReturnedArrayLength TK_StructImmutable.constStringOnlyPointerCustomLen getConstStringOnlyPointerCustomLenElemCount() + +# TK_StructImmutable StringOnly.VariaValue 1A + 3P = 4 +ReturnsStringOnly TK_StructImmutable.variaStringOnlyArrayConstLen +ReturnsStringOnly TK_StructImmutable.variaStringOnlyPointerConstLen +ReturnedArrayLength TK_StructImmutable.variaStringOnlyPointerConstLen 15 +ReturnsStringOnly TK_StructImmutable.variaStringOnlyPointerVariaLen +ReturnsStringOnly TK_StructImmutable.variaStringOnlyPointerCustomLen +ReturnedArrayLength TK_StructImmutable.variaStringOnlyPointerCustomLen getVariaStringOnlyPointerCustomLenElemCount() + +# +# TK_Field +# + +EmitStruct TK_Field +StructPackage TK_Field com.jogamp.gluegen.test.junit.generation + +# TK_Field Primitive.ConstValue.intxx +ReturnedArrayLength TK_Field.constIntxxPointerConstOneElem 1 +MaxOneElement TK_Field.constIntxxPointerMaxOneElem +ReturnedArrayLength TK_Field.constIntxxPointerConstLen 3 +ReturnedArrayLength TK_Field.constIntxxPointerCustomLen getConstIntxxPointerCustomLenElemCount() + +# TK_Field Primitive.VariaValue.intxx +ReturnedArrayLength TK_Field.variaIntxxPointerConstOneElem 1 +MaxOneElement TK_Field.variaIntxxPointerMaxOneElem +ReturnedArrayLength TK_Field.variaIntxxPointerConstLen 3 +ReturnedArrayLength TK_Field.variaIntxxPointerCustomLen getVariaIntxxPointerCustomLenElemCount() + +# TK_Field Primitive.ConstValue.int32 +ReturnedArrayLength TK_Field.constInt32PointerConstOneElem 1 +MaxOneElement TK_Field.constInt32PointerMaxOneElem +ReturnedArrayLength TK_Field.constInt32PointerConstLen 3 +ReturnedArrayLength TK_Field.constInt32PointerCustomLen getConstInt32PointerCustomLenElemCount() + +# TK_Field Primitive.VariaValue.int32 +ReturnedArrayLength TK_Field.variaInt32PointerConstOneElem 1 +MaxOneElement TK_Field.variaInt32PointerMaxOneElem +ReturnedArrayLength TK_Field.variaInt32PointerConstLen 3 +ReturnedArrayLength TK_Field.variaInt32PointerCustomLen getVariaInt32PointerCustomLenElemCount() + +# TK_Field Struct.ConstValue.TK_Dimension +ReturnedArrayLength TK_Field.constStructPointerConstOneElem 1 +MaxOneElement TK_Field.constStructPointerMaxOneElem +ReturnedArrayLength TK_Field.constStructPointerConstLen 3 +ReturnedArrayLength TK_Field.constStructPointerCustomLen getConstStructPointerCustomLenElemCount() + +# TK_Field Struct.VariaValue.TK_Dimension +ReturnedArrayLength TK_Field.variaStructPointerConstOneElem 1 +MaxOneElement TK_Field.variaStructPointerMaxOneElem +ReturnedArrayLength TK_Field.variaStructPointerConstLen 3 +ReturnedArrayLength TK_Field.variaStructPointerCustomLen getVariaStructPointerCustomLenElemCount() + +# TK_Field String.ConstValue 1A + 3P = 4 +ReturnsString TK_Field.constCharArrayConstLen +ReturnsString TK_Field.constCharPointerConstLen +ReturnedArrayLength TK_Field.constCharPointerConstLen 15 +ReturnsString TK_Field.constCharPointerVariaLen +ReturnsString TK_Field.constCharPointerCustomLen +ReturnedArrayLength TK_Field.constCharPointerCustomLen getConstCharPointerCustomLenElemCount() + +# TK_Field String.VariaValue 1A + 3P = 4 +ReturnsString TK_Field.variaCharArrayConstLen +ReturnsString TK_Field.variaCharPointerConstLen +ReturnedArrayLength TK_Field.variaCharPointerConstLen 15 +ReturnsString TK_Field.variaCharPointerVariaLen +ReturnsString TK_Field.variaCharPointerCustomLen +ReturnedArrayLength TK_Field.variaCharPointerCustomLen getVariaCharPointerCustomLenElemCount() + +# TK_Field StringOnly.ConstValue 1A + 3P = 4 +ReturnsStringOnly TK_Field.constStringOnlyArrayConstLen +ReturnsStringOnly TK_Field.constStringOnlyPointerConstLen +ReturnedArrayLength TK_Field.constStringOnlyPointerConstLen 15 +ReturnsStringOnly TK_Field.constStringOnlyPointerVariaLen +ReturnsStringOnly TK_Field.constStringOnlyPointerCustomLen +ReturnedArrayLength TK_Field.constStringOnlyPointerCustomLen getConstStringOnlyPointerCustomLenElemCount() + +# TK_Field StringOnly.VariaValue 1A + 3P = 4 +ReturnsStringOnly TK_Field.variaStringOnlyArrayConstLen +ReturnsStringOnly TK_Field.variaStringOnlyPointerConstLen +ReturnedArrayLength TK_Field.variaStringOnlyPointerConstLen 15 +ReturnsStringOnly TK_Field.variaStringOnlyPointerVariaLen +ReturnsStringOnly TK_Field.variaStringOnlyPointerCustomLen +ReturnedArrayLength TK_Field.variaStringOnlyPointerCustomLen getVariaStringOnlyPointerCustomLenElemCount() + +# +# +# + +ReturnValueCapacity createTKFieldImmutable sizeof(TK_FieldImmutable) +ReturnValueCapacity createTKStructImmutable sizeof(TK_StructImmutable) +ReturnValueCapacity createTKField sizeof(TK_Field) +ReturnValueCapacity createTKModelMixed sizeof(TK_ModelMixed) # Imports needed by all glue code Import java.nio.* @@ -119,8 +380,10 @@ Import com.jogamp.gluegen.test.junit.generation.TK_DimensionPair Import com.jogamp.gluegen.test.junit.generation.TK_Engine Import com.jogamp.gluegen.test.junit.generation.TK_ComplicatedSuperSet Import com.jogamp.gluegen.test.junit.generation.TK_ComplicatedSubSet -Import com.jogamp.gluegen.test.junit.generation.TK_ModelConst -Import com.jogamp.gluegen.test.junit.generation.TK_ModelMutable +Import com.jogamp.gluegen.test.junit.generation.TK_FieldImmutable +Import com.jogamp.gluegen.test.junit.generation.TK_StructImmutable +Import com.jogamp.gluegen.test.junit.generation.TK_Field +Import com.jogamp.gluegen.test.junit.generation.TK_ModelMixed diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c index 0683600..b74a171 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c @@ -636,112 +636,418 @@ MYAPI void MYAPIENTRY addByte(const char summands[2], char result[1]) { result[0] = summands[0] + summands[1]; } -MYAPI TK_ModelMutable * MYAPIENTRY createModelMutable() { - int i, j; - TK_ModelMutable * s = calloc(1, sizeof(TK_ModelMutable)); +typedef struct { + // Primitive.ConstValue.intxx 2A + 5P = 7 + int constIntxxArrayConstOneElem[1]; + int constIntxxArrayConstLen[3]; // [3] + int* constIntxxPointerConstOneElem; // + int* constIntxxPointerMaxOneElem; // + int* constIntxxPointerConstLen; // [3] + int* constIntxxPointerVariaLen; + int* constIntxxPointerCustomLen; + int constIntxxPointerCustomLenElemCount; + + // Primitive.VariaValue.intxx 2A + 5P = 7 + int variaIntxxArrayConstOneElem[1]; + int variaIntxxArrayConstLen[3]; // [3] + int* variaIntxxPointerConstOneElem; // + int* variaIntxxPointerMaxOneElem; // + int* variaIntxxPointerConstLen; // [3] + int* variaIntxxPointerVariaLen; + int* variaIntxxPointerCustomLen; + int variaIntxxPointerCustomLenElemCount; + + int32_t constInt32Element; + int32_t variaInt32Element; + + // Primitive.ConstValue 2A + 5P = 7 + int32_t constInt32ArrayConstOneElem[1]; + int32_t constInt32ArrayConstLen[3]; + int32_t* constInt32PointerConstOneElem; + int32_t* constInt32PointerMaxOneElem; + int32_t* constInt32PointerConstLen; + int32_t* constInt32PointerVariaLen; + int32_t* constInt32PointerCustomLen; + int32_t constInt32PointerCustomLenElemCount; + + // Primitive.VariaValue 2A + 5P = 7 + int32_t variaInt32ArrayConstOneElem[1]; + int32_t variaInt32ArrayConstLen[3]; + int32_t* variaInt32PointerConstOneElem; + int32_t* variaInt32PointerMaxOneElem; + int32_t* variaInt32PointerConstLen; + int32_t* variaInt32PointerVariaLen; + int32_t* variaInt32PointerCustomLen; + int32_t variaInt32PointerCustomLenElemCount; + + // Struct.ConstValue 2A + 5P = 7 + TK_Dimension constStructArrayConstOneElem[1]; + TK_Dimension constStructArrayConstLen[3]; + TK_Dimension* constStructPointerConstOneElem; + TK_Dimension* constStructPointerMaxOneElem; + TK_Dimension* constStructPointerConstLen; + TK_Dimension* constStructPointerVariaLen; + TK_Dimension* constStructPointerCustomLen; + int32_t constStructPointerCustomLenElemCount; + + // Struct.VariaValue 2A + 5P = 7 + TK_Dimension variaStructArrayConstOneElem[1]; + TK_Dimension variaStructArrayConstLen[3]; + TK_Dimension* variaStructPointerConstOneElem; + TK_Dimension* variaStructPointerMaxOneElem; + TK_Dimension* variaStructPointerConstLen; + TK_Dimension* variaStructPointerVariaLen; + TK_Dimension* variaStructPointerCustomLen; + int32_t variaStructPointerCustomLenElemCount; + + // String.ConstValue 1A + 3P = 4 + char constCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* constCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* constCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* constCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constCharPointerCustomLenElemCount; + + // String.VariaValue 1A + 3P = 4 + char variaCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaCharPointerCustomLenElemCount; + + // StringOnly.ConstValue 1A + 3P = 4 + char constStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* constStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* constStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* constStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constStringOnlyPointerCustomLenElemCount; + + // StringOnly.VariaValue 1A + 3P = 4 + char variaStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaStringOnlyPointerCustomLenElemCount; + +} TK_FieldMutable; + + +static TK_FieldMutable * createTKFieldMutable() { + TK_FieldMutable * s = calloc(1, sizeof(TK_FieldMutable)); + + // Primitive.ConstValue.intxx 2A + 5P = 7 + s->constIntxxArrayConstOneElem[0] = 88; + s->constIntxxArrayConstLen[0] = 1; + s->constIntxxArrayConstLen[1] = 2; + s->constIntxxArrayConstLen[2] = 3; + s->constIntxxPointerConstOneElem = calloc(1, sizeof(int)); + s->constIntxxPointerConstOneElem[0] = 10; + s->constIntxxPointerMaxOneElem = NULL; + s->constIntxxPointerConstLen = calloc(3, sizeof(int)); + s->constIntxxPointerConstLen[0] = 21; + s->constIntxxPointerConstLen[1] = 22; + s->constIntxxPointerConstLen[2] = 23; + s->constIntxxPointerVariaLen = NULL; + s->constIntxxPointerCustomLen = calloc(4, sizeof(int)); + s->constIntxxPointerCustomLen[0] = 31; + s->constIntxxPointerCustomLen[1] = 32; + s->constIntxxPointerCustomLen[2] = 33; + s->constIntxxPointerCustomLen[3] = 34; + s->constIntxxPointerCustomLenElemCount = 4; + + // Primitive.VariaValue.intxx 2A + 5P = 7 + s->variaIntxxArrayConstOneElem[0] = 88; + s->variaIntxxArrayConstLen[0] = 1; + s->variaIntxxArrayConstLen[1] = 2; + s->variaIntxxArrayConstLen[2] = 3; + s->variaIntxxPointerConstOneElem = calloc(1, sizeof(int)); + s->variaIntxxPointerConstOneElem[0] = 10; + s->variaIntxxPointerMaxOneElem = NULL; + s->variaIntxxPointerConstLen = calloc(3, sizeof(int)); + s->variaIntxxPointerConstLen[0] = 21; + s->variaIntxxPointerConstLen[1] = 22; + s->variaIntxxPointerConstLen[2] = 23; + s->variaIntxxPointerVariaLen = NULL; + s->variaIntxxPointerCustomLen = calloc(4, sizeof(int)); + s->variaIntxxPointerCustomLen[0] = 31; + s->variaIntxxPointerCustomLen[1] = 32; + s->variaIntxxPointerCustomLen[2] = 33; + s->variaIntxxPointerCustomLen[3] = 34; + s->variaIntxxPointerCustomLenElemCount = 4; + + // Primitive.ConstValue.int32 2A + 5P = 7 + s->constInt32ArrayConstOneElem[0] = 88; + s->constInt32ArrayConstLen[0] = 1; + s->constInt32ArrayConstLen[1] = 2; + s->constInt32ArrayConstLen[2] = 3; + s->constInt32PointerConstOneElem = calloc(1, sizeof(int32_t)); + s->constInt32PointerConstOneElem[0] = 10; + s->constInt32PointerMaxOneElem = NULL; + s->constInt32PointerConstLen = calloc(3, sizeof(int32_t)); + s->constInt32PointerConstLen[0] = 21; + s->constInt32PointerConstLen[1] = 22; + s->constInt32PointerConstLen[2] = 23; + s->constInt32PointerVariaLen = NULL; + s->constInt32PointerCustomLen = calloc(4, sizeof(int32_t)); + s->constInt32PointerCustomLen[0] = 31; + s->constInt32PointerCustomLen[1] = 32; + s->constInt32PointerCustomLen[2] = 33; + s->constInt32PointerCustomLen[3] = 34; + s->constInt32PointerCustomLenElemCount = 4; + + // Primitive.VariaValue.int32 2A + 5P = 7 + s->variaInt32ArrayConstOneElem[0] = 88; + s->variaInt32ArrayConstLen[0] = 1; + s->variaInt32ArrayConstLen[1] = 2; + s->variaInt32ArrayConstLen[2] = 3; + s->variaInt32PointerConstOneElem = calloc(1, sizeof(int32_t)); + s->variaInt32PointerConstOneElem[0] = 10; + s->variaInt32PointerMaxOneElem = NULL; + s->variaInt32PointerConstLen = calloc(3, sizeof(int32_t)); + s->variaInt32PointerConstLen[0] = 21; + s->variaInt32PointerConstLen[1] = 22; + s->variaInt32PointerConstLen[2] = 23; + s->variaInt32PointerVariaLen = NULL; + s->variaInt32PointerCustomLen = calloc(4, sizeof(int32_t)); + s->variaInt32PointerCustomLen[0] = 31; + s->variaInt32PointerCustomLen[1] = 32; + s->variaInt32PointerCustomLen[2] = 33; + s->variaInt32PointerCustomLen[3] = 34; + s->variaInt32PointerCustomLenElemCount = 4; + + // Struct.ConstValue.TK_Dimension 2A + 5P = 7 + s->constStructArrayConstOneElem[0].x = 51; + s->constStructArrayConstOneElem[0].y = 52; + s->constStructArrayConstOneElem[0].width = 53; + s->constStructArrayConstOneElem[0].height = 54; + s->constStructArrayConstLen[0].x = 61; + s->constStructArrayConstLen[0].y = 62; + s->constStructArrayConstLen[0].width = 63; + s->constStructArrayConstLen[0].height = 64; + s->constStructArrayConstLen[1].x = 71; + s->constStructArrayConstLen[1].y = 72; + s->constStructArrayConstLen[1].width = 73; + s->constStructArrayConstLen[1].height = 74; + s->constStructArrayConstLen[2].x = 81; + s->constStructArrayConstLen[2].y = 82; + s->constStructArrayConstLen[2].width = 83; + s->constStructArrayConstLen[2].height = 84; + s->constStructPointerConstOneElem = calloc(1, sizeof(TK_Dimension)); + s->constStructPointerConstOneElem[0].x = 91; + s->constStructPointerConstOneElem[0].y = 92; + s->constStructPointerConstOneElem[0].width = 93; + s->constStructPointerConstOneElem[0].height = 94; + s->constStructPointerMaxOneElem = NULL; + s->constStructPointerConstLen = calloc(3, sizeof(TK_Dimension)); + s->constStructPointerConstLen[0].x = 101; + s->constStructPointerConstLen[0].y = 102; + s->constStructPointerConstLen[0].width = 103; + s->constStructPointerConstLen[0].height = 104; + s->constStructPointerConstLen[1].x = 111; + s->constStructPointerConstLen[1].y = 112; + s->constStructPointerConstLen[1].width = 113; + s->constStructPointerConstLen[1].height = 114; + s->constStructPointerConstLen[2].x = 121; + s->constStructPointerConstLen[2].y = 123; + s->constStructPointerConstLen[2].width = 124; + s->constStructPointerConstLen[2].height = 125; + s->constStructPointerVariaLen = NULL; + s->constStructPointerCustomLen = calloc(4, sizeof(TK_Dimension)); + s->constStructPointerCustomLen[0].x = 131; + s->constStructPointerCustomLen[0].y = 132; + s->constStructPointerCustomLen[0].width = 133; + s->constStructPointerCustomLen[0].height = 134; + s->constStructPointerCustomLen[1].x = 141; + s->constStructPointerCustomLen[1].y = 142; + s->constStructPointerCustomLen[1].width = 143; + s->constStructPointerCustomLen[1].height = 144; + s->constStructPointerCustomLen[2].x = 151; + s->constStructPointerCustomLen[2].y = 152; + s->constStructPointerCustomLen[2].width = 153; + s->constStructPointerCustomLen[2].height = 154; + s->constStructPointerCustomLen[3].x = 161; + s->constStructPointerCustomLen[3].y = 162; + s->constStructPointerCustomLen[3].width = 163; + s->constStructPointerCustomLen[3].height = 164; + s->constStructPointerCustomLenElemCount = 4; + + // Struct.VariaValue.TK_Dimension 2A + 5P = 7 + s->variaStructArrayConstOneElem[0].x = 51; + s->variaStructArrayConstOneElem[0].y = 52; + s->variaStructArrayConstOneElem[0].width = 53; + s->variaStructArrayConstOneElem[0].height = 54; + s->variaStructArrayConstLen[0].x = 61; + s->variaStructArrayConstLen[0].y = 62; + s->variaStructArrayConstLen[0].width = 63; + s->variaStructArrayConstLen[0].height = 64; + s->variaStructArrayConstLen[1].x = 71; + s->variaStructArrayConstLen[1].y = 72; + s->variaStructArrayConstLen[1].width = 73; + s->variaStructArrayConstLen[1].height = 74; + s->variaStructArrayConstLen[2].x = 81; + s->variaStructArrayConstLen[2].y = 82; + s->variaStructArrayConstLen[2].width = 83; + s->variaStructArrayConstLen[2].height = 84; + s->variaStructPointerConstOneElem = calloc(1, sizeof(TK_Dimension)); + s->variaStructPointerConstOneElem[0].x = 91; + s->variaStructPointerConstOneElem[0].y = 92; + s->variaStructPointerConstOneElem[0].width = 93; + s->variaStructPointerConstOneElem[0].height = 94; + s->variaStructPointerMaxOneElem = NULL; + s->variaStructPointerConstLen = calloc(3, sizeof(TK_Dimension)); + s->variaStructPointerConstLen[0].x = 101; + s->variaStructPointerConstLen[0].y = 102; + s->variaStructPointerConstLen[0].width = 103; + s->variaStructPointerConstLen[0].height = 104; + s->variaStructPointerConstLen[1].x = 111; + s->variaStructPointerConstLen[1].y = 112; + s->variaStructPointerConstLen[1].width = 113; + s->variaStructPointerConstLen[1].height = 114; + s->variaStructPointerConstLen[2].x = 121; + s->variaStructPointerConstLen[2].y = 123; + s->variaStructPointerConstLen[2].width = 124; + s->variaStructPointerConstLen[2].height = 125; + s->variaStructPointerVariaLen = NULL; + s->variaStructPointerCustomLen = calloc(4, sizeof(TK_Dimension)); + s->variaStructPointerCustomLen[0].x = 131; + s->variaStructPointerCustomLen[0].y = 132; + s->variaStructPointerCustomLen[0].width = 133; + s->variaStructPointerCustomLen[0].height = 134; + s->variaStructPointerCustomLen[1].x = 141; + s->variaStructPointerCustomLen[1].y = 142; + s->variaStructPointerCustomLen[1].width = 143; + s->variaStructPointerCustomLen[1].height = 144; + s->variaStructPointerCustomLen[2].x = 151; + s->variaStructPointerCustomLen[2].y = 152; + s->variaStructPointerCustomLen[2].width = 153; + s->variaStructPointerCustomLen[2].height = 154; + s->variaStructPointerCustomLen[3].x = 161; + s->variaStructPointerCustomLen[3].y = 162; + s->variaStructPointerCustomLen[3].width = 163; + s->variaStructPointerCustomLen[3].height = 164; + s->variaStructPointerCustomLenElemCount = 4; + + // String.ConstValue 1A + 3P = 4 + strncpy(s->constCharArrayConstLen, "Hello Array1", sizeof(s->constCharArrayConstLen)); + s->constCharPointerConstLen = calloc(14+1, sizeof(char)); + strncpy(s->constCharPointerConstLen, "Hello CString1", 14+1); + s->constCharPointerVariaLen = NULL; + s->constCharPointerCustomLen = calloc(14+1, sizeof(char)); + strncpy(s->constCharPointerCustomLen, "Hello CString3", 14+1); + s->constCharPointerCustomLenElemCount = 14+1; + + // String.VariaValue 1A + 3P = 4 + strncpy(s->variaCharArrayConstLen, "Hello Array1", sizeof(s->variaCharArrayConstLen)); + s->variaCharPointerConstLen = calloc(14+1, sizeof(char)); + strncpy(s->variaCharPointerConstLen, "Hello CString1", 14+1); + s->variaCharPointerVariaLen = NULL; + s->variaCharPointerCustomLen = calloc(14+1, sizeof(char)); + strncpy(s->variaCharPointerCustomLen, "Hello CString3", 14+1); + s->variaCharPointerCustomLenElemCount = 14+1; + + // StringOnly.ConstValue 1A + 3P = 4 + strncpy(s->constStringOnlyArrayConstLen, "Hello Array1", sizeof(s->constStringOnlyArrayConstLen)); + s->constStringOnlyPointerConstLen = calloc(14+1, sizeof(char)); + strncpy(s->constStringOnlyPointerConstLen, "Hello CString1", 14+1); + s->constStringOnlyPointerVariaLen = NULL; + s->constStringOnlyPointerCustomLen = calloc(14+1, sizeof(char)); + strncpy(s->constStringOnlyPointerCustomLen, "Hello CString3", 14+1); + s->constStringOnlyPointerCustomLenElemCount = 14+1; + + // StringOnly.VariaValue 1A + 3P = 4 + strncpy(s->variaStringOnlyArrayConstLen, "Hello Array1", sizeof(s->variaStringOnlyArrayConstLen)); + s->variaStringOnlyPointerConstLen = calloc(14+1, sizeof(char)); + strncpy(s->variaStringOnlyPointerConstLen, "Hello CString1", 14+1); + s->variaStringOnlyPointerVariaLen = NULL; + s->variaStringOnlyPointerCustomLen = calloc(14+1, sizeof(char)); + strncpy(s->variaStringOnlyPointerCustomLen, "Hello CString3", 14+1); + s->variaStringOnlyPointerCustomLenElemCount = 14+1; - s->intxxArrayFixedLen[0]=1; - s->intxxArrayFixedLen[1]=2; - s->intxxArrayFixedLen[2]=3; - - s->intxxPointerCustomLen = calloc(3, sizeof(int)); - s->intxxPointerCustomLen[0] = 11; - s->intxxPointerCustomLen[1] = 12; - s->intxxPointerCustomLen[2] = 13; - s->intxxPointerCustomLenVal=3; + return s; +} - s->int32ArrayFixedLen[0] = 21; - s->int32ArrayFixedLen[1] = 22; - s->int32ArrayFixedLen[2] = 23; +static void destroyTKFieldMutable(TK_FieldMutable * s) { + assert(NULL!=s); - s->int32ArrayOneElem[0] = 30; + assert(NULL!=s->constIntxxPointerConstOneElem); + free(s->constIntxxPointerConstOneElem); + assert(NULL!=s->constIntxxPointerConstLen); + free(s->constIntxxPointerConstLen); + if( 0 < s->constIntxxPointerCustomLenElemCount && NULL!=s->constIntxxPointerCustomLen ) { + // NOTE Ownership is ambiguous + free(s->constIntxxPointerCustomLen); + } - s->int32PointerCustomLen = calloc(3, sizeof(int)); - s->int32PointerCustomLen[0] = 31; - s->int32PointerCustomLen[1] = 32; - s->int32PointerCustomLen[2] = 33; - s->int32PointerCustomLenVal=3; - - s->int32PointerOneElem = calloc(1, sizeof(int)); - s->int32PointerOneElem[0] = 41; + assert(NULL!=s->constInt32PointerConstOneElem); + free(s->constInt32PointerConstOneElem); + assert(NULL!=s->constInt32PointerConstLen); + free(s->constInt32PointerConstLen); + if( 0 < s->constInt32PointerCustomLenElemCount && NULL!=s->constInt32PointerCustomLen ) { + // NOTE Ownership is ambiguous + free(s->constInt32PointerCustomLen); + } + + assert(NULL!=s->constStructPointerConstOneElem); + free(s->constStructPointerConstOneElem); + assert(NULL!=s->constStructPointerConstLen); + free(s->constStructPointerConstLen); + if( 0 < s->constStructPointerCustomLenElemCount && NULL!=s->constStructPointerCustomLen ) { + // NOTE Ownership is ambiguous + free(s->constStructPointerCustomLen); + } + + assert(NULL!=s->constCharPointerConstLen); + free(s->constCharPointerConstLen); + if( 0 < s->constCharPointerCustomLenElemCount && NULL!=s->constCharPointerCustomLen ) { + // NOTE Ownership is ambiguous + free(s->constCharPointerCustomLen); + } - for(i=0; i<4; i++) { - for(j=0; j<4; j++) { - s->mat4x4[i][j] = i*4 + j; - } + assert(NULL!=s->constStringOnlyPointerConstLen); + free(s->constStringOnlyPointerConstLen); + if( 0 < s->constStringOnlyPointerCustomLenElemCount && NULL!=s->constStringOnlyPointerCustomLen ) { + // NOTE Ownership is ambiguous + free(s->constStringOnlyPointerCustomLen); } - s->structArrayFixedLen[0].x = 51; - s->structArrayFixedLen[0].y = 52; - s->structArrayFixedLen[0].width = 53; - s->structArrayFixedLen[0].height = 54; - s->structArrayFixedLen[1].x = 61; - s->structArrayFixedLen[1].y = 62; - s->structArrayFixedLen[1].width = 63; - s->structArrayFixedLen[1].height = 64; - s->structArrayFixedLen[2].x = 71; - s->structArrayFixedLen[2].y = 72; - s->structArrayFixedLen[2].width = 73; - s->structArrayFixedLen[2].height = 74; - - s->structArrayOneElem[0].x = 81; - s->structArrayOneElem[0].y = 82; - s->structArrayOneElem[0].width = 83; - s->structArrayOneElem[0].height = 84; - - s->structPointerCustomLen = (TK_Dimension *) calloc(3, sizeof(TK_Dimension)); - s->structPointerCustomLen[0].x = 91; - s->structPointerCustomLen[0].y = 92; - s->structPointerCustomLen[0].width = 93; - s->structPointerCustomLen[0].height = 94; - s->structPointerCustomLen[1].x = 101; - s->structPointerCustomLen[1].y = 102; - s->structPointerCustomLen[1].width = 103; - s->structPointerCustomLen[1].height = 104; - s->structPointerCustomLen[2].x = 111; - s->structPointerCustomLen[2].y = 112; - s->structPointerCustomLen[2].width = 113; - s->structPointerCustomLen[2].height = 114; - s->structPointerCustomLenVal = 3; - - s->structPointerOneElem = (TK_Dimension *) calloc(1, sizeof(TK_Dimension)); - s->structPointerOneElem[0].x = 121; - s->structPointerOneElem[0].y = 122; - s->structPointerOneElem[0].width = 123; - s->structPointerOneElem[0].height = 124; + free(s); +} - s->ctx = (void *) 0x123456789abcdef0UL; +MYAPI TK_FieldImmutable * MYAPIENTRY createTKFieldImmutable() { + return (TK_FieldImmutable*) createTKFieldMutable(); +} +MYAPI void MYAPIENTRY destroyTKFieldImmutable(TK_FieldImmutable * s) { + destroyTKFieldMutable((TK_FieldMutable*) s); +} - strncpy(s->modelNameArrayFixedLen, "Hello Array", sizeof(s->modelNameArrayFixedLen)); +MYAPI TK_StructImmutable * MYAPIENTRY createTKStructImmutable() { + return (TK_StructImmutable*) createTKFieldMutable(); +} +MYAPI void MYAPIENTRY destroyTKStructImmutable(TK_StructImmutable * s) { + destroyTKFieldMutable((TK_FieldMutable*) s); +} - s->modelNamePointerCString = calloc(13+1, sizeof(char)); - strncpy(s->modelNamePointerCString, "Hello CString", 13+1); +MYAPI TK_Field * MYAPIENTRY createTKField() { + return (TK_Field*) createTKFieldMutable(); +} +MYAPI void MYAPIENTRY destroyTKField(TK_Field * s) { + destroyTKFieldMutable((TK_FieldMutable*) s); +} - s->modelNamePointerCustomLen = calloc(13+1, sizeof(char)); - strncpy(s->modelNamePointerCustomLen, "Hello Pointer", 13+1); - s->modelNamePointerCustomLenVal = 13+1; +MYAPI TK_ModelMixed* MYAPIENTRY createTKModelMixed() { + int i, j; + TK_ModelMixed * s = calloc(1, sizeof(TK_ModelMixed)); + for(i=0; i<4; i++) { + for(j=0; j<4; j++) { + s->mat4x4[i][j] = i*4 + j; + } + } + s->ctx = (void *) 0x123456789abcdef0UL; return s; } -MYAPI void MYAPIENTRY destroyModelMutable(TK_ModelMutable * s) { +MYAPI void MYAPIENTRY destroyTKModelMixed(TK_ModelMixed * s) { assert(NULL!=s); - assert(NULL!=s->intxxPointerCustomLen); - assert(NULL!=s->int32PointerCustomLen); - assert(NULL!=s->int32PointerOneElem); - assert(NULL!=s->structPointerCustomLen); - free(s->intxxPointerCustomLen); - free(s->int32PointerCustomLen); - free(s->int32PointerOneElem); - free(s->structPointerCustomLen); - free(s->modelNamePointerCString); - free(s->modelNamePointerCustomLen); free(s); } -MYAPI TK_ModelConst * MYAPIENTRY createModelConst() { - return (TK_ModelConst *)createModelMutable(); -} -MYAPI void MYAPIENTRY destroyModelConst(TK_ModelConst * s) { - destroyModelMutable((TK_ModelMutable *)s); -} diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h index 9465cd9..89848d7 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h @@ -437,71 +437,320 @@ MYAPI void MYAPIENTRY intToRgba(int irgba, char rgbaSink[4]); MYAPI void MYAPIENTRY addInt(const int summands[2], int result[1]); MYAPI void MYAPIENTRY addByte(const char summands[2], char result[1]); -typedef struct { - const int intxxArrayFixedLen[3]; - - const int * intxxPointerCustomLen; - const int intxxPointerCustomLenVal; - - const int32_t int32ArrayFixedLen[3]; - const int32_t int32ArrayOneElem[1]; - - const int32_t * int32PointerCustomLen; - const int32_t int32PointerCustomLenVal; - - const int32_t * int32PointerOneElem; - - const float mat4x4[4][4]; +// +// TK_FieldImmutable +// - const TK_Dimension structArrayFixedLen[3]; - const TK_Dimension structArrayOneElem[1]; - - const TK_Dimension * structPointerCustomLen; - const int32_t structPointerCustomLenVal; - const TK_Dimension * structPointerOneElem; +typedef struct { + // Primitive.ConstValue.intxx 2A + 5P = 7 + const int constIntxxArrayConstOneElem[1]; + const int constIntxxArrayConstLen[3]; // [3] + const int* constIntxxPointerConstOneElem; // [1] + const int* constIntxxPointerMaxOneElem; // null + const int* constIntxxPointerConstLen; // [3] + const int* constIntxxPointerVariaLen; // null + const int* constIntxxPointerCustomLen; // [4] + int constIntxxPointerCustomLenElemCount; + + // Primitive.VariaValue.intxx 2A + 5P = 7 + int variaIntxxArrayConstOneElem[1]; + int variaIntxxArrayConstLen[3]; // [3] + int* variaIntxxPointerConstOneElem; // [1] + int* variaIntxxPointerMaxOneElem; // null + int* variaIntxxPointerConstLen; // [3] + int* variaIntxxPointerVariaLen; // null + int* variaIntxxPointerCustomLen; // [4] + int variaIntxxPointerCustomLenElemCount; + + const int32_t constInt32Element; + int32_t variaInt32Element; + + // Primitive.ConstValue.int32 2A + 5P = 7 + const int32_t constInt32ArrayConstOneElem[1]; + const int32_t constInt32ArrayConstLen[3]; + const int32_t* constInt32PointerConstOneElem; + const int32_t* constInt32PointerMaxOneElem; + const int32_t* constInt32PointerConstLen; + const int32_t* constInt32PointerVariaLen; + const int32_t* constInt32PointerCustomLen; + int32_t constInt32PointerCustomLenElemCount; + + // Primitive.VariaValue.int32 2A + 5P = 7 + int32_t variaInt32ArrayConstOneElem[1]; + int32_t variaInt32ArrayConstLen[3]; + int32_t* variaInt32PointerConstOneElem; + int32_t* variaInt32PointerMaxOneElem; + int32_t* variaInt32PointerConstLen; + int32_t* variaInt32PointerVariaLen; + int32_t* variaInt32PointerCustomLen; + int32_t variaInt32PointerCustomLenElemCount; + + // Struct.ConstValue.TK_Dimension 2A + 5P = 7 + const TK_Dimension constStructArrayConstOneElem[1]; + const TK_Dimension constStructArrayConstLen[3]; + const TK_Dimension* constStructPointerConstOneElem; + const TK_Dimension* constStructPointerMaxOneElem; + const TK_Dimension* constStructPointerConstLen; + const TK_Dimension* constStructPointerVariaLen; + const TK_Dimension* constStructPointerCustomLen; + int32_t constStructPointerCustomLenElemCount; + + // Struct.VariaValue 2A + 5P = 7 + TK_Dimension variaStructArrayConstOneElem[1]; + TK_Dimension variaStructArrayConstLen[3]; + TK_Dimension* variaStructPointerConstOneElem; + TK_Dimension* variaStructPointerMaxOneElem; + TK_Dimension* variaStructPointerConstLen; + TK_Dimension* variaStructPointerVariaLen; + TK_Dimension* variaStructPointerCustomLen; + int32_t variaStructPointerCustomLenElemCount; + + // String.ConstValue 1A + 3P = 4 + const char constCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + const char* constCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + const char* constCharPointerVariaLen; // null + const char* constCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constCharPointerCustomLenElemCount; + + // String.VariaValue 1A + 3P = 4 + char variaCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaCharPointerCustomLenElemCount; + + // StringOnly.ConstValue 1A + 3P = 4 + const char constStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + const char* constStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + const char* constStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + const char* constStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constStringOnlyPointerCustomLenElemCount; + + // StringOnly.VariaValue 1A + 3P = 4 + char variaStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaStringOnlyPointerCustomLenElemCount; + +} TK_FieldImmutable; + +MYAPI TK_FieldImmutable * MYAPIENTRY createTKFieldImmutable(); +MYAPI void MYAPIENTRY destroyTKFieldImmutable(TK_FieldImmutable * s); - TK_Context ctx; +// +// TK_StructImmutable +// - char modelNameArrayFixedLen[12]; /* 'Hello Array' len=11+1 */ - char * modelNamePointerCString; /* 'Hello CString' len=13+1 */ - const char * modelNamePointerCustomLen; /* 'Hello Pointer' len=13+1 */ - const int modelNamePointerCustomLenVal; /* 13+1 */ +typedef struct { + // Primitive.ConstValue.intxx 2A + 5P = 7 + const int constIntxxArrayConstOneElem[1]; + const int constIntxxArrayConstLen[3]; // [3] + const int* constIntxxPointerConstOneElem; // + const int* constIntxxPointerMaxOneElem; // + const int* constIntxxPointerConstLen; // [3] + const int* constIntxxPointerVariaLen; + const int* constIntxxPointerCustomLen; + int constIntxxPointerCustomLenElemCount; + + // Primitive.VariaValue.intxx 2A + 5P = 7 + int variaIntxxArrayConstOneElem[1]; + int variaIntxxArrayConstLen[3]; // [3] + int* variaIntxxPointerConstOneElem; // + int* variaIntxxPointerMaxOneElem; // + int* variaIntxxPointerConstLen; // [3] + int* variaIntxxPointerVariaLen; + int* variaIntxxPointerCustomLen; + int variaIntxxPointerCustomLenElemCount; + + const int32_t constInt32Element; + int32_t variaInt32Element; + + // Primitive.ConstValue 2A + 5P = 7 + const int32_t constInt32ArrayConstOneElem[1]; + const int32_t constInt32ArrayConstLen[3]; + const int32_t* constInt32PointerConstOneElem; + const int32_t* constInt32PointerMaxOneElem; + const int32_t* constInt32PointerConstLen; + const int32_t* constInt32PointerVariaLen; + const int32_t* constInt32PointerCustomLen; + int32_t constInt32PointerCustomLenElemCount; + + // Primitive.VariaValue 2A + 5P = 7 + int32_t variaInt32ArrayConstOneElem[1]; + int32_t variaInt32ArrayConstLen[3]; + int32_t* variaInt32PointerConstOneElem; + int32_t* variaInt32PointerMaxOneElem; + int32_t* variaInt32PointerConstLen; + int32_t* variaInt32PointerVariaLen; + int32_t* variaInt32PointerCustomLen; + int32_t variaInt32PointerCustomLenElemCount; + + // Struct.ConstValue 2A + 5P = 7 + const TK_Dimension constStructArrayConstOneElem[1]; + const TK_Dimension constStructArrayConstLen[3]; + const TK_Dimension* constStructPointerConstOneElem; + const TK_Dimension* constStructPointerMaxOneElem; + const TK_Dimension* constStructPointerConstLen; + const TK_Dimension* constStructPointerVariaLen; + const TK_Dimension* constStructPointerCustomLen; + int32_t constStructPointerCustomLenElemCount; + + // Struct.VariaValue 2A + 5P = 7 + TK_Dimension variaStructArrayConstOneElem[1]; + TK_Dimension variaStructArrayConstLen[3]; + TK_Dimension* variaStructPointerConstOneElem; + TK_Dimension* variaStructPointerMaxOneElem; + TK_Dimension* variaStructPointerConstLen; + TK_Dimension* variaStructPointerVariaLen; + TK_Dimension* variaStructPointerCustomLen; + int32_t variaStructPointerCustomLenElemCount; + + // String.ConstValue 1A + 3P = 4 + const char constCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + const char* constCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + const char* constCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + const char* constCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constCharPointerCustomLenElemCount; + + // String.VariaValue 1A + 3P = 4 + char variaCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaCharPointerCustomLenElemCount; + + // StringOnly.ConstValue 1A + 3P = 4 + const char constStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + const char* constStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + const char* constStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + const char* constStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constStringOnlyPointerCustomLenElemCount; + + // StringOnly.VariaValue 1A + 3P = 4 + char variaStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaStringOnlyPointerCustomLenElemCount; + +} TK_StructImmutable; + +MYAPI TK_StructImmutable * MYAPIENTRY createTKStructImmutable(); +MYAPI void MYAPIENTRY destroyTKStructImmutable(TK_StructImmutable * s); -} TK_ModelConst; +// +// TK_Field +// typedef struct { - int intxxArrayFixedLen[3]; - - int * intxxPointerCustomLen; - int intxxPointerCustomLenVal; + // Primitive.ConstValue.intxx 2A + 5P = 7 + const int constIntxxArrayConstOneElem[1]; + const int constIntxxArrayConstLen[3]; // [3] + const int* constIntxxPointerConstOneElem; // + const int* constIntxxPointerMaxOneElem; // + const int* constIntxxPointerConstLen; // [3] + const int* constIntxxPointerVariaLen; + const int* constIntxxPointerCustomLen; + int constIntxxPointerCustomLenElemCount; + + // Primitive.VariaValue.intxx 2A + 5P = 7 + int variaIntxxArrayConstOneElem[1]; + int variaIntxxArrayConstLen[3]; // [3] + int* variaIntxxPointerConstOneElem; // + int* variaIntxxPointerMaxOneElem; // + int* variaIntxxPointerConstLen; // [3] + int* variaIntxxPointerVariaLen; + int* variaIntxxPointerCustomLen; + int variaIntxxPointerCustomLenElemCount; + + const int32_t constInt32Element; + int32_t variaInt32Element; + + // Primitive.ConstValue 2A + 5P = 7 + const int32_t constInt32ArrayConstOneElem[1]; + const int32_t constInt32ArrayConstLen[3]; + const int32_t* constInt32PointerConstOneElem; + const int32_t* constInt32PointerMaxOneElem; + const int32_t* constInt32PointerConstLen; + const int32_t* constInt32PointerVariaLen; + const int32_t* constInt32PointerCustomLen; + int32_t constInt32PointerCustomLenElemCount; + + // Primitive.VariaValue 2A + 5P = 7 + int32_t variaInt32ArrayConstOneElem[1]; + int32_t variaInt32ArrayConstLen[3]; + int32_t* variaInt32PointerConstOneElem; + int32_t* variaInt32PointerMaxOneElem; + int32_t* variaInt32PointerConstLen; + int32_t* variaInt32PointerVariaLen; + int32_t* variaInt32PointerCustomLen; + int32_t variaInt32PointerCustomLenElemCount; + + // Struct.ConstValue 2A + 5P = 7 + const TK_Dimension constStructArrayConstOneElem[1]; + const TK_Dimension constStructArrayConstLen[3]; + const TK_Dimension* constStructPointerConstOneElem; + const TK_Dimension* constStructPointerMaxOneElem; + const TK_Dimension* constStructPointerConstLen; + const TK_Dimension* constStructPointerVariaLen; + const TK_Dimension* constStructPointerCustomLen; + int32_t constStructPointerCustomLenElemCount; + + // Struct.VariaValue 2A + 5P = 7 + TK_Dimension variaStructArrayConstOneElem[1]; + TK_Dimension variaStructArrayConstLen[3]; + TK_Dimension* variaStructPointerConstOneElem; + TK_Dimension* variaStructPointerMaxOneElem; + TK_Dimension* variaStructPointerConstLen; + TK_Dimension* variaStructPointerVariaLen; + TK_Dimension* variaStructPointerCustomLen; + int32_t variaStructPointerCustomLenElemCount; + + // String.ConstValue 1A + 3P = 4 + const char constCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + const char* constCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + const char* constCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + const char* constCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constCharPointerCustomLenElemCount; + + // String.VariaValue 1A + 3P = 4 + char variaCharArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaCharPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaCharPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaCharPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaCharPointerCustomLenElemCount; + + // StringOnly.ConstValue 1A + 3P = 4 + const char constStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + const char* constStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + const char* constStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + const char* constStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int constStringOnlyPointerCustomLenElemCount; + + // StringOnly.VariaValue 1A + 3P = 4 + char variaStringOnlyArrayConstLen[13]; /* 'Hello Array1' len=12+1 */ + char* variaStringOnlyPointerConstLen; /* 'Hello CString1' len=14+1 */ + char* variaStringOnlyPointerVariaLen; /* 'Hello CString2' len=14+1 */ + char* variaStringOnlyPointerCustomLen; /* 'Hello CString3' len=14+1 */ + int variaStringOnlyPointerCustomLenElemCount; + +} TK_Field; + +MYAPI TK_Field * MYAPIENTRY createTKField(); +MYAPI void MYAPIENTRY destroyTKField(TK_Field * s); - int32_t int32ArrayFixedLen[3]; - int32_t int32ArrayOneElem[1]; - - int32_t * int32PointerCustomLen; - int32_t int32PointerCustomLenVal; - - int32_t * int32PointerOneElem; +// +// +// +typedef struct { float mat4x4[4][4]; - TK_Dimension structArrayFixedLen[3]; - TK_Dimension structArrayOneElem[1]; - - TK_Dimension * structPointerCustomLen; - int32_t structPointerCustomLenVal; - TK_Dimension * structPointerOneElem; - TK_Context ctx; - char modelNameArrayFixedLen[12]; /* 'Hello Array' len=11+1 */ - char * modelNamePointerCString; /* 'Hello CString' len=13+1 */ - char * modelNamePointerCustomLen; /* 'Hello Pointer' len=13+1 */ - int modelNamePointerCustomLenVal; /* 13+1 */ +} TK_ModelMixed; -} TK_ModelMutable; +MYAPI TK_ModelMixed* MYAPIENTRY createTKModelMixed(); +MYAPI void MYAPIENTRY destroyTKModelMixed(TK_ModelMixed* s); -MYAPI TK_ModelConst * MYAPIENTRY createModelConst(); -MYAPI void MYAPIENTRY destroyModelConst(TK_ModelConst * s); -MYAPI TK_ModelMutable * MYAPIENTRY createModelMutable(); -MYAPI void MYAPIENTRY destroyModelMutable(TK_ModelMutable * s); diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test2.c b/src/junit/com/jogamp/gluegen/test/junit/generation/test2.c new file mode 100644 index 0000000..3fff02c --- /dev/null +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test2.c @@ -0,0 +1,20 @@ +#include "test2.h" + +#include <stdio.h> + +int Initialize(const T2_InitializeOptions* Options) { + fprintf(stderr, "T2 Initialize API 0x%X, product %s, version %s\n", + Options->ApiVersion, + Options->ProductName, + Options->ProductVersion); + fprintf(stderr, "- MemFuncs: alloc %p, realloc %p, release %p\n", + Options->AllocateMemoryFunction, + Options->ReallocateMemoryFunction, + Options->ReleaseMemoryFunction); + return 0; +} + +int Shutdown() { + return 0; +} + diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test2.cfg b/src/junit/com/jogamp/gluegen/test/junit/generation/test2.cfg new file mode 100644 index 0000000..3b68598 --- /dev/null +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test2.cfg @@ -0,0 +1,52 @@ +Package com.jogamp.gluegen.test.junit.generation +JavaClass BindingtestT2 +Style InterfaceAndImpl +JavaOutputDir classes +NativeOutputDir native + +# Use a ProcAddressTable so we dynamically look up the routines +EmitProcAddressTable true +ProcAddressTableClassName BindingtestT2ProcAddressTable +GetProcAddressTableExpr _table +ProcAddressNameExpr PFN $UPPERCASE({0}) PROC + +# Force all of the methods to be emitted using dynamic linking so we +# don't need to link against any emulation library on the desktop or +# depend on the presence of an import library for a particular device +ForceProcAddressGen __ALL__ + +# Also force the calling conventions of the locally generated function +# pointer typedefs for these routines to MYAPIENTRY +# LocalProcAddressCallingConvention __ALL__ MYAPIENTRY + +Opaque long T2_AllocateMemoryFunc +Opaque long T2_ReallocateMemoryFunc +Opaque long T2_ReleaseMemoryFunc + +EmitStruct T2_ThreadAffinity +StructPackage T2_ThreadAffinity com.jogamp.gluegen.test.junit.generation + +EmitStruct T2_InitializeOptions +StructPackage T2_InitializeOptions com.jogamp.gluegen.test.junit.generation +ReturnsStringOnly T2_InitializeOptions.ProductName +ReturnsStringOnly T2_InitializeOptions.ProductVersion +Opaque long T2_InitializeOptions.Reserved +ImmutableAccess long T2_InitializeOptions.Reserved +# ReturnedArrayLength T2_InitializeOptions.OverrideThreadAffinity 1 +MaxOneElement T2_InitializeOptions.OverrideThreadAffinity + +ReturnsOpaque long T2_InitializeOptions.AllocateMemoryFunction +ReturnsOpaque long T2_InitializeOptions.ReallocateMemoryFunc +ReturnsOpaque long T2_InitializeOptions.ReleaseMemoryFunc + +CustomCCode #include "test2.h" + +Import com.jogamp.gluegen.test.junit.generation.BindingtestT2 +Import com.jogamp.gluegen.test.junit.generation.T2_InitializeOptions +Import com.jogamp.gluegen.test.junit.generation.T2_ThreadAffinity + +CustomJavaCode BindingtestT2Impl private static BindingtestT2ProcAddressTable _table = new BindingtestT2ProcAddressTable(); +CustomJavaCode BindingtestT2Impl public static void resetProcAddressTable(DynamicLookupHelper lookup) { +CustomJavaCode BindingtestT2Impl _table.reset(lookup); +CustomJavaCode BindingtestT2Impl } + diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test2.h b/src/junit/com/jogamp/gluegen/test/junit/generation/test2.h new file mode 100644 index 0000000..e27e9aa --- /dev/null +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test2.h @@ -0,0 +1,37 @@ + +#include <gluegen_stdint.h> +#include <gluegen_stddef.h> + +typedef void* ( * T2_AllocateMemoryFunc)(size_t SizeInBytes, size_t Alignment); + +typedef void* ( * T2_ReallocateMemoryFunc)(void* Pointer, size_t SizeInBytes, size_t Alignment); + +typedef void ( * T2_ReleaseMemoryFunc)(void* Pointer); + +typedef struct { + int32_t ApiVersion; + uint64_t NetworkWork; + uint64_t StorageIo; + uint64_t WebSocketIo; + uint64_t P2PIo; + uint64_t HttpRequestIo; + uint64_t RTCIo; +} T2_ThreadAffinity; + +typedef struct { + int32_t ApiVersion; + T2_AllocateMemoryFunc AllocateMemoryFunction; + T2_ReallocateMemoryFunc ReallocateMemoryFunction; + T2_ReleaseMemoryFunc ReleaseMemoryFunction; + + const char* ProductName; + + const char* ProductVersion; + + void* Reserved; + + T2_ThreadAffinity* OverrideThreadAffinity; +} T2_InitializeOptions; + +extern int Initialize(const T2_InitializeOptions* Options); +extern int Shutdown(); |