From 6e2ca481e5616f0e0c197f051fb8db6f41db4ed6 Mon Sep 17 00:00:00 2001 From: Ovah Date: Thu, 18 Jul 2019 22:51:23 +0200 Subject: Core/Misc: Add new centralized location for generic predicates (PR #23607) --- src/server/game/Miscellaneous/CommonPredicates.cpp | 23 +++++++ src/server/game/Miscellaneous/CommonPredicates.h | 70 ++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/server/game/Miscellaneous/CommonPredicates.cpp create mode 100644 src/server/game/Miscellaneous/CommonPredicates.h (limited to 'src') 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 + * + * 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 . + */ + +#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 + * + * 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 . + */ + +#ifndef TRINITY_COMMONPREDICATES_H +#define TRINITY_COMMONPREDICATES_H + +#include "Define.h" +#include + +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 + class TC_GAME_API Inverter + { + public: + Inverter(PRED&& p) : _child(std::move(p)) { } + + template + bool operator()(Args&&... args) + { + return !_child(std::forward(args)...); + } + + template + bool operator()(Args&&... args) const + { + return !_child(std::forward(args)...); + } + + private: + PRED _child; + }; + + template + /// Inverts the given predicate to return the opposite result + Inverter Invert(PRED&& p) { return Inverter(std::forward(p)); } + } +} + + +#endif //TRINITY_COMMONPREDICATES_H -- cgit v1.2.3