diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-07-12 22:53:58 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-12 22:53:58 +0300 |
commit | 69df5ffa970dbcafde7dbb5d360c0ea28300cb50 (patch) | |
tree | ba5165b102784eb793da8e9cd8dc35108fbeeed0 /src/common/random.h | |
parent | 4b8dd1cdaadba7ae2200f114a4e11ef62454eaa1 (diff) | |
parent | 14c9f5228fec75fc4e9bc8552e3fbae16f356103 (diff) | |
download | hercules-69df5ffa970dbcafde7dbb5d360c0ea28300cb50.tar.gz hercules-69df5ffa970dbcafde7dbb5d360c0ea28300cb50.tar.bz2 hercules-69df5ffa970dbcafde7dbb5d360c0ea28300cb50.tar.xz hercules-69df5ffa970dbcafde7dbb5d360c0ea28300cb50.zip |
Merge pull request #1290 from HerculesWS/common_interfacing
Common interfacing
Diffstat (limited to 'src/common/random.h')
-rw-r--r-- | src/common/random.h | 84 |
1 files changed, 74 insertions, 10 deletions
diff --git a/src/common/random.h b/src/common/random.h index 0b5abbcdc..1b249ef19 100644 --- a/src/common/random.h +++ b/src/common/random.h @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2012-2015 Hercules Dev Team + * Copyright (C) 2012-2016 Hercules Dev Team * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify @@ -21,17 +21,81 @@ #ifndef COMMON_RANDOM_H #define COMMON_RANDOM_H -#include "common/cbasetypes.h" +#include "common/hercules.h" + +/** @file + * The random number generator interface. + */ + +/// Random interface. +struct rnd_interface { + /** + * Interface initialization. + * + * During initialization, the RNG is seeded with a random seed. + */ + void (*init) (void); + + /// Interface finalization. + void (*final) (void); + + /** + * Re-seeds the random number generator. + * + * @param seed The new seed. + */ + void (*seed) (uint32 seed); + + /** + * Generates a random number in the interval [0, SINT32_MAX]. + */ + int32 (*random) (void); + + /** + * Generates a random number in the interval [0, dice_faces). + * + * @remark + * interval is open ended, so dice_faces is excluded (unless it's 0) + */ + uint32 (*roll) (uint32 dice_faces); + + /** + * Generates a random number in the interval [min, max]. + * + * @retval min if range is invalid. + */ + int32 (*value) (int32 min, int32 max); + + /** + * Generates a random number in the interval [0.0, 1.0) + * + * @remark + * interval is open ended, so 1.0 is excluded + */ + double (*uniform) (void); + + /** + * Generates a random number in the interval [0.0, 1.0) with 53-bit resolution. + * + * 53 bits is the maximum precision of a double. + * + * @remark + * interval is open ended, so 1.0 is excluded + */ + double (*uniform53) (void); +}; + +/** + * Utlity macro to call the frequently used rnd_interface#random(). + * + * @related rnd_interface. + */ +#define rnd() rnd->random() #ifdef HERCULES_CORE -void rnd_init(void); -void rnd_seed(uint32); - -int32 rnd(void);// [0, SINT32_MAX] -uint32 rnd_roll(uint32 dice_faces);// [0, dice_faces) -int32 rnd_value(int32 min, int32 max);// [min, max] -double rnd_uniform(void);// [0.0, 1.0) -double rnd_uniform53(void);// [0.0, 1.0) +void rnd_defaults(void); #endif // HERCULES_CORE +HPShared struct rnd_interface *rnd; ///< Pointer to the random interface. + #endif /* COMMON_RANDOM_H */ |