Merge pull request #862 from scrawl/const

ConstPtr
openmw-38
scrawl 9 years ago
commit d3d6a69eea

@ -66,9 +66,9 @@ namespace MWClass
return ref->mBase->mName;
}
std::string Activator::getScript (const MWWorld::Ptr& ptr) const
std::string Activator::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Activator> *ref =
const MWWorld::LiveCellRef<ESM::Activator> *ref =
ptr.get<ESM::Activator>();
return ref->mBase->mScript;

@ -31,7 +31,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual boost::shared_ptr<MWWorld::Action> activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor) const;

@ -64,10 +64,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Apparatus::getScript (const MWWorld::Ptr& ptr) const
std::string Apparatus::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Apparatus> *ref =
ptr.get<ESM::Apparatus>();
const MWWorld::LiveCellRef<ESM::Apparatus> *ref = ptr.get<ESM::Apparatus>();
return ref->mBase->mScript;
}

@ -31,7 +31,7 @@ namespace MWClass
const MWWorld::Ptr& actor) const;
///< Generate action for activation
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual int getValue (const MWWorld::Ptr& ptr) const;

@ -83,10 +83,9 @@ namespace MWClass
return ref->mBase->mData.mHealth;
}
std::string Armor::getScript (const MWWorld::Ptr& ptr) const
std::string Armor::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Armor> *ref =
ptr.get<ESM::Armor>();
const MWWorld::LiveCellRef<ESM::Armor> *ref = ptr.get<ESM::Armor>();
return ref->mBase->mScript;
}

@ -36,7 +36,7 @@ namespace MWClass
virtual int getItemMaxHealth (const MWWorld::Ptr& ptr) const;
///< Return item max health or throw an exception, if class does not have item health
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const MWWorld::Ptr& ptr) const;

@ -78,10 +78,9 @@ namespace MWClass
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionRead(ptr));
}
std::string Book::getScript (const MWWorld::Ptr& ptr) const
std::string Book::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Book> *ref =
ptr.get<ESM::Book>();
const MWWorld::LiveCellRef<ESM::Book> *ref = ptr.get<ESM::Book>();
return ref->mBase->mScript;
}

@ -28,7 +28,7 @@ namespace MWClass
const MWWorld::Ptr& actor) const;
///< Generate action for activation
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual bool hasToolTip (const MWWorld::Ptr& ptr) const;

@ -66,10 +66,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Clothing::getScript (const MWWorld::Ptr& ptr) const
std::string Clothing::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Clothing> *ref =
ptr.get<ESM::Clothing>();
const MWWorld::LiveCellRef<ESM::Clothing> *ref = ptr.get<ESM::Clothing>();
return ref->mBase->mScript;
}

@ -28,7 +28,7 @@ namespace MWClass
const MWWorld::Ptr& actor) const;
///< Generate action for activation
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const MWWorld::Ptr& ptr) const;

@ -209,10 +209,9 @@ namespace MWClass
return ptr.getRefData().getCustomData()->asContainerCustomData().mContainerStore;
}
std::string Container::getScript (const MWWorld::Ptr& ptr) const
std::string Container::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Container> *ref =
ptr.get<ESM::Container>();
const MWWorld::LiveCellRef<ESM::Container> *ref = ptr.get<ESM::Container>();
return ref->mBase->mScript;
}
@ -299,6 +298,8 @@ namespace MWClass
void Container::readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state) const
{
if (!state.mHasCustomState)
return;
const ESM::ContainerState& state2 = dynamic_cast<const ESM::ContainerState&> (state);
if (!ptr.getRefData().getCustomData())
@ -312,13 +313,17 @@ namespace MWClass
readState (state2.mInventory);
}
void Container::writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state) const
void Container::writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state) const
{
ESM::ContainerState& state2 = dynamic_cast<ESM::ContainerState&> (state);
ensureCustomData (ptr);
if (!ptr.getRefData().getCustomData())
{
state.mHasCustomState = false;
return;
}
dynamic_cast<ContainerCustomData&> (*ptr.getRefData().getCustomData()).mContainerStore.
dynamic_cast<const ContainerCustomData&> (*ptr.getRefData().getCustomData()).mContainerStore.
writeState (state2.mInventory);
}
}

@ -40,7 +40,7 @@ namespace MWClass
virtual MWWorld::ContainerStore& getContainerStore (const MWWorld::Ptr& ptr) const;
///< Return container store
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual float getCapacity (const MWWorld::Ptr& ptr) const;
@ -63,7 +63,7 @@ namespace MWClass
const;
///< Read additional state from \a state into \a ptr.
virtual void writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const;
///< Write additional state from \a ptr into \a state.

@ -444,9 +444,9 @@ namespace MWClass
return isFlagBitSet(ptr, ESM::Creature::Weapon);
}
std::string Creature::getScript (const MWWorld::Ptr& ptr) const
std::string Creature::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
const MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
return ref->mBase->mScript;
}
@ -724,7 +724,7 @@ namespace MWClass
customData.mCreatureStats.readState (state2.mCreatureStats);
}
void Creature::writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
void Creature::writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const
{
ESM::CreatureState& state2 = dynamic_cast<ESM::CreatureState&> (state);
@ -735,9 +735,7 @@ namespace MWClass
return;
}
ensureCustomData (ptr);
CreatureCustomData& customData = ptr.getRefData().getCustomData()->asCreatureCustomData();
const CreatureCustomData& customData = dynamic_cast<const CreatureCustomData&>(*ptr.getRefData().getCustomData());
customData.mContainerStore->writeState (state2.mInventory);
customData.mCreatureStats.writeState (state2.mCreatureStats);

@ -74,7 +74,7 @@ namespace MWClass
virtual bool hasInventoryStore (const MWWorld::Ptr &ptr) const;
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual float getCapacity (const MWWorld::Ptr& ptr) const;
@ -117,12 +117,10 @@ namespace MWClass
/// Get a blood texture suitable for \a ptr (see Blood Texture 0-2 in Morrowind.ini)
virtual int getBloodTexture (const MWWorld::Ptr& ptr) const;
virtual void readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state)
const;
virtual void readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state) const;
///< Read additional state from \a state into \a ptr.
virtual void writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
const;
virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state) const;
///< Write additional state from \a ptr into \a state.
virtual int getBaseGold(const MWWorld::Ptr& ptr) const;

@ -104,6 +104,9 @@ namespace MWClass
void CreatureLevList::readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state)
const
{
if (!state.mHasCustomState)
return;
const ESM::CreatureLevListState& state2 = dynamic_cast<const ESM::CreatureLevListState&> (state);
ensureCustomData(ptr);
@ -112,13 +115,18 @@ namespace MWClass
customData.mSpawn = state2.mSpawn;
}
void CreatureLevList::writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
void CreatureLevList::writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const
{
ESM::CreatureLevListState& state2 = dynamic_cast<ESM::CreatureLevListState&> (state);
ensureCustomData(ptr);
CreatureLevListCustomData& customData = ptr.getRefData().getCustomData()->asCreatureLevListCustomData();
if (!ptr.getRefData().getCustomData())
{
state.mHasCustomState = false;
return;
}
const CreatureLevListCustomData& customData = dynamic_cast<const CreatureLevListCustomData&>(*ptr.getRefData().getCustomData());
state2.mSpawnActorId = customData.mSpawnActorId;
state2.mSpawn = customData.mSpawn;
}

@ -23,12 +23,10 @@ namespace MWClass
virtual void insertObjectRendering (const MWWorld::Ptr& ptr, const std::string& model, MWRender::RenderingInterface& renderingInterface) const;
///< Add reference into a cell for rendering
virtual void readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state)
const;
virtual void readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state) const;
///< Read additional state from \a state into \a ptr.
virtual void writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
const;
virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state) const;
///< Write additional state from \a ptr into \a state.
virtual void respawn (const MWWorld::Ptr& ptr) const;

@ -217,10 +217,9 @@ namespace MWClass
return true;
}
std::string Door::getScript (const MWWorld::Ptr& ptr) const
std::string Door::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Door> *ref =
ptr.get<ESM::Door>();
const MWWorld::LiveCellRef<ESM::Door> *ref = ptr.get<ESM::Door>();
return ref->mBase->mScript;
}
@ -343,6 +342,8 @@ namespace MWClass
void Door::readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state) const
{
if (!state.mHasCustomState)
return;
ensureCustomData(ptr);
DoorCustomData& customData = ptr.getRefData().getCustomData()->asDoorCustomData();
@ -350,10 +351,14 @@ namespace MWClass
customData.mDoorState = state2.mDoorState;
}
void Door::writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state) const
void Door::writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state) const
{
ensureCustomData(ptr);
const DoorCustomData& customData = ptr.getRefData().getCustomData()->asDoorCustomData();
if (!ptr.getRefData().getCustomData())
{
state.mHasCustomState = false;
return;
}
const DoorCustomData& customData = dynamic_cast<const DoorCustomData&>(*ptr.getRefData().getCustomData());
ESM::DoorState& state2 = dynamic_cast<ESM::DoorState&>(state);
state2.mDoorState = customData.mDoorState;

@ -49,7 +49,7 @@ namespace MWClass
virtual bool canLock(const MWWorld::Ptr &ptr) const;
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
static void registerSelf();
@ -66,7 +66,7 @@ namespace MWClass
const;
///< Read additional state from \a state into \a ptr.
virtual void writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const;
///< Write additional state from \a ptr into \a state.
};

@ -70,10 +70,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Ingredient::getScript (const MWWorld::Ptr& ptr) const
std::string Ingredient::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Ingredient> *ref =
ptr.get<ESM::Ingredient>();
const MWWorld::LiveCellRef<ESM::Ingredient> *ref = ptr.get<ESM::Ingredient>();
return ref->mBase->mScript;
}

@ -34,7 +34,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual int getValue (const MWWorld::Ptr& ptr) const;

@ -96,10 +96,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Light::getScript (const MWWorld::Ptr& ptr) const
std::string Light::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Light> *ref =
ptr.get<ESM::Light>();
const MWWorld::LiveCellRef<ESM::Light> *ref = ptr.get<ESM::Light>();
return ref->mBase->mScript;
}

@ -34,7 +34,7 @@ namespace MWClass
const MWWorld::Ptr& actor) const;
///< Generate action for activation
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const MWWorld::Ptr& ptr) const;

@ -65,10 +65,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Lockpick::getScript (const MWWorld::Ptr& ptr) const
std::string Lockpick::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Lockpick> *ref =
ptr.get<ESM::Lockpick>();
const MWWorld::LiveCellRef<ESM::Lockpick> *ref = ptr.get<ESM::Lockpick>();
return ref->mBase->mScript;
}

@ -34,7 +34,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const MWWorld::Ptr& ptr) const;

@ -78,10 +78,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Miscellaneous::getScript (const MWWorld::Ptr& ptr) const
std::string Miscellaneous::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Miscellaneous> *ref =
ptr.get<ESM::Miscellaneous>();
const MWWorld::LiveCellRef<ESM::Miscellaneous> *ref = ptr.get<ESM::Miscellaneous>();
return ref->mBase->mScript;
}

@ -34,7 +34,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual int getValue (const MWWorld::Ptr& ptr) const;

@ -799,10 +799,9 @@ namespace MWClass
return ptr.getRefData().getCustomData()->asNpcCustomData().mInventoryStore;
}
std::string Npc::getScript (const MWWorld::Ptr& ptr) const
std::string Npc::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::NPC> *ref =
ptr.get<ESM::NPC>();
const MWWorld::LiveCellRef<ESM::NPC> *ref = ptr.get<ESM::NPC>();
return ref->mBase->mScript;
}
@ -1176,7 +1175,7 @@ namespace MWClass
static_cast<MWMechanics::CreatureStats&> (customData.mNpcStats).readState (state2.mCreatureStats);
}
void Npc::writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
void Npc::writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const
{
ESM::NpcState& state2 = dynamic_cast<ESM::NpcState&> (state);
@ -1187,9 +1186,7 @@ namespace MWClass
return;
}
ensureCustomData (ptr);
NpcCustomData& customData = ptr.getRefData().getCustomData()->asNpcCustomData();
const NpcCustomData& customData = dynamic_cast<const NpcCustomData&>(*ptr.getRefData().getCustomData());
customData.mInventoryStore.writeState (state2.mInventory);
customData.mNpcStats.writeState (state2.mNpcStats);

@ -80,7 +80,7 @@ namespace MWClass
const MWWorld::Ptr& actor) const;
///< Generate action for activation
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual float getSpeed (const MWWorld::Ptr& ptr) const;
@ -145,7 +145,7 @@ namespace MWClass
const;
///< Read additional state from \a state into \a ptr.
virtual void writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const;
///< Write additional state from \a ptr into \a state.

@ -68,9 +68,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Potion::getScript (const MWWorld::Ptr& ptr) const
std::string Potion::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Potion> *ref =
const MWWorld::LiveCellRef<ESM::Potion> *ref =
ptr.get<ESM::Potion>();
return ref->mBase->mScript;

@ -34,7 +34,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual int getValue (const MWWorld::Ptr& ptr) const;

@ -64,9 +64,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Probe::getScript (const MWWorld::Ptr& ptr) const
std::string Probe::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Probe> *ref =
const MWWorld::LiveCellRef<ESM::Probe> *ref =
ptr.get<ESM::Probe>();
return ref->mBase->mScript;

@ -34,7 +34,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const MWWorld::Ptr& ptr) const;

@ -64,9 +64,9 @@ namespace MWClass
return defaultItemActivate(ptr, actor);
}
std::string Repair::getScript (const MWWorld::Ptr& ptr) const
std::string Repair::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Repair> *ref =
const MWWorld::LiveCellRef<ESM::Repair> *ref =
ptr.get<ESM::Repair>();
return ref->mBase->mScript;

@ -34,7 +34,7 @@ namespace MWClass
virtual MWGui::ToolTipInfo getToolTipInfo (const MWWorld::Ptr& ptr) const;
///< @return the content of the tool tip to be displayed. raises exception if the object has no tooltip.
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual int getValue (const MWWorld::Ptr& ptr) const;

@ -84,9 +84,9 @@ namespace MWClass
return ref->mBase->mData.mHealth;
}
std::string Weapon::getScript (const MWWorld::Ptr& ptr) const
std::string Weapon::getScript (const MWWorld::ConstPtr& ptr) const
{
MWWorld::LiveCellRef<ESM::Weapon> *ref =
const MWWorld::LiveCellRef<ESM::Weapon> *ref =
ptr.get<ESM::Weapon>();
return ref->mBase->mScript;

@ -40,7 +40,7 @@ namespace MWClass
virtual int getItemMaxHealth (const MWWorld::Ptr& ptr) const;
///< Return item max health or throw an exception, if class does not have item health
virtual std::string getScript (const MWWorld::Ptr& ptr) const;
virtual std::string getScript (const MWWorld::ConstPtr& ptr) const;
///< Return name of the script attached to ptr
virtual std::pair<std::vector<int>, bool> getEquipmentSlots (const MWWorld::Ptr& ptr) const;

@ -20,7 +20,7 @@ namespace MWRender
MWWorld::Store<ESM::Land>::iterator it = esmStore.get<ESM::Land>().begin();
for (; it != esmStore.get<ESM::Land>().end(); ++it)
{
ESM::Land* land = const_cast<ESM::Land*>(&*it); // TODO: fix store interface
const ESM::Land* land = &*it;
land->loadData(ESM::Land::DATA_VCLR|ESM::Land::DATA_VHGT|ESM::Land::DATA_VNML|ESM::Land::DATA_VTEX);
}
}

@ -346,15 +346,15 @@ namespace MWWorld
if (mState==State_Preloaded)
return std::binary_search (mIds.begin(), mIds.end(), id);
/// \todo address const-issues
return searchConst (id).isEmpty();
}
template <typename PtrType>
struct SearchVisitor
{
MWWorld::Ptr mFound;
PtrType mFound;
std::string mIdToFind;
bool operator()(const MWWorld::Ptr& ptr)
bool operator()(const PtrType& ptr)
{
if (ptr.getCellRef().getRefId() == mIdToFind)
{
@ -367,19 +367,18 @@ namespace MWWorld
Ptr CellStore::search (const std::string& id)
{
SearchVisitor searchVisitor;
SearchVisitor<MWWorld::Ptr> searchVisitor;
searchVisitor.mIdToFind = id;
forEach(searchVisitor);
return searchVisitor.mFound;
}
Ptr CellStore::searchConst (const std::string& id) const
ConstPtr CellStore::searchConst (const std::string& id) const
{
bool oldState = mHasState;
/// \todo address const-issues
Ptr result = const_cast<CellStore*>(this)->search(id);
const_cast<CellStore*>(this)->mHasState = oldState;
return result;
SearchVisitor<MWWorld::ConstPtr> searchVisitor;
searchVisitor.mIdToFind = id;
forEachConst(searchVisitor);
return searchVisitor.mFound;
}
Ptr CellStore::searchViaActorId (int id)

@ -214,10 +214,10 @@ namespace MWWorld
/// containers.
/// @note Triggers CellStore hasState flag.
Ptr searchConst (const std::string& id) const;
ConstPtr searchConst (const std::string& id) const;
///< Will return an empty Ptr if cell is not loaded. Does not check references in
/// containers.
/// @note Does not trigger CellStore hasState flag. Do not modify the returned Ptr!
/// @note Does not trigger CellStore hasState flag.
Ptr searchViaActorId (int id);
///< Will return an empty Ptr if cell is not loaded.
@ -240,8 +240,9 @@ namespace MWWorld
void preload ();
///< Build ID list from content file.
/// Call visitor (ref) for each reference. visitor must return a bool. Returning
/// Call visitor (MWWorld::Ptr) for each reference. visitor must return a bool. Returning
/// false will abort the iteration.
/// \note Prefer using forEachConst when possible.
/// \attention This function also lists deleted (count 0) objects!
/// \return Iteration completed?
template<class Visitor>
@ -263,6 +264,28 @@ namespace MWWorld
return true;
}
/// Call visitor (MWWorld::ConstPtr) for each reference. visitor must return a bool. Returning
/// false will abort the iteration.
/// \attention This function also lists deleted (count 0) objects!
/// \return Iteration completed?
template<class Visitor>
bool forEachConst (Visitor& visitor) const
{
if (mState != State_Loaded)
return false;
for (unsigned int i=0; i<mMergedRefs.size(); ++i)
{
if (!isAccessible(mMergedRefs[i]->mData, mMergedRefs[i]->mRef))
continue;
if (!visitor(MWWorld::ConstPtr(mMergedRefs[i], this)))
return false;
}
return true;
}
/// Call visitor (ref) for each reference of given type. visitor must return a bool. Returning
/// false will abort the iteration.
/// \attention This function also lists deleted (count 0) objects!
@ -298,9 +321,6 @@ namespace MWWorld
return true;
}
/// \todo add const version of forEach
// NOTE: does not account for moved references
// Should be phased out when we have const version of forEach
inline const CellRefList<ESM::Door>& getReadOnlyDoors() const

@ -158,7 +158,7 @@ namespace MWWorld
return -1;
}
std::string Class::getScript (const Ptr& ptr) const
std::string Class::getScript (const ConstPtr& ptr) const
{
return "";
}
@ -397,7 +397,7 @@ namespace MWWorld
void Class::readAdditionalState (const MWWorld::Ptr& ptr, const ESM::ObjectState& state) const {}
void Class::writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state) const {}
void Class::writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state) const {}
int Class::getBaseGold(const MWWorld::Ptr& ptr) const
{

@ -171,7 +171,7 @@ namespace MWWorld
///< Returns the remaining duration of the object, such as an equippable light
/// source. (default implementation: -1, i.e. infinite)
virtual std::string getScript (const Ptr& ptr) const;
virtual std::string getScript (const ConstPtr& ptr) const;
///< Return name of the script attached to ptr (default implementation: return an empty
/// string).
@ -313,7 +313,7 @@ namespace MWWorld
const;
///< Read additional state from \a state into \a ptr.
virtual void writeAdditionalState (const MWWorld::Ptr& ptr, ESM::ObjectState& state)
virtual void writeAdditionalState (const MWWorld::ConstPtr& ptr, ESM::ObjectState& state)
const;
///< Write additional state from \a ptr into \a state.

@ -94,7 +94,7 @@ void MWWorld::ContainerStore::storeState (const LiveCellRef<T>& ref, ESM::Object
}
template<typename T>
void MWWorld::ContainerStore::storeStates (CellRefList<T>& collection,
void MWWorld::ContainerStore::storeStates (const CellRefList<T>& collection,
ESM::InventoryState& inventory, int& index, bool equipable) const
{
for (typename CellRefList<T>::List::const_iterator iter (collection.mList.begin());
@ -707,7 +707,7 @@ MWWorld::Ptr MWWorld::ContainerStore::search (const std::string& id)
return Ptr();
}
void MWWorld::ContainerStore::writeState (ESM::InventoryState& state)
void MWWorld::ContainerStore::writeState (ESM::InventoryState& state) const
{
state.mItems.clear();

@ -86,7 +86,7 @@ namespace MWWorld
void storeState (const LiveCellRef<T>& ref, ESM::ObjectState& state) const;
template<typename T>
void storeStates (CellRefList<T>& collection,
void storeStates (const CellRefList<T>& collection,
ESM::InventoryState& inventory, int& index,
bool equipable = false) const;
@ -169,8 +169,7 @@ namespace MWWorld
Ptr search (const std::string& id);
/// \todo make this method const once const-correct ContainerStoreIterators are available
virtual void writeState (ESM::InventoryState& state);
virtual void writeState (ESM::InventoryState& state) const;
virtual void readState (const ESM::InventoryState& state);

@ -752,7 +752,7 @@ bool MWWorld::InventoryStore::isEquipped(const MWWorld::Ptr &item)
return false;
}
void MWWorld::InventoryStore::writeState(ESM::InventoryState &state)
void MWWorld::InventoryStore::writeState(ESM::InventoryState &state) const
{
MWWorld::ContainerStore::writeState(state);

@ -207,7 +207,7 @@ namespace MWWorld
virtual void clear();
///< Empty container.
virtual void writeState (ESM::InventoryState& state);
virtual void writeState (ESM::InventoryState& state) const;
virtual void readState (const ESM::InventoryState& state);
};

@ -54,8 +54,7 @@ void MWWorld::LiveCellRefBase::saveImp (ESM::ObjectState& state) const
{
mRef.writeState(state);
/// \todo get rid of this cast once const-correct Ptr are available
Ptr ptr (const_cast<LiveCellRefBase *> (this));
ConstPtr ptr (this);
mData.write (state, mClass->getScript (ptr));

@ -52,3 +52,25 @@ MWWorld::Ptr::operator const void *()
{
return mRef;
}
// -------------------------------------------------------------------------------
const std::string &MWWorld::ConstPtr::getTypeName() const
{
if(mRef != 0)
return mRef->mClass->getTypeName();
throw std::runtime_error("Can't get type name from an empty object.");
}
const MWWorld::LiveCellRefBase *MWWorld::ConstPtr::getBase() const
{
if (!mRef)
throw std::runtime_error ("Can't access cell ref pointed to by null Ptr");
return mRef;
}
MWWorld::ConstPtr::operator const void *()
{
return mRef;
}

@ -85,6 +85,87 @@ namespace MWWorld
///< Return a 0-pointer, if Ptr is empty; return a non-0-pointer, if Ptr is not empty
};
/// \brief Pointer to a const LiveCellRef
/// @note a Ptr can be implicitely converted to a ConstPtr, but you can not convert a ConstPtr to a Ptr.
class ConstPtr
{
public:
const MWWorld::LiveCellRefBase *mRef;
const CellStore *mCell;
const ContainerStore *mContainerStore;
public:
ConstPtr(const MWWorld::LiveCellRefBase *liveCellRef=0, const CellStore *cell=0)
: mRef(liveCellRef), mCell(cell), mContainerStore(0)
{
}
ConstPtr(const MWWorld::Ptr& ptr)
: mRef(ptr.mRef), mCell(ptr.mCell), mContainerStore(ptr.mContainerStore)
{
}
bool isEmpty() const
{
return mRef == 0;
}
const std::string& getTypeName() const;
const Class& getClass() const
{
if(mRef != 0)
return *(mRef->mClass);
throw std::runtime_error("Cannot get class of an empty object");
}
template<typename T>
const MWWorld::LiveCellRef<T> *get() const
{
const MWWorld::LiveCellRef<T> *ref = dynamic_cast<const MWWorld::LiveCellRef<T>*>(mRef);
if(ref) return ref;
std::stringstream str;
str<< "Bad LiveCellRef cast to "<<typeid(T).name()<<" from ";
if(mRef != 0) str<< getTypeName();
else str<< "an empty object";
throw std::runtime_error(str.str());
}
const MWWorld::LiveCellRefBase *getBase() const;
const MWWorld::CellRef& getCellRef() const
{
assert(mRef);
return mRef->mRef;
}
const RefData& getRefData() const
{
assert(mRef);
return mRef->mData;
}
const CellStore *getCell() const
{
assert(mCell);
return mCell;
}
bool isInCell() const
{
return (mContainerStore == 0) && (mCell != 0);
}
const ContainerStore *getContainerStore() const;
///< May return a 0-pointer, if reference is not in a container.
operator const void *();
///< Return a 0-pointer, if Ptr is empty; return a non-0-pointer, if Ptr is not empty
};
inline bool operator== (const Ptr& left, const Ptr& right)
{
return left.mRef==right.mRef;

@ -205,6 +205,11 @@ namespace MWWorld
return mCustomData;
}
const CustomData *RefData::getCustomData() const
{
return mCustomData;
}
bool RefData::hasChanged() const
{
return mChanged;

@ -116,6 +116,8 @@ namespace MWWorld
CustomData *getCustomData();
///< May return a 0-pointer. The ownership of the return data object is not transferred.
const CustomData *getCustomData() const;
bool hasChanged() const;
///< Has this RefData changed since it was originally loaded?
};

@ -2805,7 +2805,7 @@ namespace MWWorld
return false;
}
MWWorld::Ptr World::getClosestMarker( const MWWorld::Ptr &ptr, const std::string &id )
MWWorld::ConstPtr World::getClosestMarker( const MWWorld::Ptr &ptr, const std::string &id )
{
if ( ptr.getCell()->isExterior() ) {
return getClosestMarkerFromExteriorPosition(mPlayer->getLastKnownExteriorPosition(), id);
@ -2817,7 +2817,7 @@ namespace MWWorld
std::set< std::string >checkedCells;
std::set< std::string >currentCells;
std::set< std::string >nextCells;
MWWorld::Ptr closestMarker;
MWWorld::ConstPtr closestMarker;
nextCells.insert( ptr.getCell()->getCell()->mName );
while ( !nextCells.empty() ) {
@ -2861,8 +2861,8 @@ namespace MWWorld
return MWWorld::Ptr();
}
MWWorld::Ptr World::getClosestMarkerFromExteriorPosition( const osg::Vec3f& worldPos, const std::string &id ) {
MWWorld::Ptr closestMarker;
MWWorld::ConstPtr World::getClosestMarkerFromExteriorPosition( const osg::Vec3f& worldPos, const std::string &id ) {
MWWorld::ConstPtr closestMarker;
float closestDistance = std::numeric_limits<float>::max();
std::vector<MWWorld::Ptr> markers;
@ -2887,7 +2887,7 @@ namespace MWWorld
void World::teleportToClosestMarker (const MWWorld::Ptr& ptr,
const std::string& id)
{
MWWorld::Ptr closestMarker = getClosestMarker( ptr, id );
MWWorld::ConstPtr closestMarker = getClosestMarker( ptr, id );
if ( closestMarker.isEmpty() )
{
@ -3047,13 +3047,13 @@ namespace MWWorld
void World::confiscateStolenItems(const Ptr &ptr)
{
MWWorld::Ptr prisonMarker = getClosestMarker( ptr, "prisonmarker" );
MWWorld::ConstPtr prisonMarker = getClosestMarker( ptr, "prisonmarker" );
if ( prisonMarker.isEmpty() )
{
std::cerr << "Failed to confiscate items: no closest prison marker found." << std::endl;
return;
}
std::string prisonName = prisonMarker.mRef->mRef.getDestCell();
std::string prisonName = prisonMarker.getCellRef().getDestCell();
if ( prisonName.empty() )
{
std::cerr << "Failed to confiscate items: prison marker not linked to prison interior" << std::endl;

@ -165,8 +165,8 @@ namespace MWWorld
float feetToGameUnits(float feet);
MWWorld::Ptr getClosestMarker( const MWWorld::Ptr &ptr, const std::string &id );
MWWorld::Ptr getClosestMarkerFromExteriorPosition( const osg::Vec3f& worldPos, const std::string &id );
MWWorld::ConstPtr getClosestMarker( const MWWorld::Ptr &ptr, const std::string &id );
MWWorld::ConstPtr getClosestMarkerFromExteriorPosition( const osg::Vec3f& worldPos, const std::string &id );
public:

Loading…
Cancel
Save