// Copyright (c) 2012-2013 Sundog Software LLC. All rights reserved worldwide. #ifndef TRITON_RANDOM_NUMBER_GENERATOR_H #define TRITON_RANDOM_NUMBER_GENERATOR_H /** \file RandomNumberGenerator.h \brief An interface for overriding Triton's generation of random numbers. */ #include "TritonCommon.h" #pragma pack(push) #pragma pack(8) namespace Triton { /** An interface for generating random numbers in Triton. Subclass this interface and pass an instance to Environment::SetRandomNumberGenerator in order to override Triton's default usage of rand(). This may be useful for enforcing deterministic behavior across several channels. */ class RandomNumberGenerator : public MemObject { public: RandomNumberGenerator() {} virtual ~RandomNumberGenerator() {} /** Return an evenly distributed random double-precision number within a given range. \param start The lowest value in the range \param end The highest value in the range \return An evenly distributed random number within the range. */ virtual double TRITONAPI GetRandomDouble(double start, double end) const = 0; /** Return an evenly distributed random integer within a given range. \param start The lowest value in the range \param end The highest value in the range \return An evenly distributed random number within the range. */ virtual int TRITONAPI GetRandomInt(int start, int end) const = 0; /** Seeds the random number generator with a given value, to ensure consistent results. \param seed A value used to seed the random number generator's sequence of psuedo-random numbers. */ virtual void TRITONAPI SetRandomSeed(unsigned int seed) = 0; }; } #pragma pack(pop) #endif