/* * Copyright 2010 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrRandom_DEFINED #define GrRandom_DEFINED class GrRandom { public: GrRandom() : fSeed(0) {} GrRandom(uint32_t seed) : fSeed(seed) {} uint32_t seed() const { return fSeed; } uint32_t nextU() { fSeed = fSeed * kMUL + kADD; return fSeed; } int32_t nextS() { return (int32_t)this->nextU(); } /** * Returns value [0...1) as a float */ float nextF() { // const is 1 / (2^32 - 1) return (float)(this->nextU() * 2.32830644e-10); } /** * Returns value [min...max) as a float */ float nextF(float min, float max) { return min + this->nextF() * (max - min); } private: /* * These constants taken from "Numerical Recipes in C", reprinted 1999 */ enum { kMUL = 1664525, kADD = 1013904223 }; uint32_t fSeed; }; #endif