mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-28 14:53:58 +00:00
a581e394b4
It's not possible to have SafePtr with mLastUpdate from the future. But theoretically it's possible to get PtrRegistry::mRevision overflow so operator less would return false when there is a change.
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#include "ptr.hpp"
|
|
|
|
#include "apps/openmw/mwbase/environment.hpp"
|
|
|
|
#include "worldmodel.hpp"
|
|
|
|
namespace MWWorld
|
|
{
|
|
|
|
std::string Ptr::toString() const
|
|
{
|
|
std::string res = "object";
|
|
if (getRefData().isDeleted())
|
|
res = "deleted object";
|
|
res.append(getCellRef().getRefNum().toString());
|
|
res.append(" (");
|
|
res.append(getTypeDescription());
|
|
res.append(", ");
|
|
res.append(getCellRef().getRefId().toDebugString());
|
|
res.append(")");
|
|
return res;
|
|
}
|
|
|
|
SafePtr::SafePtr(const Ptr& ptr)
|
|
: mId(ptr.getCellRef().getRefNum())
|
|
, mPtr(ptr)
|
|
, mLastUpdate(MWBase::Environment::get().getWorldModel()->getPtrRegistry().getRevision())
|
|
{
|
|
}
|
|
|
|
std::string SafePtr::toString() const
|
|
{
|
|
update();
|
|
if (mPtr.isEmpty())
|
|
return "object" + mId.toString() + " (not found)";
|
|
else
|
|
return mPtr.toString();
|
|
}
|
|
|
|
void SafePtr::update() const
|
|
{
|
|
const PtrRegistry& registry = MWBase::Environment::get().getWorldModel()->getPtrRegistry();
|
|
if (mLastUpdate != registry.getRevision())
|
|
{
|
|
mPtr = registry.getOrDefault(mId);
|
|
mLastUpdate = registry.getRevision();
|
|
}
|
|
}
|
|
}
|