/*
 * prng.h
 *
 *  Created on: Aug 3, 2023
 *      Author: true
 */

#ifndef CODE_INC_PRNG_H_
#define CODE_INC_PRNG_H_



/**
 * tinymt32 internal state vector and parameters
 */
typedef struct {
    uint32_t status[4];
    uint32_t mat1;
    uint32_t mat2;
    uint32_t tmat;
} tinymt32_t;



extern tinymt32_t tinymt32_s;



void tinymt32_init(tinymt32_t *s, uint32_t seed);
uint32_t tinymt32_get_uint32(tinymt32_t* s);

#define prng_get8()			(tinymt32_get_uint32(&tinymt32_s) & 0xff)
#define prng_get16()		(tinymt32_get_uint32(&tinymt32_s) & 0xffff)
#define prng_get32()		tinymt32_get_uint32(&tinymt32_s)


#endif /* CODE_INC_PRNG_H_ */
