// AUTOMATICALLY GENERATED, DO NOT EDIT
using System;
using System.Runtime.InteropServices;

namespace Pkmnlib.Generated
{
    internal static class NatureLibrary
    {
        /// <param name="initialCapacity">long unsigned int</param>
        /// <returns>NatureLibrary *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_Construct")]
        internal static extern IntPtr Construct(ulong initialCapacity);

        /// <param name="p">const NatureLibrary *</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_Destruct")]
        internal static extern void Destruct(IntPtr p);

        /// <param name="p">NatureLibrary *</param>
        /// <param name="name">const char *</param>
        /// <param name="nature">const Nature *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_LoadNature")]
        internal static extern byte LoadNature(IntPtr p, IntPtr name, IntPtr nature);

        /// <param name="p">NatureLibrary *</param>
        /// <param name="name">const char *</param>
        /// <param name="out">const Nature * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_GetNatureByName")]
        internal static extern byte GetNatureByName(IntPtr p, IntPtr name, ref IntPtr @out);

        /// <param name="p">NatureLibrary *</param>
        /// <param name="rand">Random *</param>
        /// <param name="out">const char * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_GetRandomNatureName")]
        internal static extern byte GetRandomNatureName(IntPtr p, IntPtr rand, ref IntPtr @out);

        /// <param name="p">NatureLibrary *</param>
        /// <param name="nature">const Nature *</param>
        /// <param name="out">const char * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_GetNatureName")]
        internal static extern byte GetNatureName(IntPtr p, IntPtr nature, ref IntPtr @out);

        /// <param name="p">const NatureLibrary *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_GetNatureCount")]
        internal static extern ulong GetNatureCount(IntPtr p);

        /// <param name="p">NatureLibrary *</param>
        /// <param name="index">long unsigned int</param>
        /// <param name="out">const char * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_NatureLibrary_GetNatureByIndex")]
        internal static extern byte GetNatureByIndex(IntPtr p, ulong index, ref IntPtr @out);

    }
}
