forked from teamnwah/openmw-tes3coop
f49fde3d5d
Deleted references should be accessible via an explicit reference, and can be undeleted using "setdelete 0". Also the Resurrect function implicitely undeletes the given reference.
54 lines
1.6 KiB
C++
54 lines
1.6 KiB
C++
#ifndef GAME_MWWORLD_CELLREFLIST_H
|
|
#define GAME_MWWORLD_CELLREFLIST_H
|
|
|
|
#include <list>
|
|
|
|
#include "livecellref.hpp"
|
|
|
|
namespace MWWorld
|
|
{
|
|
/// \brief Collection of references of one type
|
|
template <typename X>
|
|
struct CellRefList
|
|
{
|
|
typedef LiveCellRef<X> LiveRef;
|
|
typedef std::list<LiveRef> List;
|
|
List mList;
|
|
|
|
/// Search for the given reference in the given reclist from
|
|
/// ESMStore. Insert the reference into the list if a match is
|
|
/// found. If not, throw an exception.
|
|
/// Moved to cpp file, as we require a custom compare operator for it,
|
|
/// and the build will fail with an ugly three-way cyclic header dependence
|
|
/// so we need to pass the instantiation of the method to the linker, when
|
|
/// all methods are known.
|
|
void load (ESM::CellRef &ref, bool deleted, const MWWorld::ESMStore &esmStore);
|
|
|
|
LiveRef *find (const std::string& name)
|
|
{
|
|
for (typename List::iterator iter (mList.begin()); iter!=mList.end(); ++iter)
|
|
if (iter->mRef.getRefId() == name)
|
|
return &*iter;
|
|
|
|
return 0;
|
|
}
|
|
|
|
LiveRef &insert (const LiveRef &item)
|
|
{
|
|
mList.push_back(item);
|
|
return mList.back();
|
|
}
|
|
|
|
LiveCellRef<X> *searchViaHandle (const std::string& handle)
|
|
{
|
|
for (typename List::iterator iter (mList.begin()); iter!=mList.end(); ++iter)
|
|
if (iter->mData.getBaseNode() &&
|
|
iter->mData.getHandle()==handle)
|
|
return &*iter;
|
|
|
|
return 0;
|
|
}
|
|
};
|
|
}
|
|
|
|
#endif
|