private void WriteDestroyStructMethod(StructGenerationInfo @struct)
 {
     BeginJniMethod(JniType.Void,
                    @struct.JavaType.RawName,
                    @struct.DestroyStructMethodName,
                    true,
                    new MethodParameter <JniType>[] { new(JniType.JLong, "handle") });
        private void WriteAllocateStructMethod(StructGenerationInfo @struct)
        {
            BeginJniMethod(JniType.JLong,
                           @struct.JavaType.RawName,
                           @struct.AllocateStructMethodName,
                           true,
                           Array.Empty <MethodParameter <JniType> >());

            WriteIndentedLine($"return FumoCement::toJavaPointer(new {@struct.NativeName});");

            EndJniMethod();
        }
Beispiel #3
0
        private void GenerateStruct(StructGenerationInfo @struct)
        {
            var className = @struct.JavaName;

            WriteIndentedLine($"public static final class {className} extends NativeStruct");
            WriteBlockStart();

            WriteIndentedLine($"public static native long {@struct.AllocateStructMethodName}();");
            WriteIndentedLine($"public static native void {@struct.DestroyStructMethodName}(long handle);");
            WriteNewLine();
            WriteIndentedLine($"public static native void {@struct.OverwriteMethodName}(" +
                              $"@Pointer(\"{@struct.NativeName}*\") long targetHandle, " +
                              $"@Pointer(\"{@struct.NativeName}*\") long dataHandle);");

            WriteIndentedLine($"private static final NativeObjectTracker<{className}> ownedTracker = " +
                              $"new NativeObjectTracker<>({className}::new, NativeObjectTracker.Target.OWNED_OBJECTS);");
            WriteIndentedLine($"private static final NativeObjectTracker<{className}> unownedTracker = " +
                              $"new NativeObjectTracker<>({className}::new, NativeObjectTracker.Target.UNOWNED_OBJECTS);");
            WriteNewLine();

            WriteIndentedLine($"public static {className} createTracked()");
            WriteBlockStart();
            WriteIndentedLine("return ownedTracker.getOrCreate(allocateStruct());");
            WriteBlockEnd();
            WriteNewLine();

            WriteIndentedLine($"public static {className} getTrackedAndOwned(long handle)");
            WriteBlockStart();
            WriteIndentedLine("return ownedTracker.getOrCreate(handle);");
            WriteBlockEnd();
            WriteNewLine();

            WriteIndentedLine($"public static {className} getTrackedAndUnowned(long handle)");
            WriteBlockStart();
            WriteIndentedLine("return unownedTracker.getOrCreate(handle);");
            WriteBlockEnd();
            WriteNewLine();

            WriteIndentedLine($"public {className}()");
            WriteBlockStart();
            WriteIndentedLine($"super(allocateStruct(), true, {className}::destroyStruct);");
            WriteBlockEnd();
            WriteNewLine();

            WriteIndentedLine($"public {className}(long handle, boolean isOwned)");
            WriteBlockStart();
            WriteIndentedLine($"super(handle, isOwned, {className}::destroyStruct);");
            WriteBlockEnd();

            WriteIndentedLine($"public {className}(long handle, boolean isOwned, DisposalMethod disposalMethod)");
            WriteBlockStart();
            WriteIndentedLine($"super(handle, isOwned, disposalMethod, {className}::destroyStruct);");
            WriteBlockEnd();
            WriteNewLine();

            WriteIndentedLine($"public void overwrite(@Pointer(\"{@struct.NativeName}*\") long dataHandle)");
            WriteBlockStart();
            WriteIndentedLine("overwrite(getHandle(), dataHandle);");
            WriteBlockEnd();

            foreach (var field in @struct.Fields)
            {
                WriteNewLine();

                WriteStructFieldGetter(field);
                WriteStructFieldSetter(field);
            }

            WriteBlockEnd();
        }