#ifdef __cplusplus
extern "C" {
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <string.h>
#ifdef __cplusplus
}
#endif

#include "tt800.h"

MODULE = Math::Random::TT800		PACKAGE = Math::Random::TT800

TT800
new(class = "Math::Random::TT800", ...)
		char *		class
	CODE:
		{
		int i;

		RETVAL = (TT800) safemalloc(sizeof(struct tt800_state));
		memcpy(RETVAL,(char * ) &tt800_initial_state,
			sizeof(struct tt800_state));

		if ( items > (TT800_N + 1))
			items = TT800_N + 1;
		for (i = 1; i < items; i++)
			RETVAL->x[i-1] = (U32) SvIV(ST(i));
		}
	OUTPUT:
		RETVAL


void
DESTROY(tt)
		TT800	tt
	CODE:
		safefree((char *) tt);


U32
next_int(tt)
		TT800 tt
	CODE:
		RETVAL = tt800_get_next_int(tt);
	OUTPUT:
		RETVAL


double
next(tt)
		TT800 tt
	CODE:
		RETVAL = tt800_get_next_int(tt) * TT800_INV_MOD;
	OUTPUT:
		RETVAL