diff options
author | Ovah <dreadkiller@gmx.de> | 2019-07-18 22:51:23 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-16 22:05:20 +0100 |
commit | 879e7094b78e90ebec607b4a169d613aed1b295c (patch) | |
tree | 7cf4576d582ad1c057f6307394be3bc2f0d1f4fc | |
parent | 17bf908847e56e511338f35921685ee1933d39b5 (diff) |
Core/Misc: Add new centralized location for generic predicates (PR #23607)
(cherry picked from commit 6e2ca481e5616f0e0c197f051fb8db6f41db4ed6)
-rw-r--r-- | src/server/game/Miscellaneous/CommonPredicates.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/CommonPredicates.h | 70 |
2 files changed, 93 insertions, 0 deletions
diff --git a/src/server/game/Miscellaneous/CommonPredicates.cpp b/src/server/game/Miscellaneous/CommonPredicates.cpp new file mode 100644 index 00000000000..d69620f75d1 --- /dev/null +++ b/src/server/game/Miscellaneous/CommonPredicates.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "CommonPredicates.h" +#include "Common.h" +#include "Unit.h" +#include "SharedDefines.h" + +Trinity::Predicates::IsVictimOf::IsVictimOf(Unit const* attacker) : _victim(attacker ? attacker->GetVictim() : nullptr) { } diff --git a/src/server/game/Miscellaneous/CommonPredicates.h b/src/server/game/Miscellaneous/CommonPredicates.h new file mode 100644 index 00000000000..3ca2d1652c7 --- /dev/null +++ b/src/server/game/Miscellaneous/CommonPredicates.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITY_COMMONPREDICATES_H +#define TRINITY_COMMONPREDICATES_H + +#include "Define.h" +#include <utility> + +class Unit; +class WorldObject; + +namespace Trinity +{ + namespace Predicates + { + /// Only returns true for the given attacker's current victim, if any + class TC_GAME_API IsVictimOf + { + public: + IsVictimOf(Unit const* attacker); + bool operator()(WorldObject const* obj) const { return obj && (_victim == obj); } + private: + WorldObject const* _victim; + }; + + template <typename PRED> + class TC_GAME_API Inverter + { + public: + Inverter(PRED&& p) : _child(std::move(p)) { } + + template <typename... Args> + bool operator()(Args&&... args) + { + return !_child(std::forward<Args>(args)...); + } + + template <typename... Args> + bool operator()(Args&&... args) const + { + return !_child(std::forward<Args>(args)...); + } + + private: + PRED _child; + }; + + template <typename PRED> + /// Inverts the given predicate to return the opposite result + Inverter<PRED> Invert(PRED&& p) { return Inverter<PRED>(std::forward<PRED>(p)); } + } +} + + +#endif //TRINITY_COMMONPREDICATES_H |