ObjDefManager: Set replacement object's handle info after calling set()
Make gamedef optional when constructing an ObjDefManager Add note about object ownershipmaster
parent
5704fb36d2
commit
5b237b4d94
|
@ -434,7 +434,7 @@ void GenerateNotifier::getEvents(
|
||||||
ObjDefManager::ObjDefManager(IGameDef *gamedef, ObjDefType type)
|
ObjDefManager::ObjDefManager(IGameDef *gamedef, ObjDefType type)
|
||||||
{
|
{
|
||||||
m_objtype = type;
|
m_objtype = type;
|
||||||
m_ndef = gamedef->getNodeDefManager();
|
m_ndef = gamedef ? gamedef->getNodeDefManager() : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -471,7 +471,16 @@ ObjDef *ObjDefManager::get(ObjDefHandle handle) const
|
||||||
ObjDef *ObjDefManager::set(ObjDefHandle handle, ObjDef *obj)
|
ObjDef *ObjDefManager::set(ObjDefHandle handle, ObjDef *obj)
|
||||||
{
|
{
|
||||||
u32 index = validateHandle(handle);
|
u32 index = validateHandle(handle);
|
||||||
return (index != OBJDEF_INVALID_INDEX) ? setRaw(index, obj) : NULL;
|
if (index == OBJDEF_INVALID_INDEX)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ObjDef *oldobj = setRaw(index, obj);
|
||||||
|
|
||||||
|
obj->uid = oldobj->uid;
|
||||||
|
obj->index = oldobj->index;
|
||||||
|
obj->handle = oldobj->handle;
|
||||||
|
|
||||||
|
return oldobj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -206,12 +206,15 @@ public:
|
||||||
std::string name;
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is
|
||||||
|
// added/set to. Note that ObjDefs managed by ObjDefManager are NOT refcounted,
|
||||||
|
// so the same ObjDef instance must not be referenced multiple
|
||||||
class ObjDefManager {
|
class ObjDefManager {
|
||||||
public:
|
public:
|
||||||
ObjDefManager(IGameDef *gamedef, ObjDefType type);
|
ObjDefManager(IGameDef *gamedef, ObjDefType type);
|
||||||
virtual ~ObjDefManager();
|
virtual ~ObjDefManager();
|
||||||
|
|
||||||
virtual const char *getObjectTitle() const = 0;
|
virtual const char *getObjectTitle() const { return "ObjDef"; }
|
||||||
|
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
virtual ObjDef *getByName(const std::string &name) const;
|
virtual ObjDef *getByName(const std::string &name) const;
|
||||||
|
|
Loading…
Reference in New Issue