#ifndef _sprng_h_
#define _sprng_h_
#include "interface.h"
#define SPRNG_DEFAULT 0
#define CRAYLCG 0
#define DRAND48 1
#define FISH1 2
#define FISH2 3
#define FISH3 4
#define FISH4 5
#define FISH5 6
#define LECU1 0
#define LECU2 1
#define LECU3 2
#define LAG1279 0
#define LAG17 1
#define LAG31 2
#define LAG55 3
#define LAG63 4
#define LAG127 5
#define LAG521 6
#define LAG521B 7
#define LAG607 8
#define LAG607B 9
#define LAG1279B 10
#define CHECK 1
#define MAX_PACKED_LENGTH 24000
#ifdef USE_MPI
#define MPINAME(A) A ## _mpi
#else
#define MPINAME(A) A
#endif
#define make_sprng_seed MPINAME(make_new_seed)
#if defined(SIMPLE_SPRNG)
#define pack_sprng pack_rng_simple
#define unpack_sprng unpack_rng_simple
#define isprng MPINAME(get_rn_int_simple)
#define init_sprng MPINAME(init_rng_simple)
#define print_sprng print_rng_simple
#ifdef FLOAT_GEN
#define sprng MPINAME(get_rn_flt_simple)
#else
#define sprng MPINAME(get_rn_dbl_simple)
#endif
#elif !defined(CHECK_POINTERS)
#define free_sprng free_rng
#define pack_sprng pack_rng
#define unpack_sprng unpack_rng
#define isprng get_rn_int
#define spawn_sprng(A,B,C) spawn_rng(A,B,C,!CHECK)
#define init_sprng init_rng
#define print_sprng print_rng
#ifdef FLOAT_GEN
#define sprng get_rn_flt
#else
#define sprng get_rn_dbl
#endif
#else
#define free_sprng(A) ((deleteID(A)==NULL) ? -1 : free_rng(A))
#define pack_sprng(A,B) ((checkID(A)==NULL) ? 0 : pack_rng(A,B))
#define unpack_sprng(A) addID(unpack_rng(A))
#define isprng(A) ((checkID(A)==NULL) ? -1 : get_rn_int(A))
#define spawn_sprng(A,B,C) ((checkID(A)==NULL) ? 0 : spawn_rng(A,B,C,CHECK))
#define init_sprng(A,B,C,D) addID(init_rng(A,B,C,D))
#define print_sprng(A) ((checkID(A)==NULL) ? 0 : print_rng(A))
#ifdef FLOAT_GEN
#define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_flt(A))
#else
#define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_dbl(A))
#endif
#endif
#endif