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

namespace Creaturelib.Generated
{
    internal static class CreatureParty
    {
        /// <param name="size">long unsigned int</param>
        /// <returns>CreatureParty *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_ConstructWithSize")]
        internal static extern IntPtr ConstructWithSize(ulong size);

        /// <param name="creatures">Creature * *</param>
        /// <param name="size">long unsigned int</param>
        /// <returns>CreatureParty *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_ConstructFromArray")]
        internal static extern IntPtr ConstructFromArray(IntPtr creatures, ulong size);

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

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

        /// <param name="p">CreatureParty *</param>
        /// <param name="a">long unsigned int</param>
        /// <param name="b">long unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_Switch")]
        internal static extern byte Switch(IntPtr p, ulong a, ulong b);

        /// <param name="p">CreatureParty *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_PackParty")]
        internal static extern byte PackParty(IntPtr p);

        /// <param name="out">Creature * &</param>
        /// <param name="p">CreatureParty *</param>
        /// <param name="index">long unsigned int</param>
        /// <param name="creature">Creature *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_SwapInto")]
        internal static extern byte SwapInto(ref IntPtr @out, IntPtr p, ulong index, IntPtr creature);

        /// <param name="p">const CreatureParty *</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_HasAvailableCreatures")]
        internal static extern byte HasAvailableCreatures(IntPtr p);

        /// <param name="p">const CreatureParty *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_GetLength")]
        internal static extern ulong GetLength(IntPtr p);

        /// <param name="p">CreatureParty *</param>
        /// <returns>const Creature * *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureParty_GetParty")]
        internal static extern IntPtr GetParty(IntPtr p);

    }
}
