123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- /**
- * \file SDL_test_random.h
- *
- * Include file for SDL test framework.
- *
- * This code is a part of the SDL2_test library, not the main SDL library.
- */
- /*
- A "32-bit Multiply with carry random number generator. Very fast.
- Includes a list of recommended multipliers.
- multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32.
- period: (a*2^31)-1
- */
- #ifndef SDL_test_random_h_
- #define SDL_test_random_h_
- #include "begin_code.h"
- /* Set up for C function definitions, even when using C++ */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* --- Definitions */
- /*
- * Macros that return a random number in a specific format.
- */
- #define SDLTest_RandomInt(c) ((int)SDLTest_Random(c))
- /*
- * Context structure for the random number generator state.
- */
- typedef struct {
- unsigned int a;
- unsigned int x;
- unsigned int c;
- unsigned int ah;
- unsigned int al;
- } SDLTest_RandomContext;
- /* --- Function prototypes */
- /**
- * \brief Initialize random number generator with two integers.
- *
- * Note: The random sequence of numbers returned by ...Random() is the
- * same for the same two integers and has a period of 2^31.
- *
- * \param rndContext pointer to context structure
- * \param xi integer that defines the random sequence
- * \param ci integer that defines the random sequence
- *
- */
- void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi,
- unsigned int ci);
- /**
- * \brief Initialize random number generator based on current system time.
- *
- * \param rndContext pointer to context structure
- *
- */
- void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext);
- /**
- * \brief Initialize random number generator based on current system time.
- *
- * Note: ...RandomInit() or ...RandomInitTime() must have been called
- * before using this function.
- *
- * \param rndContext pointer to context structure
- *
- * \returns A random number (32bit unsigned integer)
- *
- */
- unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext);
- /* Ends C function definitions when using C++ */
- #ifdef __cplusplus
- }
- #endif
- #include "close_code.h"
- #endif /* SDL_test_random_h_ */
- /* vi: set ts=4 sw=4 expandtab: */
|