diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-04-26 15:27:48 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-04-26 15:27:48 +0200 |
| commit | 0763844fb604075580e1c84672cb2e4a4fe19cde (patch) | |
| tree | f25e720cce02ac894345a77ff87cfa9fce29ad3c /src/server/game/Phasing | |
| parent | d994707ba1dba71e65a87b6e3ff8a8630c7cc215 (diff) | |
Core/Misc: Improve enum flags with type safe operators
Diffstat (limited to 'src/server/game/Phasing')
| -rw-r--r-- | src/server/game/Phasing/PhaseShift.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Phasing/PhaseShift.h | 12 | ||||
| -rw-r--r-- | src/server/game/Phasing/PhasingHandler.cpp | 10 |
3 files changed, 18 insertions, 12 deletions
diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp index d5791b1dbc0..a93101c5687 100644 --- a/src/server/game/Phasing/PhaseShift.cpp +++ b/src/server/game/Phasing/PhaseShift.cpp @@ -89,7 +89,7 @@ void PhaseShift::Clear() void PhaseShift::ClearPhases() { - Flags &= EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::AlwaysVisible) | PhaseShiftFlags::Inverse; + Flags &= PhaseShiftFlags::AlwaysVisible | PhaseShiftFlags::Inverse; Phases.clear(); NonCosmeticReferences = 0; CosmeticReferences = 0; @@ -161,7 +161,7 @@ void PhaseShift::ModifyPhasesReferences(PhaseContainer::iterator itr, int32 refe if (CosmeticReferences) Flags |= PhaseShiftFlags::NoCosmetic; else - Flags &= ~EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::NoCosmetic); + Flags &= ~PhaseShiftFlags::NoCosmetic; UpdateUnphasedFlag(); } @@ -169,8 +169,8 @@ void PhaseShift::ModifyPhasesReferences(PhaseContainer::iterator itr, int32 refe void PhaseShift::UpdateUnphasedFlag() { - EnumClassFlag<PhaseShiftFlags> unphasedFlag = !Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::Unphased : PhaseShiftFlags::InverseUnphased; - Flags &= ~EnumClassFlag<PhaseShiftFlags>(!Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::InverseUnphased : PhaseShiftFlags::Unphased); + EnumFlag_t<PhaseShiftFlags> unphasedFlag = !Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::Unphased : PhaseShiftFlags::InverseUnphased; + Flags &= ~(!Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::InverseUnphased : PhaseShiftFlags::Unphased); if (NonCosmeticReferences && !DefaultReferences) Flags &= ~unphasedFlag; else diff --git a/src/server/game/Phasing/PhaseShift.h b/src/server/game/Phasing/PhaseShift.h index c30b477c9ac..dc77665e3e6 100644 --- a/src/server/game/Phasing/PhaseShift.h +++ b/src/server/game/Phasing/PhaseShift.h @@ -19,7 +19,7 @@ #define PhaseShift_h__ #include "Define.h" -#include "EnumClassFlag.h" +#include "EnumFlag.h" #include "ObjectGuid.h" #include <boost/container/flat_set.hpp> #include <map> @@ -48,6 +48,12 @@ enum class PhaseFlags : uint16 Personal = 0x2 }; +namespace EnumFlag +{ + template<> struct IsFlag<PhaseShiftFlags> : std::true_type { }; + template<> struct IsFlag<PhaseFlags> : std::true_type { }; +} + class TC_GAME_API PhaseShift { public: @@ -57,7 +63,7 @@ public: : Id(id), Flags(flags), References(0), AreaConditions(conditions) { } uint16 Id; - EnumClassFlag<PhaseFlags> Flags; + EnumFlag_t<PhaseFlags> Flags; int32 References; std::vector<Condition*> const* AreaConditions; bool operator<(PhaseRef const& right) const { return Id < right.Id; } @@ -107,7 +113,7 @@ public: protected: friend class PhasingHandler; - EnumClassFlag<PhaseShiftFlags> Flags; + EnumFlag_t<PhaseShiftFlags> Flags; ObjectGuid PersonalGuid; PhaseContainer Phases; VisibleMapIdContainer VisibleMapIds; diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp index eb582ca0de9..aefaecc57d7 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -202,7 +202,7 @@ void PhasingHandler::OnMapChange(WorldObject* object) object->GetPhaseShift().UiMapPhaseIds.clear(); object->GetSuppressedPhaseShift().VisibleMapIds.clear(); - for (auto visibleMapPair : sObjectMgr->GetTerrainSwaps()) + for (auto const& visibleMapPair : sObjectMgr->GetTerrainSwaps()) { for (TerrainSwapInfo const* visibleMapInfo : visibleMapPair.second) { @@ -438,9 +438,9 @@ void PhasingHandler::InitDbPhaseShift(PhaseShift& phaseShift, uint8 phaseUseFlag phaseShift.ClearPhases(); phaseShift.IsDbPhaseShift = true; - EnumClassFlag<PhaseShiftFlags> flags = PhaseShiftFlags::None; + EnumFlag_t<PhaseShiftFlags> flags = PhaseShiftFlags::None; if (phaseUseFlags & PHASE_USE_FLAGS_ALWAYS_VISIBLE) - flags = flags | PhaseShiftFlags::AlwaysVisible | PhaseShiftFlags::Unphased; + flags |= PhaseShiftFlags::AlwaysVisible | PhaseShiftFlags::Unphased; if (phaseUseFlags & PHASE_USE_FLAGS_INVERSE) flags |= PhaseShiftFlags::Inverse; @@ -506,7 +506,7 @@ void PhasingHandler::SetAlwaysVisible(PhaseShift& phaseShift, bool apply) if (apply) phaseShift.Flags |= PhaseShiftFlags::AlwaysVisible; else - phaseShift.Flags &= ~EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::AlwaysVisible); + phaseShift.Flags &= ~PhaseShiftFlags::AlwaysVisible; } void PhasingHandler::SetInversed(PhaseShift& phaseShift, bool apply) @@ -514,7 +514,7 @@ void PhasingHandler::SetInversed(PhaseShift& phaseShift, bool apply) if (apply) phaseShift.Flags |= PhaseShiftFlags::Inverse; else - phaseShift.Flags &= ~EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::Inverse); + phaseShift.Flags &= PhaseShiftFlags::Inverse; phaseShift.UpdateUnphasedFlag(); } |
