summaryrefslogtreecommitdiff
path: root/libs/utils/BlobCache.cpp
diff options
context:
space:
mode:
author Kenny Root <kroot@google.com> 2011-06-15 20:41:15 -0700
committer Kenny Root <kroot@google.com> 2011-06-15 20:55:49 -0700
commit111280a8de1700f718744f48d163789473b9da30 (patch)
tree02a86dc22485fd8ce11695a5684f670154c34610 /libs/utils/BlobCache.cpp
parentef890381093fef91792390e2885920a43763e7d3 (diff)
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
Diffstat (limited to 'libs/utils/BlobCache.cpp')
-rw-r--r--libs/utils/BlobCache.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/libs/utils/BlobCache.cpp b/libs/utils/BlobCache.cpp
index 1298fa733c..590576a8d4 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);