Ejemplo n.º 1
0
    void LruCacheTest::ClearTestHelper(int keyCount)
    {
        size_t cacheLimit = keyCount;
        size_t bucketCount = 128;

        auto cacheSPtr = make_shared<TestCache>(cacheLimit, bucketCount);

        for (auto ix=0; ix<keyCount; ++ix)
        {
            auto key = wformatString("key{0}", ix);
            SyncTryPut(*cacheSPtr, key, true);
            SyncTryGet(*cacheSPtr, key, true);
        }

        vector<weak_ptr<TestCacheEntry>> weakPtrs;

        for (auto ix=0; ix<keyCount; ++ix)
        {
            auto key = wformatString("key{0}", ix);

            TestCacheEntrySPtr entry;
            cacheSPtr->TryGet(key, entry);

            weak_ptr<TestCacheEntry> weakPtr(entry);

            entry.reset();

            VERIFY_IS_TRUE_FMT(weakPtr.use_count() == 1, "{0}: wptr use_count {1} != 1", key, weakPtr.use_count());
            VERIFY_IS_TRUE_FMT(weakPtr.lock().get() != nullptr, "{0}: wptr lock() failed", key);
            VERIFY_IS_TRUE_FMT(!weakPtr.expired(), "{0}: wptr expired {1}", key, weakPtr.expired());
            weakPtr.reset();

            cacheSPtr->TryGet(key, entry);
            weakPtrs.push_back(weak_ptr<TestCacheEntry>(entry));
        }

        cacheSPtr.reset();

        for (auto ix=0; ix<keyCount; ++ix)
        {
            auto key = wformatString("key{0}", ix);

            auto & weakPtr = weakPtrs[ix];

            VERIFY_IS_TRUE_FMT(weakPtr.use_count() == 0, "{0}: wptr use_count {1} != 0", key, weakPtr.use_count());
            VERIFY_IS_TRUE_FMT(weakPtr.lock().get() == nullptr, "{0}: wptr lock() succeeded", key);
            VERIFY_IS_TRUE_FMT(weakPtr.expired(), "{0}: wptr !expired", key, weakPtr.expired());
        }
    }
Ejemplo n.º 2
0
//=================================================================================================
BaseObject* BaseObject::TryGet(cstring id, bool* is_variant)
{
	assert(id);

	if(strcmp(id, "painting") == 0)
	{
		if(is_variant)
			*is_variant = true;
		return TryGet(GetRandomPainting());
	}

	if(strcmp(id, "tombstone") == 0)
	{
		if(is_variant)
			*is_variant = true;
		int id = Random(0, 9);
		if(id != 0)
			return TryGet(Format("tombstone_x%d", id));
		else
			return TryGet("tombstone_1");
	}

	if(strcmp(id, "random") == 0)
	{
		switch(Rand() % 3)
		{
		case 0: return TryGet("wheel");
		case 1: return TryGet("rope");
		case 2: return TryGet("woodpile");
		}
	}

	for(uint i = 0; i < n_objs; ++i)
	{
		if(strcmp(objs[i].id, id) == 0)
			return &objs[i];
	}

	return nullptr;
}