diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-12-10 19:11:10 +0100 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-02-06 21:12:27 -0300 |
commit | bf2121680f1aa0065ed2858198e2f21998edd0f4 (patch) | |
tree | e66d9af2ada8b31ad1a8201a956ee057a9b7fd2f /src | |
parent | 4e7679d8bdbe328476192478104224cd342170ac (diff) |
Core/Misc: Added regex compatibility layer to fall back to boost::regex for really old compiler
(cherry picked from commit b6f1f8405f57e3b65c3b838ea87141716023bc72)
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Utilities/Regex.h | 39 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCStores.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptReloadMgr.cpp | 8 |
3 files changed, 53 insertions, 14 deletions
diff --git a/src/common/Utilities/Regex.h b/src/common/Utilities/Regex.h new file mode 100644 index 00000000000..1d1ebca1b17 --- /dev/null +++ b/src/common/Utilities/Regex.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2008-2017 TrinityCore <http://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 TrinityCore_Regex_h__ +#define TrinityCore_Regex_h__ + +#ifndef TC_HAS_BROKEN_WSTRING_REGEX +#include <regex> +#define TC_REGEX_NAMESPACE std +#else +#include <boost/regex.hpp> +#define TC_REGEX_NAMESPACE boost +#endif + +// regex compatibility layer, required for clang building with libstdc++-4.9 +namespace Trinity +{ + using regex = TC_REGEX_NAMESPACE :: regex; + using wregex = TC_REGEX_NAMESPACE :: wregex; + + using :: TC_REGEX_NAMESPACE :: regex_match; + using :: TC_REGEX_NAMESPACE :: regex_search; +} + +#endif // TrinityCore_Regex_h__ diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 11fde0485ec..e4db97cce4c 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -24,8 +24,8 @@ #include "DBCfmt.h" #include "Timer.h" #include "ObjectDefines.h" +#include "Regex.h" -#include <regex> #include <map> typedef std::map<uint16, uint32> AreaFlagByAreaID; @@ -145,7 +145,7 @@ DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt); DBCStorage<NamesProfanityEntry> sNamesProfanityStore(NamesProfanityEntryfmt); DBCStorage<NamesReservedEntry> sNamesReservedStore(NamesReservedEntryfmt); -typedef std::array<std::vector<std::wregex>, TOTAL_LOCALES> NameValidationRegexContainer; +typedef std::array<std::vector<Trinity::wregex>, TOTAL_LOCALES> NameValidationRegexContainer; NameValidationRegexContainer NamesProfaneValidators; NameValidationRegexContainer NamesReservedValidators; @@ -414,10 +414,10 @@ void LoadDBCStores(const std::string& dataPath) ASSERT(Utf8toWStr(namesProfanity->Name, wname)); if (namesProfanity->Language != -1) - NamesProfaneValidators[namesProfanity->Language].emplace_back(wname, std::regex::icase | std::regex::optimize); + NamesProfaneValidators[namesProfanity->Language].emplace_back(wname, Trinity::regex::icase | Trinity::regex::optimize); else for (uint32 i = 0; i < TOTAL_LOCALES; ++i) - NamesProfaneValidators[i].emplace_back(wname, std::regex::icase | std::regex::optimize); + NamesProfaneValidators[i].emplace_back(wname, Trinity::regex::icase | Trinity::regex::optimize); } for (uint32 i = 0; i < sNamesReservedStore.GetNumRows(); ++i) @@ -431,10 +431,10 @@ void LoadDBCStores(const std::string& dataPath) ASSERT(Utf8toWStr(namesReserved->Name, wname)); if (namesReserved->Language != -1) - NamesReservedValidators[namesReserved->Language].emplace_back(wname, std::regex::icase | std::regex::optimize); + NamesReservedValidators[namesReserved->Language].emplace_back(wname, Trinity::regex::icase | Trinity::regex::optimize); else for (uint32 i = 0; i < TOTAL_LOCALES; ++i) - NamesReservedValidators[i].emplace_back(wname, std::regex::icase | std::regex::optimize); + NamesReservedValidators[i].emplace_back(wname, Trinity::regex::icase | Trinity::regex::optimize); } @@ -1011,13 +1011,13 @@ ResponseCodes ValidateName(std::wstring const& name, LocaleConstant locale) if (locale >= TOTAL_LOCALES) return RESPONSE_FAILURE; - for (std::wregex const& regex : NamesProfaneValidators[locale]) - if (std::regex_search(name, regex)) + for (Trinity::wregex const& regex : NamesProfaneValidators[locale]) + if (Trinity::regex_search(name, regex)) return CHAR_NAME_PROFANE; // regexes at TOTAL_LOCALES are loaded from NamesReserved which is not locale specific - for (std::wregex const& regex : NamesReservedValidators[locale]) - if (std::regex_search(name, regex)) + for (Trinity::wregex const& regex : NamesReservedValidators[locale]) + if (Trinity::regex_search(name, regex)) return CHAR_NAME_RESERVED; return CHAR_NAME_SUCCESS; diff --git a/src/server/game/Scripting/ScriptReloadMgr.cpp b/src/server/game/Scripting/ScriptReloadMgr.cpp index 2a2f4f88576..b26ca8e0540 100644 --- a/src/server/game/Scripting/ScriptReloadMgr.cpp +++ b/src/server/game/Scripting/ScriptReloadMgr.cpp @@ -308,12 +308,12 @@ Optional<std::shared_ptr<ScriptModule>> static bool HasValidScriptModuleName(std::string const& name) { // Detects scripts_NAME.dll's / .so's - static std::regex const regex( + static Trinity::regex const regex( Trinity::StringFormat("^%s[sS]cripts_[a-zA-Z0-9_]+\\.%s$", GetSharedLibraryPrefix(), GetSharedLibraryExtension())); - return std::regex_match(name, regex); + return Trinity::regex_match(name, regex); } /// File watcher responsible for watching shared libraries @@ -1529,8 +1529,8 @@ void LibraryUpdateListener::handleFileAction(efsw::WatchID watchid, std::string /// Returns true when the given path has a known C++ file extension static bool HasCXXSourceFileExtension(fs::path const& path) { - static std::regex const regex("^\\.(h|hpp|c|cc|cpp)$"); - return std::regex_match(path.extension().generic_string(), regex); + static Trinity::regex const regex("^\\.(h|hpp|c|cc|cpp)$"); + return Trinity::regex_match(path.extension().generic_string(), regex); } SourceUpdateListener::SourceUpdateListener(fs::path path, std::string script_module_name) |