Browse Source

2006-07-23 Sheplyakov Alexei <varg@theor.jinr.ru>

* src/base/random/cl_random_from.cc: Add support for MinGW.
master
Richard Kreckel 19 years ago
parent
commit
939f59c06b
  1. 4
      ChangeLog
  2. 28
      src/base/random/cl_random_from.cc

4
ChangeLog

@ -1,3 +1,7 @@
2006-07-23 Sheplyakov Alexei <varg@theor.jinr.ru>
* src/base/random/cl_random_from.cc: Add support for MinGW.
2006-06-13 Richard B. Kreckel <kreckel@ginac.de>
* m4/general.m4 (CL_CANONICAL_HOST_CPU): Force host_cpu=i386 for x86_64

28
src/base/random/cl_random_from.cc

@ -9,14 +9,18 @@
// Implementation.
#if defined(_WIN32)
#include <windows.h> // for GetCurrentProcessId()
#endif
#include "cl_base_config.h"
#include "cl_low.h"
#include <cstdlib> // declares rand()
#if defined(unix) || defined(__unix) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(_AIX) || defined(sinix) || (defined(__MACH__) && defined(__APPLE__)) || (defined(_WIN32) && defined(__GNUC__)) || defined(__BEOS__)
#if defined(unix) || defined(__unix) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(_AIX) || defined(sinix) || (defined(__MACH__) && defined(__APPLE__)) || (defined(__CYGWIN__) && defined(__GNUC__)) || defined(__BEOS__)
#include <sys/types.h>
#include <unistd.h> // declares getpid()
#include <cstdlib> // declares rand()
#if defined(HAVE_GETTIMEOFDAY)
@ -43,15 +47,30 @@ inline uint32 get_seed (void)
#include <sys/times.h>
extern "C" clock_t times (struct tms * buffer);
namespace cln {
inline uint32 get_seed (void)
{
var struct tms tmsbuf;
var uint32 seed_lo = times(&tmsbuf);
return seed_lo + tmsbuf.tms_utime + tmsbuf.tms_stime;
}
} // namespace cln
#endif
#elif defined(_WIN32)
#include <sys/time.h>
#include <sys/timeb.h>
namespace cln {
inline uint32 get_seed (void)
{
struct timeb timebuf;
ftime(&timebuf);
return cln::highlow32(timebuf.time, (long)(timebuf.millitm)*1000);
}
} // namespace cln
#endif
namespace cln {
@ -64,13 +83,16 @@ random_state::random_state ()
{
var uint32 seed_hi;
var uint32 seed_lo;
#if defined(unix) || defined(__unix) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(_AIX) || defined(sinix) || (defined(__MACH__) && defined(__APPLE__)) || (defined(_WIN32) && defined(__GNUC__)) || defined(__BEOS__)
#if defined(unix) || defined(__unix) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(_AIX) || defined(sinix) || (defined(__MACH__) && defined(__APPLE__)) || (defined(__CYGWIN__) && defined(__GNUC__)) || defined(__BEOS__)
seed_lo = ::get_seed();
seed_hi = (rand() // zufällige 31 Bit (bei UNIX_BSD) bzw. 16 Bit (bei UNIX_SYSV)
<< 8) ^ (uintL)(getpid()); // ca. 8 Bit von der Process ID
#elif defined(__OpenBSD__)
seed_lo = arc4random();
seed_hi = arc4random();
#elif defined(_WIN32)
seed_lo = ::get_seed();
seed_hi = (rand() << 8) ^ (uintL)(GetCurrentProcessId());
#elif defined(__atarist)
seed_lo = highlow32(GEMDOS_GetDate(),GEMDOS_GetTime()); // 16+16 zufällige Bits
seed_hi = XBIOS_Random(); // 24 Bit zufällig vom XBIOS, vorne 8 Nullbits

Loading…
Cancel
Save