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

namespace Creaturelib.Generated
{
    internal static class LearnableAttacks
    {
        /// <param name="out">LearnableAttacks * &</param>
        /// <param name="levelAttackCapacity">long unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnableAttacks_Construct")]
        internal static extern byte Construct(ref IntPtr @out, ulong levelAttackCapacity);

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

        /// <param name="p">LearnableAttacks *</param>
        /// <param name="level">unsigned char</param>
        /// <param name="attack">const AttackData *</param>
        /// <returns>void</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnableAttacks_AddLevelAttack")]
        internal static extern void AddLevelAttack(IntPtr p, byte level, IntPtr attack);

        /// <param name="p">LearnableAttacks *</param>
        /// <param name="level">unsigned char</param>
        /// <returns>const const AttackData * *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnableAttacks_GetAttacksForLevel")]
        internal static extern IntPtr GetAttacksForLevel(IntPtr p, byte level);

        /// <param name="p">LearnableAttacks *</param>
        /// <param name="level">unsigned char</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnableAttacks_HasAttacksForLevel")]
        internal static extern byte HasAttacksForLevel(IntPtr p, byte level);

        /// <param name="p">LearnableAttacks *</param>
        /// <param name="level">unsigned char</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnableAttacks_GetAttacksForLevelCount")]
        internal static extern ulong GetAttacksForLevelCount(IntPtr p, byte level);

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

        /// <param name="p">LearnableAttacks *</param>
        /// <returns>const const AttackData * *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnableAttacks_GetDistinctLevelAttacks")]
        internal static extern IntPtr GetDistinctLevelAttacks(IntPtr p);

    }
}
