X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fguid.cpp;h=db0e149844acf158093b5065c2066d8f4e834b95;hb=4cd211467061154545ef7b5f5617dce7b177bf16;hp=bf234752b59f38f1577e73fdbb280d73ddb71007;hpb=e8a065f2385c219c511b57dac52786120bfa097d;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/guid.cpp b/synfig-core/trunk/src/synfig/guid.cpp index bf23475..db0e149 100644 --- a/synfig-core/trunk/src/synfig/guid.cpp +++ b/synfig-core/trunk/src/synfig/guid.cpp @@ -2,10 +2,11 @@ /*! \file guid.cpp ** \brief Template File ** -** $Id: guid.cpp,v 1.4 2005/01/13 06:48:39 darco Exp $ +** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -33,6 +34,7 @@ #endif #include "guid.h" +#include "quick_rng.h" #include #include #include @@ -76,50 +78,6 @@ using namespace synfig; /* === M E T H O D S ======================================================= */ -// A fast 32-bit linear congruential random number generator -class quick_rng -{ - unsigned long next; -public: - quick_rng(unsigned long seed=0):next(seed) { } - - void set_seed(unsigned long x) - { - next=x; - } - - unsigned long i32() - { - static const unsigned long a(1664525); - static const unsigned long c(1013904223); - - return next=next*a+c; - } - - unsigned long i16() - { - return i32()>>16; - } - - float f() - { - static const float m(int(65535)); - - return float(i16())/m; - } - - unsigned long operator()(const unsigned long& m) - { - if(m==65536) - return i16(); - else - if(m<=65536) - return i16()%m; - else - return i32()%m; - } -}; - #define GUID_RNG quick_rng //#define GUID_RNG subtractive_rng @@ -134,7 +92,7 @@ static void (*get_rand_long_long)(uint64_t&)=_set_up_rand_long_long; static void _set_up_rand_long_long(uint64_t &x) { #ifdef _DEBUG - synfig::info("Starting up GUID system..."); + // synfig::info("Starting up GUID system..."); #endif _a=GUID_RNG(time(0)+clock()); _b=GUID_RNG(clock()); @@ -146,10 +104,10 @@ static void _get_rand_long_long(uint64_t &x) { //subtractive_rng _c(clock()); unsigned short* data(reinterpret_cast(&x)); - data[0]=_a(65536); - data[1]=_a(65536); - data[2]=_a(65536); - data[3]=_a(65536); + data[0]=_a(65536); + data[1]=_a(65536); + data[2]=_a(65536); + data[3]=_a(65536); } #else @@ -160,7 +118,7 @@ static void _get_rand_long_long(uint64_t &x) static void get_rand_long_long(uint64_t &x) { _GUID* guid(reinterpret_cast<_GUID*>(&x)); - CoCreateGuid(guid); + CoCreateGuid(guid); } #else @@ -172,7 +130,7 @@ static void (*get_rand_long_long)(uint64_t&)=_set_up_rand_long_long; static void _set_up_rand_long_long(uint64_t &x) { #ifdef _DEBUG - synfig::info("Starting up GUID system..."); + // synfig::info("Starting up GUID system..."); #endif rand_fd=open("/dev/urandom",O_RDONLY); get_rand_long_long=_get_rand_long_long; @@ -195,7 +153,7 @@ synfig::GUID::make_unique() synfig::GUID synfig::GUID::hasher(const String& str) -{ +{ #ifdef HASH_MAP_H hash string_hash_; const unsigned int seed( @@ -211,7 +169,7 @@ synfig::GUID::hasher(const String& str) seed=(seed>>(32-(i%24)))^(seed<<(i%24)) } #endif - + GUID_RNG random(seed); GUID ret(0); ret.data.u_32.a=random(~(unsigned int)0);