diff options
author | Kenny Root <kroot@google.com> | 2011-06-15 20:41:15 -0700 |
---|---|---|
committer | Alex Ray <aray@google.com> | 2013-07-30 13:56:57 -0700 |
commit | 967ad860da30d09c2003274389cb53abe165b6cc (patch) | |
tree | 6ad64c4c8be1d7e9889a3101d9f0116cc779d22e | |
parent | 9c8fa9ed4111c69c82ace01c8a7ac3beeacdce78 (diff) | |
download | system_core-967ad860da30d09c2003274389cb53abe165b6cc.tar.gz system_core-967ad860da30d09c2003274389cb53abe165b6cc.tar.bz2 system_core-967ad860da30d09c2003274389cb53abe165b6cc.zip |
Use rand() for MinGW
The version of MinGW we use doesn't have nrand48() which is really lame,
but we need to use libutils in the Windows SDK.
Change-Id: If854c03dbf02bc29e79f49e4539f08c2bf057517
-rw-r--r-- | include/utils/BlobCache.h | 3 | ||||
-rw-r--r-- | libs/utils/BlobCache.cpp | 14 |
2 files changed, 16 insertions, 1 deletions
diff --git a/include/utils/BlobCache.h b/include/utils/BlobCache.h index 8f76d72c1..dc45ff0f3 100644 --- a/include/utils/BlobCache.h +++ b/include/utils/BlobCache.h @@ -82,6 +82,9 @@ private: BlobCache(const BlobCache&); void operator=(const BlobCache&); + // A random function helper to get around MinGW not having nrand48() + long int blob_random(); + // clean evicts a randomly chosen set of entries from the cache such that // the total size of all remaining entries is less than mMaxTotalSize/2. void clean(); diff --git a/libs/utils/BlobCache.cpp b/libs/utils/BlobCache.cpp index 1298fa733..590576a8d 100644 --- a/libs/utils/BlobCache.cpp +++ b/libs/utils/BlobCache.cpp @@ -31,9 +31,13 @@ BlobCache::BlobCache(size_t maxKeySize, size_t maxValueSize, size_t maxTotalSize mMaxTotalSize(maxTotalSize), mTotalSize(0) { nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC); +#ifdef _WIN32 + srand(now); +#else mRandState[0] = (now >> 0) & 0xFFFF; mRandState[1] = (now >> 16) & 0xFFFF; mRandState[2] = (now >> 32) & 0xFFFF; +#endif LOGV("initializing random seed using %lld", now); } @@ -148,11 +152,19 @@ size_t BlobCache::get(const void* key, size_t keySize, void* value, return valueBlobSize; } +long int BlobCache::blob_random() { +#ifdef _WIN32 + return rand(); +#else + return nrand48(mRandState); +#endif +} + void BlobCache::clean() { // Remove a random cache entry until the total cache size gets below half // the maximum total cache size. while (mTotalSize > mMaxTotalSize / 2) { - size_t i = size_t(nrand48(mRandState) % (mCacheEntries.size())); + size_t i = size_t(blob_random() % (mCacheEntries.size())); const CacheEntry& entry(mCacheEntries[i]); mTotalSize -= entry.getKey()->getSize() + entry.getValue()->getSize(); mCacheEntries.removeAt(i); |