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

namespace Creaturelib.Generated
{
    internal static class SpeciesLibrary
    {
        /// <param name="initialCapacity">long unsigned int</param>
        /// <returns>const SpeciesLibrary *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_Construct")]
        internal static extern IntPtr Construct(ulong initialCapacity);

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

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="name">const char *</param>
        /// <param name="t">CreatureSpecies *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_Insert")]
        internal static extern byte Insert(IntPtr p, IntPtr name, IntPtr t);

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="hashedKey">unsigned int</param>
        /// <param name="t">CreatureSpecies *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_InsertWithHash")]
        internal static extern byte InsertWithHash(IntPtr p, uint hashedKey, IntPtr t);

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

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="hashedKey">unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_DeleteWithHash")]
        internal static extern byte DeleteWithHash(IntPtr p, uint hashedKey);

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="name">const char *</param>
        /// <param name="out">const CreatureSpecies * &</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_TryGet")]
        internal static extern byte TryGet(IntPtr p, IntPtr name, ref IntPtr @out);

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="hashedKey">unsigned int</param>
        /// <param name="out">const CreatureSpecies * &</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_TryGetWithHash")]
        internal static extern byte TryGetWithHash(IntPtr p, uint hashedKey, ref IntPtr @out);

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="name">const char *</param>
        /// <param name="out">const CreatureSpecies * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_Get")]
        internal static extern byte Get(IntPtr p, IntPtr name, ref IntPtr @out);

        /// <param name="p">SpeciesLibrary *</param>
        /// <param name="hashedKey">unsigned int</param>
        /// <param name="out">const CreatureSpecies * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_GetWithHash")]
        internal static extern byte GetWithHash(IntPtr p, uint hashedKey, ref IntPtr @out);

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

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

        /// <param name="p">const SpeciesLibrary *</param>
        /// <param name="id">unsigned short</param>
        /// <returns>const CreatureSpecies *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesLibrary_GetById")]
        internal static extern IntPtr GetById(IntPtr p, ushort id);

    }
}
