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

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

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

        /// <param name="out">unsigned char &</param>
        /// <param name="library">GrowthRateLibrary *</param>
        /// <param name="growthRate">const char *</param>
        /// <param name="experience">unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_GrowthRateLibrary_CalculateLevel")]
        internal static extern byte CalculateLevel(ref byte @out, IntPtr library, IntPtr growthRate, uint experience);

        /// <param name="out">unsigned char &</param>
        /// <param name="library">GrowthRateLibrary *</param>
        /// <param name="growthRateHash">unsigned int</param>
        /// <param name="experience">unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_GrowthRateLibrary_CalculateLevelWithHash")]
        internal static extern byte CalculateLevelWithHash(ref byte @out, IntPtr library, uint growthRateHash, uint experience);

        /// <param name="out">unsigned int &</param>
        /// <param name="library">GrowthRateLibrary *</param>
        /// <param name="growthRate">const char *</param>
        /// <param name="level">unsigned char</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_GrowthRateLibrary_CalculateExperience")]
        internal static extern byte CalculateExperience(ref uint @out, IntPtr library, IntPtr growthRate, byte level);

        /// <param name="out">unsigned int &</param>
        /// <param name="library">GrowthRateLibrary *</param>
        /// <param name="growthRateHash">unsigned int</param>
        /// <param name="level">unsigned char</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_GrowthRateLibrary_CalculateExperienceWithHash")]
        internal static extern byte CalculateExperienceWithHash(ref uint @out, IntPtr library, uint growthRateHash, byte level);

        /// <param name="library">GrowthRateLibrary *</param>
        /// <param name="growthRateName">const char *</param>
        /// <param name="growthRate">GrowthRate *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_GrowthRateLibrary_AddGrowthRate")]
        internal static extern byte AddGrowthRate(IntPtr library, IntPtr growthRateName, IntPtr growthRate);

        /// <param name="library">GrowthRateLibrary *</param>
        /// <param name="growthRateHash">unsigned int</param>
        /// <param name="growthRate">GrowthRate *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_GrowthRateLibrary_AddGrowthRateWithHash")]
        internal static extern byte AddGrowthRateWithHash(IntPtr library, uint growthRateHash, IntPtr growthRate);

    }
}
