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

namespace Arbutils.Generated
{
    internal static class Random
    {
        /// <returns>Random *</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_Construct")]
        internal static extern IntPtr Construct();

        /// <param name="seed">long unsigned int</param>
        /// <returns>Random *</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_ConstructWithSeed")]
        internal static extern IntPtr ConstructWithSeed(ulong seed);

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

        /// <param name="p">Random *</param>
        /// <returns>float</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetFloat")]
        internal static extern float GetFloat(IntPtr p);

        /// <param name="p">Random *</param>
        /// <returns>double</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetDouble")]
        internal static extern double GetDouble(IntPtr p);

        /// <param name="p">Random *</param>
        /// <returns>int</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_Get")]
        internal static extern int Get(IntPtr p);

        /// <param name="p">Random *</param>
        /// <param name="max">int</param>
        /// <param name="out">int &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetWithMax")]
        internal static extern byte GetWithMax(IntPtr p, int max, ref int @out);

        /// <param name="p">Random *</param>
        /// <param name="min">int</param>
        /// <param name="max">int</param>
        /// <param name="out">int &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetInLimits")]
        internal static extern byte GetInLimits(IntPtr p, int min, int max, ref int @out);

        /// <param name="p">Random *</param>
        /// <returns>unsigned int</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetUnsigned")]
        internal static extern uint GetUnsigned(IntPtr p);

        /// <param name="p">Random *</param>
        /// <param name="max">unsigned int</param>
        /// <param name="out">unsigned int &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetUnsignedWithMax")]
        internal static extern byte GetUnsignedWithMax(IntPtr p, uint max, ref uint @out);

        /// <param name="p">Random *</param>
        /// <param name="min">unsigned int</param>
        /// <param name="max">unsigned int</param>
        /// <param name="out">unsigned int &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetUnsignedInLimits")]
        internal static extern byte GetUnsignedInLimits(IntPtr p, uint min, uint max, ref uint @out);

        /// <param name="p">Random *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libArbutils", CallingConvention = CallingConvention.Cdecl, EntryPoint= "Arbutils_Random_GetSeed")]
        internal static extern ulong GetSeed(IntPtr p);

    }
}
