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
This commit is contained in:
parent
9c8fa9ed41
commit
967ad860da
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue