mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-07-10 17:51:35 +00:00
Return cached element when set existing
This commit is contained in:
parent
05d6f6ac25
commit
f2ebad5115
3 changed files with 10 additions and 18 deletions
|
@ -77,7 +77,7 @@ namespace
|
||||||
EXPECT_EQ(result.get(), (NavMeshDataRef {mData, 1}));
|
EXPECT_EQ(result.get(), (NavMeshDataRef {mData, 1}));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DetourNavigatorNavMeshTilesCacheTest, set_existing_element_should_throw_exception)
|
TEST_F(DetourNavigatorNavMeshTilesCacheTest, set_existing_element_should_return_cached_element)
|
||||||
{
|
{
|
||||||
const std::size_t navMeshDataSize = 1;
|
const std::size_t navMeshDataSize = 1;
|
||||||
const std::size_t navMeshKeySize = cRecastMeshKeySize;
|
const std::size_t navMeshKeySize = cRecastMeshKeySize;
|
||||||
|
@ -87,10 +87,9 @@ namespace
|
||||||
NavMeshData anotherNavMeshData {anotherData, 1};
|
NavMeshData anotherNavMeshData {anotherData, 1};
|
||||||
|
|
||||||
cache.set(mAgentHalfExtents, mTilePosition, mRecastMesh, mOffMeshConnections, std::move(mNavMeshData));
|
cache.set(mAgentHalfExtents, mTilePosition, mRecastMesh, mOffMeshConnections, std::move(mNavMeshData));
|
||||||
EXPECT_THROW(
|
const auto result = cache.set(mAgentHalfExtents, mTilePosition, mRecastMesh, mOffMeshConnections, std::move(anotherNavMeshData));
|
||||||
cache.set(mAgentHalfExtents, mTilePosition, mRecastMesh, mOffMeshConnections, std::move(anotherNavMeshData)),
|
ASSERT_TRUE(result);
|
||||||
InvalidArgument
|
EXPECT_EQ(result.get(), (NavMeshDataRef {mData, 1}));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DetourNavigatorNavMeshTilesCacheTest, get_should_return_cached_value)
|
TEST_F(DetourNavigatorNavMeshTilesCacheTest, get_should_return_cached_value)
|
||||||
|
|
|
@ -576,17 +576,8 @@ namespace DetourNavigator
|
||||||
return navMeshCacheItem->lock()->removeTile(changedTile);
|
return navMeshCacheItem->lock()->removeTile(changedTile);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
cachedNavMeshData = navMeshTilesCache.set(agentHalfExtents, changedTile, *recastMesh,
|
||||||
{
|
offMeshConnections, std::move(navMeshData));
|
||||||
cachedNavMeshData = navMeshTilesCache.set(agentHalfExtents, changedTile, *recastMesh,
|
|
||||||
offMeshConnections, std::move(navMeshData));
|
|
||||||
}
|
|
||||||
catch (const InvalidArgument&)
|
|
||||||
{
|
|
||||||
cachedNavMeshData = navMeshTilesCache.get(agentHalfExtents, changedTile, *recastMesh,
|
|
||||||
offMeshConnections);
|
|
||||||
cached = static_cast<bool>(cachedNavMeshData);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cachedNavMeshData)
|
if (!cachedNavMeshData)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "navmeshtilescache.hpp"
|
#include "navmeshtilescache.hpp"
|
||||||
#include "exceptions.hpp"
|
|
||||||
|
|
||||||
#include <osg/Stats>
|
#include <osg/Stats>
|
||||||
|
|
||||||
|
@ -68,7 +67,10 @@ namespace DetourNavigator
|
||||||
if (!emplaced.second)
|
if (!emplaced.second)
|
||||||
{
|
{
|
||||||
mFreeItems.erase(iterator);
|
mFreeItems.erase(iterator);
|
||||||
throw InvalidArgument("Set existing cache value");
|
acquireItemUnsafe(emplaced.first->second);
|
||||||
|
++mGetCount;
|
||||||
|
++mHitCount;
|
||||||
|
return Value(*this, emplaced.first->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator->mNavMeshData = std::move(value);
|
iterator->mNavMeshData = std::move(value);
|
||||||
|
|
Loading…
Reference in a new issue