using System.Diagnostics.CodeAnalysis;
using System;

namespace LibRyujinx.Jni.Values
{
    [SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "This struct is created only by binary operations.")]
    public readonly struct JNativeInterface
    {
#pragma warning disable 0169
        private readonly IntPtr _reserved0;
        private readonly IntPtr _reserved1;
        private readonly IntPtr _reserved2;
        private readonly IntPtr _reserved3;
#pragma warning restore 0169
        internal readonly IntPtr GetVersionPointer { get; init; }
        internal readonly IntPtr DefineClassPointer { get; init; }
        internal readonly IntPtr FindClassPointer { get; init; }
        internal readonly IntPtr FromReflectedMethodPointer { get; init; }
        internal readonly IntPtr FromReflectedFieldPointer { get; init; }
        internal readonly IntPtr ToReflectedMethodPointer { get; init; }
        internal readonly IntPtr GetSuperclassPointer { get; init; }
        internal readonly IntPtr IsAssignableFromPointer { get; init; }
        internal readonly IntPtr ToReflectedFieldPointer { get; init; }
        internal readonly IntPtr ThrowPointer { get; init; }
        internal readonly IntPtr ThrowNewPointer { get; init; }
        internal readonly IntPtr ExceptionOccurredPointer { get; init; }
        internal readonly IntPtr ExceptionDescribePointer { get; init; }
        internal readonly IntPtr ExceptionClearPointer { get; init; }
        internal readonly IntPtr FatalErrorPointer { get; init; }
        internal readonly IntPtr PushLocalFramePointer { get; init; }
        internal readonly IntPtr PopLocalFramePointer { get; init; }
        internal readonly IntPtr NewGlobalRefPointer { get; init; }
        internal readonly IntPtr DeleteGlobalRefPointer { get; init; }
        internal readonly IntPtr DeleteLocalRefPointer { get; init; }
        internal readonly IntPtr IsSameObjectPointer { get; init; }
        internal readonly IntPtr NewLocalRefPointer { get; init; }
        internal readonly IntPtr EnsureLocalCapacityPointer { get; init; }
        internal readonly IntPtr AllocObjectPointer { get; init; }
        internal readonly IntPtr NewObjectPointer { get; init; }
        internal readonly IntPtr NewObjectVPointer { get; init; }
        internal readonly IntPtr NewObjectAPointer { get; init; }
        internal readonly IntPtr GetObjectClassPointer { get; init; }
        internal readonly IntPtr IsInstanceOfPointer { get; init; }
        internal readonly IntPtr GetMethodIdPointer { get; init; }
        internal readonly IntPtr CallObjectMethodPointer { get; init; }
        internal readonly IntPtr CallObjectMethodVPointer { get; init; }
        internal readonly IntPtr CallObjectMethodAPointer { get; init; }
        internal readonly IntPtr CallBooleanMethodPointer { get; init; }
        internal readonly IntPtr CallBooleanMethodVPointer { get; init; }
        internal readonly IntPtr CallBooleanMethodAPointer { get; init; }
        internal readonly IntPtr CallByteMethodPointer { get; init; }
        internal readonly IntPtr CallByteMethodVPointer { get; init; }
        internal readonly IntPtr CallByteMethodAPointer { get; init; }
        internal readonly IntPtr CallCharMethodPointer { get; init; }
        internal readonly IntPtr CallCharMethodVPointer { get; init; }
        internal readonly IntPtr CallCharMethodAPointer { get; init; }
        internal readonly IntPtr CallShortMethodPointer { get; init; }
        internal readonly IntPtr CallShortMethodVPointer { get; init; }
        internal readonly IntPtr CallShortMethodAPointer { get; init; }
        internal readonly IntPtr CallIntMethodPointer { get; init; }
        internal readonly IntPtr CallIntMethodVPointer { get; init; }
        internal readonly IntPtr CallIntMethodAPointer { get; init; }
        internal readonly IntPtr CallLongMethodPointer { get; init; }
        internal readonly IntPtr CallLongMethodVPointer { get; init; }
        internal readonly IntPtr CallLongMethodAPointer { get; init; }
        internal readonly IntPtr CallFloatMethodPointer { get; init; }
        internal readonly IntPtr CallFloatMethodVPointer { get; init; }
        internal readonly IntPtr CallFloatMethodAPointer { get; init; }
        internal readonly IntPtr CallDoubleMethodPointer { get; init; }
        internal readonly IntPtr CallDoubleMethodVPointer { get; init; }
        internal readonly IntPtr CallDoubleMethodAPointer { get; init; }
        internal readonly IntPtr CallVoidMethodPointer { get; init; }
        internal readonly IntPtr CallVoidMethodVPointer { get; init; }
        internal readonly IntPtr CallVoidMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualObjectMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualObjectMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualObjectMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualBooleanMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualBooleanMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualBooleanMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualByteMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualByteMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualByteMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualCharMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualCharMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualCharMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualShortMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualShortMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualShortMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualIntMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualIntMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualIntMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualLongMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualLongMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualLongMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualFloatMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualFloatMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualFloatMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualDoubleMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualDoubleMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualDoubleMethodAPointer { get; init; }
        internal readonly IntPtr CallNonVirtualVoidMethodPointer { get; init; }
        internal readonly IntPtr CallNonVirtualVoidMethodVPointer { get; init; }
        internal readonly IntPtr CallNonVirtualVoidMethodAPointer { get; init; }
        internal readonly IntPtr GetFieldIdPointer { get; init; }
        internal readonly IntPtr GetObjectFieldPointer { get; init; }
        internal readonly IntPtr GetBooleanFieldPointer { get; init; }
        internal readonly IntPtr GetByteFieldPointer { get; init; }
        internal readonly IntPtr GetCharFieldPointer { get; init; }
        internal readonly IntPtr GetShortFieldPointer { get; init; }
        internal readonly IntPtr GetIntFieldPointer { get; init; }
        internal readonly IntPtr GetLongFieldPointer { get; init; }
        internal readonly IntPtr GetFloatFieldPointer { get; init; }
        internal readonly IntPtr GetDoubleFieldPointer { get; init; }
        internal readonly IntPtr SetObjectFieldPointer { get; init; }
        internal readonly IntPtr SetBooleanFieldPointer { get; init; }
        internal readonly IntPtr SetByteFieldPointer { get; init; }
        internal readonly IntPtr SetCharFieldPointer { get; init; }
        internal readonly IntPtr SetShortFieldPointer { get; init; }
        internal readonly IntPtr SetIntFieldPointer { get; init; }
        internal readonly IntPtr SetLongFieldPointer { get; init; }
        internal readonly IntPtr SetFloatFieldPointer { get; init; }
        internal readonly IntPtr SetDoubleFieldPointer { get; init; }
        internal readonly IntPtr GetStaticMethodIdPointer { get; init; }
        internal readonly IntPtr CallStaticObjectMethodPointer { get; init; }
        internal readonly IntPtr CallStaticObjectMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticObjectMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticBooleanMethodPointer { get; init; }
        internal readonly IntPtr CallStaticBooleanMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticBooleanMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticByteMethodPointer { get; init; }
        internal readonly IntPtr CallStaticByteMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticByteMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticCharMethodPointer { get; init; }
        internal readonly IntPtr CallStaticCharMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticCharMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticShortMethodPointer { get; init; }
        internal readonly IntPtr CallStaticShortMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticShortMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticIntMethodPointer { get; init; }
        internal readonly IntPtr CallStaticIntMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticIntMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticLongMethodPointer { get; init; }
        internal readonly IntPtr CallStaticLongMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticLongMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticFloatMethodPointer { get; init; }
        internal readonly IntPtr CallStaticFloatMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticFloatMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticDoubleMethodPointer { get; init; }
        internal readonly IntPtr CallStaticDoubleMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticDoubleMethodAPointer { get; init; }
        internal readonly IntPtr CallStaticVoidMethodPointer { get; init; }
        internal readonly IntPtr CallStaticVoidMethodVPointer { get; init; }
        internal readonly IntPtr CallStaticVoidMethodAPointer { get; init; }
        internal readonly IntPtr GetStaticFieldIdPointer { get; init; }
        internal readonly IntPtr GetStaticObjectFieldPointer { get; init; }
        internal readonly IntPtr GetStaticBooleanFieldPointer { get; init; }
        internal readonly IntPtr GetStaticByteFieldPointer { get; init; }
        internal readonly IntPtr GetStaticCharFieldPointer { get; init; }
        internal readonly IntPtr GetStaticShortFieldPointer { get; init; }
        internal readonly IntPtr GetStaticIntFieldPointer { get; init; }
        internal readonly IntPtr GetStaticLongFieldPointer { get; init; }
        internal readonly IntPtr GetStaticFloatFieldPointer { get; init; }
        internal readonly IntPtr GetStaticDoubleFieldPointer { get; init; }
        internal readonly IntPtr SetStaticObjectFieldPointer { get; init; }
        internal readonly IntPtr SetStaticBooleanFieldPointer { get; init; }
        internal readonly IntPtr SetStaticByteFieldPointer { get; init; }
        internal readonly IntPtr SetStaticCharFieldPointer { get; init; }
        internal readonly IntPtr SetStaticShortFieldPointer { get; init; }
        internal readonly IntPtr SetStaticIntFieldPointer { get; init; }
        internal readonly IntPtr SetStaticLongFieldPointer { get; init; }
        internal readonly IntPtr SetStaticFloatFieldPointer { get; init; }
        internal readonly IntPtr SetStaticDoubleFieldPointer { get; init; }
        internal readonly IntPtr NewStringPointer { get; init; }
        internal readonly IntPtr GetStringLengthPointer { get; init; }
        internal readonly IntPtr GetStringCharsPointer { get; init; }
        internal readonly IntPtr ReleaseStringCharsPointer { get; init; }
        internal readonly IntPtr NewStringUtfPointer { get; init; }
        internal readonly IntPtr GetStringUtfLengthPointer { get; init; }
        internal readonly IntPtr GetStringUtfCharsPointer { get; init; }
        internal readonly IntPtr ReleaseStringUtfCharsPointer { get; init; }
        internal readonly IntPtr GetArrayLengthPointer { get; init; }
        internal readonly IntPtr NewObjectArrayPointer { get; init; }
        internal readonly IntPtr GetObjectArrayElementPointer { get; init; }
        internal readonly IntPtr SetObjectArrayElementPointer { get; init; }
        internal readonly IntPtr NewBooleanArrayPointer { get; init; }
        internal readonly IntPtr NewByteArrayPointer { get; init; }
        internal readonly IntPtr NewCharArrayPointer { get; init; }
        internal readonly IntPtr NewShortArrayPointer { get; init; }
        internal readonly IntPtr NewIntArrayPointer { get; init; }
        internal readonly IntPtr NewLongArrayPointer { get; init; }
        internal readonly IntPtr NewFloatArrayPointer { get; init; }
        internal readonly IntPtr NewDoubleArrayPointer { get; init; }
        internal readonly IntPtr GetBooleanArrayElementsPointer { get; init; }
        internal readonly IntPtr GetByteArrayElementsPointer { get; init; }
        internal readonly IntPtr GetCharArrayElementsPointer { get; init; }
        internal readonly IntPtr GetShortArrayElementsPointer { get; init; }
        internal readonly IntPtr GetIntArrayElementsPointer { get; init; }
        internal readonly IntPtr GetLongArrayElementsPointer { get; init; }
        internal readonly IntPtr GetFloatArrayElementsPointer { get; init; }
        internal readonly IntPtr GetDoubleArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseBooleanArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseByteArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseCharArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseShortArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseIntArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseLongArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseFloatArrayElementsPointer { get; init; }
        internal readonly IntPtr ReleaseDoubleArrayElementsPointer { get; init; }
        internal readonly IntPtr GetBooleanArrayRegionPointer { get; init; }
        internal readonly IntPtr GetByteArrayRegionPointer { get; init; }
        internal readonly IntPtr GetCharArrayRegionPointer { get; init; }
        internal readonly IntPtr GetShortArrayRegionPointer { get; init; }
        internal readonly IntPtr GetIntArrayRegionPointer { get; init; }
        internal readonly IntPtr GetLongArrayRegionPointer { get; init; }
        internal readonly IntPtr GetFloatArrayRegionPointer { get; init; }
        internal readonly IntPtr GetDoubleArrayRegionPointer { get; init; }
        internal readonly IntPtr SetBooleanArrayRegionPointer { get; init; }
        internal readonly IntPtr SetByteArrayRegionPointer { get; init; }
        internal readonly IntPtr SetCharArrayRegionPointer { get; init; }
        internal readonly IntPtr SetShortArrayRegionPointer { get; init; }
        internal readonly IntPtr SetIntArrayRegionPointer { get; init; }
        internal readonly IntPtr SetLongArrayRegionPointer { get; init; }
        internal readonly IntPtr SetFloatArrayRegionPointer { get; init; }
        internal readonly IntPtr SetDoubleArrayRegionPointer { get; init; }
        internal readonly IntPtr RegisterNativesPointer { get; init; }
        internal readonly IntPtr UnregisterNativesPointer { get; init; }
        internal readonly IntPtr MonitorEnterPointer { get; init; }
        internal readonly IntPtr MonitorExitPointer { get; init; }
        internal readonly IntPtr GetJavaVMPointer { get; init; }
        internal readonly IntPtr GetStringRegionPointer { get; init; }
        internal readonly IntPtr GetStringUtfRegionPointer { get; init; }
        internal readonly IntPtr GetPrimitiveArrayCriticalPointer { get; init; }
        internal readonly IntPtr ReleasePrimitiveArrayCriticalPointer { get; init; }
        internal readonly IntPtr GetStringCriticalPointer { get; init; }
        internal readonly IntPtr ReleaseStringCriticalPointer { get; init; }
        internal readonly IntPtr NewWeakGlobalRefPointer { get; init; }
        internal readonly IntPtr DeleteWeakGlobalRefPointer { get; init; }
        internal readonly IntPtr ExceptionCheckPointer { get; init; }
        internal readonly IntPtr NewDirectByteBufferPointer { get; init; }
        internal readonly IntPtr GetDirectBufferAddressPointer { get; init; }
        internal readonly IntPtr GetDirectBufferCapacityPointer { get; init; }
        internal readonly IntPtr GetObjectRefTypePointer { get; init; }
    }
}
