5 #ifndef MERCATOR_RANDCACHE_H
6 #define MERCATOR_RANDCACHE_H
10 #include <wfmath/MersenneTwister.h>
21 typedef WFMath::MTRand::uint32
uint32;
53 size_type cache_order = (*m_ordering)(x, y);
56 if(cache_order >=
m_cache.size()) {
58 m_cache.resize(cache_order + 64);
59 while(old_size <
m_cache.size())
63 return double(
m_cache[cache_order] * (1.0/4294967295.0));
81 if (x==0 && y==0)
return 0;
83 int d=std::max(std::abs(x), std::abs(y));
84 int min=(2*d-1)*(2*d-1);
86 if (y == d)
return min + 2*d - x;
87 if (x == -d)
return min + 4*d - y;
88 if (y == -d)
return min + 6*d + x;
90 if (y >=0)
return min + y;
91 else return min + 8*d + y;