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

namespace Creaturelib.Generated
{
    internal static class CreatureSpecies
    {
        /// <param name="out">CreatureSpecies * &</param>
        /// <param name="id">unsigned short</param>
        /// <param name="name">const char *</param>
        /// <param name="defaultVariant">SpeciesVariant *</param>
        /// <param name="genderRatio">float</param>
        /// <param name="growthRate">const char *</param>
        /// <param name="captureRate">unsigned char</param>
        /// <param name="flags">const char * *</param>
        /// <param name="flagsCount">long unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_Construct")]
        internal static extern byte Construct(ref IntPtr @out, ushort id, IntPtr name, IntPtr defaultVariant, float genderRatio, IntPtr growthRate, byte captureRate, IntPtr flags, ulong flagsCount);

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

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

        /// <param name="p">const CreatureSpecies *</param>
        /// <returns>float</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_GetGenderRate")]
        internal static extern float GetGenderRate(IntPtr p);

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

        /// <param name="p">const CreatureSpecies *</param>
        /// <returns>const char *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_GetName")]
        internal static extern IntPtr GetName(IntPtr p);

        /// <param name="p">const CreatureSpecies *</param>
        /// <returns>const char *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_GetGrowthRate")]
        internal static extern IntPtr GetGrowthRate(IntPtr p);

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

        /// <param name="p">const CreatureSpecies *</param>
        /// <param name="hash">unsigned int</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_HasVariantWithHash")]
        internal static extern byte HasVariantWithHash(IntPtr p, uint hash);

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

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

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

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

        /// <param name="p">CreatureSpecies *</param>
        /// <param name="name">const char *</param>
        /// <param name="variant">SpeciesVariant *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_SetVariant")]
        internal static extern byte SetVariant(IntPtr p, IntPtr name, IntPtr variant);

        /// <param name="p">CreatureSpecies *</param>
        /// <param name="random">Random *</param>
        /// <returns>Gender</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_GetRandomGender")]
        internal static extern Gender GetRandomGender(IntPtr p, IntPtr random);

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

        /// <param name="p">CreatureSpecies *</param>
        /// <returns>const const SpeciesVariant * *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_GetVariants")]
        internal static extern IntPtr GetVariants(IntPtr p);

        /// <param name="p">const CreatureSpecies *</param>
        /// <param name="key">const char *</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_CreatureSpecies_HasFlag")]
        internal static extern byte HasFlag(IntPtr p, IntPtr key);

    }
}
