X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fpublic-api%2Fmath%2Frandom.h;h=1b08956942622ac6a351c956f73908c24af912cf;hb=646f736e77b085c86e982c0d1d4b895c2a431330;hp=97818f587e1cf0c64b5f0839dd3f004937a51f46;hpb=4c1d314e5532f093daa46fcf038f47cde2c70a1b;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/public-api/math/random.h b/dali/public-api/math/random.h index 97818f5..1b08956 100644 --- a/dali/public-api/math/random.h +++ b/dali/public-api/math/random.h @@ -2,7 +2,7 @@ #define __DALI_RANDOM_H__ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,8 +48,19 @@ inline float Range(float f0, float f1) { float min = std::min(f0, f1); float max = std::max(f0, f1); - srand( time( NULL ) ); - return min + (rand() & 0xfff) * (max-min) * (1.0f/4095.0f); + + // Ensure we initialize only once. As it's inlined, this static variable will exist in the code-block using it, thus, + // will be created and then initialized again when another code-block uses this. + static bool initialized( false ); + if( !initialized ) + { + uint32_t seed = static_cast( time( NULL ) ); + srand( seed ); + initialized = true; + } + + int32_t randValue = rand(); + return static_cast(randValue & 0xfff) * (1.0f/4095.0f) * (max-min) + min; } /**