| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
i.e. only pass numPointersStripped w/o adding info.pointerDepth()
|
| |
|
|
|
|
|
|
|
|
|
|
| |
enhance API doc; Add getArrayBaseOrPointerTargetType() and getTargetFunction()
Added getArrayBaseOrPointerTargetType() returns getBaseType() for arrays or getTargetType() for pointer,
i.e. stops traversing if an elementType is a pointer and returns the elementType as target-type.
This resolves 'int* intPtrArray[10]', but also simplifies all cases of 'int** intPtrPtr' and 'int intPtr[10]' etc.
Since get{Base,Target}Type() returns the functionPointer, getTargetFunction() allows to retrieve the actual target function type.
|
| |
|
|
|
|
|
|
|
|
| |
Arrange wrap/deref arguments equal; Add equal set of absolute get/set methods
Completing API to simplify usage by generated code.
All absolute get/set method check arguments itself and against limit(), allow to drop checks in generated code (size).
|
|
|
|
| |
remove '"' in message
|
|
|
|
| |
get<FuncName>()
|
|
|
|
| |
documentation
|
|
|
|
| |
getElementType(); Rename getBase{Elem ->}Type() to align with getTargetType()
|
|
|
|
| |
enabled by default
|
|\
| |
| |
| | |
'Mathieu_Fery/feature/add_preserveGeneratedCPP_option'
|
| | |
|
|\ \
| | |
| | |
| | | |
'Mathieu_Fery/feature/improve_logs_inside_translation_unit'
|
| |/ |
|
|\ \ |
|
| |/
| |
| |
| | |
CompoundType.setBodyParsed when body is already parsed
|
| |
| |
| |
| | |
Option set enablePragmaOnce to true instead false
|
| |
| |
| |
| | |
Add emitCustomJNICode(..) for JavaEmitter.endFunctions() not just structs and fix the JNI-c stub code
|
|\ \ |
|
| |/ |
|
|\ \ |
|
| |/ |
|
| |
| |
| |
| | |
APIs do support this feature
|
| | |
|
|\ \ |
|
| |/ |
|
| |
| |
| |
| | |
Ownership.Native _and_ native memory potentially gets replaced
|
| |
| |
| |
| | |
API-Doc
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
in struct (like 'int') ..
We already support platform dependent sizes like pointer etc, no reason to drop e.g. 'int'.
Note: 'int' is also always 32bit of size within our current set of supported platforms, e.g. MachineDataInfo.
Further fix and clarify primCElemFixedSize and primElemSizeExpr, only to be true and set if isPrimitive.
|
| |
| |
| |
| | |
'void', i.e. exclude if !baseCElemType.hasSize() // like 'void*' -> 'void'
|
| |
| |
| |
| | |
"typedef", isConstRaw() -> "native"
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
flag), added (detailed) JavaDoc in generated code
Revised setter:
A) int32_t val[10] -> setter for a subset change only, as-is with args[src, srcPos, destPos, length]
- no new memory, reuse only
- no special action to be performed
B) int32_t* val -> setter with toggle 'subset' with args[subset, src, srcPos, destPos, length],
- replace memory w/ 'subset==false' where it also may copy 'destPos' gap from old -> new
- reuse memory w/ 'subset==true', where destPos+length <= elementCount
C) const int32_t* val -> setter to replace referenced memory only args[src, srcPos, length]
- always replaces memory, no copy of a gap (no destPos)
Hence:
- case (A) stays as is
- case (B) will be revised and argument 'boolean subset' added
- case (C) will be revised (simplified) and argument 'destPos' removed
|
| |
| |
| |
| | |
destElemPos, elementCount argument set and use it for the single absolute get/put methods.
|
|/
|
|
| |
are final. Drop useless 'final' of 'static final'.
|
|
|
|
| |
buffer cache once @ 'releaseVal(..)' code creation
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
'ForceStaticInitCode'; Add 'ReturnsStringOnly', 'MaxOneElement' and 'ImmutableAccess'
Drop 'ManualStaticInitCall', 'ForceStaticInitCode':
With new CCodeUnit's `JVMUtil_NewDirectByteBufferCopy(..)` implementation
and generalized Buffers' methods, no specific init code is required anymore.
Add 'ReturnsStringOnly', 'MaxOneElement' and 'ImmutableAccess':
- 'ReturnsStringOnly' only String getter, drop ByteBuffer/byte[]
- 'MaxOneElement' only one element maximum for pointer reference
- 'ImmutableAccess' strict read-only, also reduces generated code a lot
|
|
|
|
| |
PrintWriter...)
|
|
|
|
|
|
|
|
|
| |
covering multiple FunctionEmitter allowing to unify output, decoration and dynamic helper code injection per unit
- Handles file open and have public ctor emitAutogeneratedWarning(..), being self-contained
- Includes `JVMUtil_NewDirectByteBufferCopy(..)` implementation in CCodeUnit,
may be injected if required in customCode via emitHeader(..)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
native-free-code Struct-Code generation
Recfactored all NIO buffer utils to Buffers, i.e. buffer <-> address, memcpy, strnlen, etc
Buffers:
- Added copyNativeToDirectByteBuffer(..), allowing to copy a native memory slice into a direct buffer.
- Added typeNameToBufferClass(String) and sizeOfBufferElem(Class<? extends Buffer>)
- Completed slize2<Type>(..) buffer-mapping methods
- Exposure of safe getDirectByteBuffer(..) w/ null-check (package private)
Added NativeBuffer.storeDirectAddress(..), allowing to write the array address into a native buffer (struct, etc),
allowing to referencing the ElementBuffer (linear array of elements) and PointerBuffer (array of pointer).
Hint: This can be read via PointerBuffer.wrap(..).get(0)
Added ElementBuffer (a NativeBuffer) mapping an array of elements,
completing native abstraction next to PointerBuffer (array of pointer).
ElementBuffer can dereference an existing element-array by native address via ElementBuffer.derefPointer(..).
Views of its content can be directly accessed via ElementBuffer.slice(..).
+++
These utilities and buffer abstractions will allow to reuse code and simplify the GlueGen struct get/set implementations
and help to reduce native code injection.
|
|
|
|
|
|
|
|
|
|
|
| |
getPreferredFormat() and isSupported(); Add setChannelLimit() impacting
Add setChannelLimit() impacting getPreferredFormat() and isSupported(),
i.e. to limit channels for e.g. JOAL/OpenAL spatial 3D sound usage.
getNativeFormat() shall be unaffected.
getMaxSupportedChannels() is redudandant -> getPreferredFormat()
|
|
|
|
| |
universal API interface
|
|
|
|
| |
precision when dealing with stats, averages etc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
AudioFrame; init(): Use getAvgFrameDuration() for queue growth and limit.
This change renders buffer dequeueing, growth and limit sticking w/ [ms] values
while getAvgFrameDuration() assists frame count determination.
getAvgFrameDuration() is calculated when buffer is fully filled (queuedBytes / queuedFrames),
i.e. a proper representation to be used to dequeue in duration range
as well as for growth.
This further decouples the frameDuration{->Hint} parameter in init(),
as it is now only used for the initial buffer count (and latency adjustment).
|
|
|
|
| |
using enqueueData() -> 1 AudioFrame
|
|
|
|
| |
null in case no sub-directory is desired
|
|
|
|
| |
JOAL/OpenAL implementation
|
| |
|