aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-05-28 16:54:23 +0200
committerShauren <shauren.trinity@gmail.com>2024-10-05 17:42:55 +0200
commitd019719289cb8266e581147ef2085bd2f43b2bd2 (patch)
treefb30d591454a6f40ebd04b4dc7085ceb5f66dcec
parent36bd2df79210e44735d0364776ce0c28249acaa0 (diff)
Core/Objects: Unify GameObjectSearcher, UnitSearcher, CreatureSearcher and PlayerSearcher classes into one common implementation
(cherry picked from commit 526b16fea41fb69a302fdebe8a727e175949f04b)
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h269
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiersImpl.h211
2 files changed, 142 insertions, 338 deletions
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index faf245e578b..55f17abea86 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -280,11 +280,11 @@ namespace Trinity
{
uint32 i_mapTypeMask;
uint32 i_phaseMask;
- Check &i_check;
+ Check& i_check;
template<typename Container>
- WorldObjectSearcherBase(WorldObject const* searcher, Container& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
- : Result(result), i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_check(check) { }
+ WorldObjectSearcherBase(uint32 phaseMask, Container& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
+ : Result(result), i_mapTypeMask(mapTypeMask), i_phaseMask(phaseMask), i_check(check) { }
template<class T>
void Visit(GridRefManager<T>&);
@@ -294,22 +294,22 @@ namespace Trinity
struct WorldObjectSearcher : WorldObjectSearcherBase<Check, SearcherFirstObjectResult<WorldObject*>>
{
WorldObjectSearcher(WorldObject const* searcher, WorldObject*& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
- : WorldObjectSearcherBase<Check, SearcherFirstObjectResult<WorldObject*>>(searcher, result, check, mapTypeMask) { }
+ : WorldObjectSearcherBase<Check, SearcherFirstObjectResult<WorldObject*>>(searcher->GetPhaseMask(), result, check, mapTypeMask) { }
};
template<class Check>
struct WorldObjectLastSearcher : WorldObjectSearcherBase<Check, SearcherLastObjectResult<WorldObject*>>
{
- WorldObjectLastSearcher(WorldObject const* searcher, WorldObject* & result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
- : WorldObjectSearcherBase<Check, SearcherLastObjectResult<WorldObject*>>(searcher, result, check, mapTypeMask) { }
+ WorldObjectLastSearcher(WorldObject const* searcher, WorldObject*& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
+ : WorldObjectSearcherBase<Check, SearcherLastObjectResult<WorldObject*>>(searcher->GetPhaseMask(), result, check, mapTypeMask) { }
};
template<class Check>
struct WorldObjectListSearcher : WorldObjectSearcherBase<Check, SearcherContainerResult<WorldObject*>>
{
template<typename Container>
- WorldObjectListSearcher(WorldObject const* searcher, Container& container, Check & check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
- : WorldObjectSearcherBase<Check, SearcherContainerResult<WorldObject*>>(searcher, container, check, mapTypeMask) { }
+ WorldObjectListSearcher(WorldObject const* searcher, Container& container, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
+ : WorldObjectSearcherBase<Check, SearcherContainerResult<WorldObject*>>(searcher->GetPhaseMask(), container, check, mapTypeMask) { }
};
template<class Do>
@@ -322,100 +322,55 @@ namespace Trinity
WorldObjectWorker(WorldObject const* searcher, Do const& _do, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
: i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_do(_do) { }
- void Visit(GameObjectMapType &m)
- {
- if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_GAMEOBJECT))
- return;
- for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- i_do(itr->GetSource());
- }
-
- void Visit(PlayerMapType &m)
- {
- if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_PLAYER))
- return;
- for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- i_do(itr->GetSource());
- }
- void Visit(CreatureMapType &m)
- {
- if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CREATURE))
- return;
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- i_do(itr->GetSource());
- }
-
- void Visit(CorpseMapType &m)
- {
- if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CORPSE))
- return;
- for (CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- i_do(itr->GetSource());
- }
-
- void Visit(DynamicObjectMapType &m)
+ template<class T>
+ void Visit(GridRefManager<T>& m)
{
- if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_DYNAMICOBJECT))
+ if (!(i_mapTypeMask & GridMapTypeMaskForType<T>::value))
return;
- for (DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
+ for (auto itr = m.begin(); itr != m.end(); ++itr)
if (itr->GetSource()->InSamePhase(i_phaseMask))
i_do(itr->GetSource());
}
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
};
// Gameobject searchers
- template<class Check>
- struct GameObjectSearcher
+ template<class Check, class Result>
+ struct GameObjectSearcherBase : Result
{
uint32 i_phaseMask;
- GameObject* &i_object;
Check &i_check;
- GameObjectSearcher(WorldObject const* searcher, GameObject* & result, Check& check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
+ template<typename Container>
+ GameObjectSearcherBase(uint32 phaseMask, Container& result, Check& check)
+ : Result(result), i_phaseMask(phaseMask), i_check(check) { }
- void Visit(GameObjectMapType &m);
+ void Visit(GameObjectMapType& m);
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
};
- // Last accepted by Check GO if any (Check can change requirements at each call)
template<class Check>
- struct GameObjectLastSearcher
+ struct GameObjectSearcher : GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>>
{
- uint32 i_phaseMask;
- GameObject* &i_object;
- Check& i_check;
-
- GameObjectLastSearcher(WorldObject const* searcher, GameObject* & result, Check& check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
-
- void Visit(GameObjectMapType &m);
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ GameObjectSearcher(WorldObject const* searcher, GameObject*& result, Check& check)
+ : GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>>(searcher->GetPhaseMask(), result, check) { }
};
+ // Last accepted by Check GO if any (Check can change requirements at each call)
template<class Check>
- struct GameObjectListSearcher : SearcherContainerResult<GameObject*>
+ struct GameObjectLastSearcher : GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>>
{
- uint32 i_phaseMask;
- Check& i_check;
+ GameObjectLastSearcher(WorldObject const* searcher, GameObject*& result, Check& check)
+ : GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>>(searcher->GetPhaseMask(), result, check) { }
+ };
+ template<class Check>
+ struct GameObjectListSearcher : GameObjectSearcherBase<Check, SearcherContainerResult<GameObject*>>
+ {
template<typename Container>
- GameObjectListSearcher(WorldObject const* searcher, Container& container, Check & check)
- : SearcherContainerResult<GameObject*>(container),
- i_phaseMask(searcher->GetPhaseMask()), i_check(check) { }
-
- void Visit(GameObjectMapType &m);
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ GameObjectListSearcher(WorldObject const* searcher, Container& container, Check& check)
+ : GameObjectSearcherBase<Check, SearcherContainerResult<GameObject*>>(searcher->GetPhaseMask(), container, check) { }
};
template<class Functor>
@@ -440,105 +395,88 @@ namespace Trinity
// Unit searchers
- // First accepted by Check Unit if any
- template<class Check>
- struct UnitSearcher
+ template<class Check, class Result>
+ struct UnitSearcherBase : Result
{
uint32 i_phaseMask;
- Unit* &i_object;
- Check & i_check;
+ Check& i_check;
- UnitSearcher(WorldObject const* searcher, Unit* & result, Check & check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
+ template<typename Container>
+ UnitSearcherBase(uint32 phaseMask, Container& result, Check& check)
+ : Result(result), i_phaseMask(phaseMask), i_check(check) { }
- void Visit(CreatureMapType &m);
- void Visit(PlayerMapType &m);
+ void Visit(CreatureMapType& m) { VisitImpl(m); }
+ void Visit(PlayerMapType& m) { VisitImpl(m); }
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED>&) { }
+
+ private:
+ template<class T> void VisitImpl(GridRefManager<T>& m);
};
- // Last accepted by Check Unit if any (Check can change requirements at each call)
+ // First accepted by Check Unit if any
template<class Check>
- struct UnitLastSearcher
+ struct UnitSearcher : UnitSearcherBase<Check, SearcherFirstObjectResult<Unit*>>
{
- uint32 i_phaseMask;
- Unit* &i_object;
- Check & i_check;
-
- UnitLastSearcher(WorldObject const* searcher, Unit* & result, Check & check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
-
- void Visit(CreatureMapType &m);
- void Visit(PlayerMapType &m);
+ UnitSearcher(WorldObject const* searcher, Unit*& result, Check& check)
+ : UnitSearcherBase<Check, SearcherFirstObjectResult<Unit*>>(searcher->GetPhaseMask(), result, check) { }
+ };
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ // Last accepted by Check Unit if any (Check can change requirements at each call)
+ template<class Check>
+ struct UnitLastSearcher : UnitSearcherBase<Check, SearcherLastObjectResult<Unit*>>
+ {
+ UnitLastSearcher(WorldObject const* searcher, Unit*& result, Check& check)
+ : UnitSearcherBase<Check, SearcherLastObjectResult<Unit*>>(searcher->GetPhaseMask(), result, check) { }
};
// All accepted by Check units if any
template<class Check>
- struct UnitListSearcher : SearcherContainerResult<Unit*>
+ struct UnitListSearcher : UnitSearcherBase<Check, SearcherContainerResult<Unit*>>
{
- uint32 i_phaseMask;
- Check& i_check;
-
template<typename Container>
UnitListSearcher(WorldObject const* searcher, Container& container, Check& check)
- : SearcherContainerResult<Unit*>(container),
- i_phaseMask(searcher->GetPhaseMask()), i_check(check) { }
-
- void Visit(PlayerMapType &m);
- void Visit(CreatureMapType &m);
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ : UnitSearcherBase<Check, SearcherContainerResult<Unit*>>(searcher->GetPhaseMask(), container, check) { }
};
// Creature searchers
- template<class Check>
- struct CreatureSearcher
+ template<class Check, class Result>
+ struct CreatureSearcherBase : Result
{
uint32 i_phaseMask;
- Creature* &i_object;
- Check & i_check;
+ Check& i_check;
- CreatureSearcher(WorldObject const* searcher, Creature* & result, Check & check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
+ template<typename Container>
+ CreatureSearcherBase(uint32 phaseMask, Container& result, Check& check)
+ : Result(result), i_phaseMask(phaseMask), i_check(check) { }
- void Visit(CreatureMapType &m);
+ void Visit(CreatureMapType& m);
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
};
- // Last accepted by Check Creature if any (Check can change requirements at each call)
template<class Check>
- struct CreatureLastSearcher
+ struct CreatureSearcher : CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>>
{
- uint32 i_phaseMask;
- Creature* &i_object;
- Check & i_check;
-
- CreatureLastSearcher(WorldObject const* searcher, Creature* & result, Check & check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
-
- void Visit(CreatureMapType &m);
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ CreatureSearcher(WorldObject const* searcher, Creature*& result, Check& check)
+ : CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>>(searcher->GetPhaseMask(), result, check) { }
};
+ // Last accepted by Check Creature if any (Check can change requirements at each call)
template<class Check>
- struct CreatureListSearcher : SearcherContainerResult<Creature*>
+ struct CreatureLastSearcher : CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>>
{
- uint32 i_phaseMask;
- Check& i_check;
+ CreatureLastSearcher(WorldObject const* searcher, Creature*& result, Check& check)
+ : CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>>(searcher->GetPhaseMask(), result, check) { }
+ };
+ template<class Check>
+ struct CreatureListSearcher : CreatureSearcherBase<Check, SearcherContainerResult<Creature*>>
+ {
template<typename Container>
CreatureListSearcher(WorldObject const* searcher, Container& container, Check & check)
- : SearcherContainerResult<Creature*>(container),
- i_phaseMask(searcher->GetPhaseMask()), i_check(check) { }
-
- void Visit(CreatureMapType &m);
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ : CreatureSearcherBase<Check, SearcherContainerResult<Creature*>>(searcher->GetPhaseMask(), container, check) { }
};
template<class Do>
@@ -562,56 +500,45 @@ namespace Trinity
// Player searchers
- template<class Check>
- struct PlayerSearcher
+ template<class Check, class Result>
+ struct PlayerSearcherBase : Result
{
uint32 i_phaseMask;
- Player* &i_object;
- Check & i_check;
+ Check& i_check;
- PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check)
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { }
+ template<typename Container>
+ PlayerSearcherBase(uint32 phaseMask, Container& result, Check& check)
+ : Result(result), i_phaseMask(phaseMask), i_check(check) { }
- void Visit(PlayerMapType &m);
+ void Visit(PlayerMapType& m);
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
};
template<class Check>
- struct PlayerListSearcher : SearcherContainerResult<Player*>
+ struct PlayerSearcher : PlayerSearcherBase<Check, SearcherFirstObjectResult<Player*>>
{
- uint32 i_phaseMask;
- Check& i_check;
-
- template<typename Container>
- PlayerListSearcher(WorldObject const* searcher, Container& container, Check & check)
- : SearcherContainerResult<Player*>(container),
- i_phaseMask(searcher->GetPhaseMask()), i_check(check) { }
-
- template<typename Container>
- PlayerListSearcher(uint32 phaseMask, Container& container, Check & check)
- : SearcherContainerResult<Player*>(container),
- i_phaseMask(phaseMask), i_check(check) { }
-
- void Visit(PlayerMapType &m);
-
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ PlayerSearcher(WorldObject const* searcher, Player*& result, Check& check)
+ : PlayerSearcherBase<Check, SearcherFirstObjectResult<Player*>>(searcher->GetPhaseMask(), result, check) { }
};
template<class Check>
- struct PlayerLastSearcher
+ struct PlayerLastSearcher : PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>
{
- uint32 i_phaseMask;
- Player* &i_object;
- Check& i_check;
-
- PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check) : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check)
- {
- }
+ PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check)
+ : PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>(searcher->GetPhaseMask(), result, check) { }
+ };
- void Visit(PlayerMapType& m);
+ template<class Check>
+ struct PlayerListSearcher : PlayerSearcherBase<Check, SearcherContainerResult<Player*>>
+ {
+ template<typename Container>
+ PlayerListSearcher(WorldObject const* searcher, Container& container, Check& check)
+ : PlayerSearcherBase<Check, SearcherContainerResult<Player*>>(searcher->GetPhaseMask(), container, check) { }
- template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
+ template<typename Container>
+ PlayerListSearcher(uint32 phaseMask, Container& container, Check& check)
+ : PlayerSearcherBase<Check, SearcherContainerResult<Player*>>(phaseMask, container, check) { }
};
template<class Do>
diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h
index bb417726403..2a852b6c046 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h
@@ -51,11 +51,11 @@ void Trinity::WorldObjectSearcherBase<Check, Result>::Visit(GridRefManager<T>& m
if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
return;
- for (auto itr = m.begin(); itr != m.end(); ++itr)
+ for (GridReference<T> const& ref : m)
{
- if (i_check(itr->GetSource()))
+ if (i_check(ref.GetSource()))
{
- this->Insert(itr->GetSource());
+ this->Insert(ref.GetSource());
if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
return;
@@ -65,217 +65,94 @@ void Trinity::WorldObjectSearcherBase<Check, Result>::Visit(GridRefManager<T>& m
// Gameobject searchers
-template<class Check>
-void Trinity::GameObjectSearcher<Check>::Visit(GameObjectMapType &m)
+template <class Check, class Result>
+void Trinity::GameObjectSearcherBase<Check, Result>::Visit(GameObjectMapType& m)
{
- // already found
- if (i_object)
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
return;
- for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
+ for (GridReference<GameObject> const& ref : m)
{
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
+ if (!ref.GetSource()->InSamePhase(i_phaseMask))
continue;
- if (i_check(itr->GetSource()))
+ if (i_check(ref.GetSource()))
{
- i_object = itr->GetSource();
- return;
- }
- }
-}
+ this->Insert(ref.GetSource());
-template<class Check>
-void Trinity::GameObjectLastSearcher<Check>::Visit(GameObjectMapType &m)
-{
- for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- {
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
- continue;
-
- if (i_check(itr->GetSource()))
- i_object = itr->GetSource();
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
+ return;
+ }
}
}
-template<class Check>
-void Trinity::GameObjectListSearcher<Check>::Visit(GameObjectMapType &m)
-{
- for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- if (i_check(itr->GetSource()))
- Insert(itr->GetSource());
-}
-
// Unit searchers
-template<class Check>
-void Trinity::UnitSearcher<Check>::Visit(CreatureMapType &m)
+template <class Check, class Result>
+template <class T>
+void Trinity::UnitSearcherBase<Check, Result>::VisitImpl(GridRefManager<T>& m)
{
- // already found
- if (i_object)
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
return;
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
+ for (GridReference<T> const& ref : m)
{
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
+ if (!ref.GetSource()->InSamePhase(i_phaseMask))
continue;
- if (i_check(itr->GetSource()))
+ if (i_check(ref.GetSource()))
{
- i_object = itr->GetSource();
- return;
- }
- }
-}
-
-template<class Check>
-void Trinity::UnitSearcher<Check>::Visit(PlayerMapType &m)
-{
- // already found
- if (i_object)
- return;
-
- for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- {
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
- continue;
+ this->Insert(ref.GetSource());
- if (i_check(itr->GetSource()))
- {
- i_object = itr->GetSource();
- return;
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
+ return;
}
}
}
-template<class Check>
-void Trinity::UnitLastSearcher<Check>::Visit(CreatureMapType &m)
-{
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- {
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
- continue;
-
- if (i_check(itr->GetSource()))
- i_object = itr->GetSource();
- }
-}
-
-template<class Check>
-void Trinity::UnitLastSearcher<Check>::Visit(PlayerMapType &m)
-{
- for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- {
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
- continue;
-
- if (i_check(itr->GetSource()))
- i_object = itr->GetSource();
- }
-}
-
-template<class Check>
-void Trinity::UnitListSearcher<Check>::Visit(PlayerMapType &m)
-{
- for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- if (i_check(itr->GetSource()))
- Insert(itr->GetSource());
-}
-
-template<class Check>
-void Trinity::UnitListSearcher<Check>::Visit(CreatureMapType &m)
-{
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- if (i_check(itr->GetSource()))
- Insert(itr->GetSource());
-}
-
// Creature searchers
-template<class Check>
-void Trinity::CreatureSearcher<Check>::Visit(CreatureMapType &m)
+template <class Check, class Result>
+void Trinity::CreatureSearcherBase<Check, Result>::Visit(CreatureMapType& m)
{
- // already found
- if (i_object)
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
return;
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
+ for (GridReference<Creature> const& ref : m)
{
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
+ if (!ref.GetSource()->InSamePhase(i_phaseMask))
continue;
- if (i_check(itr->GetSource()))
+ if (i_check(ref.GetSource()))
{
- i_object = itr->GetSource();
- return;
- }
- }
-}
+ this->Insert(ref.GetSource());
-template<class Check>
-void Trinity::CreatureLastSearcher<Check>::Visit(CreatureMapType &m)
-{
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- {
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
- continue;
-
- if (i_check(itr->GetSource()))
- i_object = itr->GetSource();
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
+ return;
+ }
}
}
-template<class Check>
-void Trinity::CreatureListSearcher<Check>::Visit(CreatureMapType &m)
-{
- for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- if (i_check(itr->GetSource()))
- Insert(itr->GetSource());
-}
-
-template<class Check>
-void Trinity::PlayerListSearcher<Check>::Visit(PlayerMapType &m)
-{
- for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
- if (itr->GetSource()->InSamePhase(i_phaseMask))
- if (i_check(itr->GetSource()))
- Insert(itr->GetSource());
-}
+// Player searchers
-template<class Check>
-void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m)
+template <class Check, class Result>
+void Trinity::PlayerSearcherBase<Check, Result>::Visit(PlayerMapType& m)
{
- // already found
- if (i_object)
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
return;
- for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
+ for (GridReference<Player> const& ref : m)
{
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
+ if (!ref.GetSource()->InSamePhase(i_phaseMask))
continue;
- if (i_check(itr->GetSource()))
+ if (i_check(ref.GetSource()))
{
- i_object = itr->GetSource();
- return;
- }
- }
-}
+ this->Insert(ref.GetSource());
-template<class Check>
-void Trinity::PlayerLastSearcher<Check>::Visit(PlayerMapType& m)
-{
- for (PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr)
- {
- if (!itr->GetSource()->InSamePhase(i_phaseMask))
- continue;
-
- if (i_check(itr->GetSource()))
- i_object = itr->GetSource();
+ if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
+ return;
+ }
}
}