diff options
Diffstat (limited to 'src/common/Utilities/StringFormat.h')
-rw-r--r-- | src/common/Utilities/StringFormat.h | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/src/common/Utilities/StringFormat.h b/src/common/Utilities/StringFormat.h index 9e7bd1b61c..77fd4f176c 100644 --- a/src/common/Utilities/StringFormat.h +++ b/src/common/Utilities/StringFormat.h @@ -1,43 +1,33 @@ /* + * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * 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 __STRING_FORMAT_H__ #define __STRING_FORMAT_H__ -#include <memory> -#include <iostream> -#include <string> -#include <cstdio> +#include "fmt/printf.h" -namespace Trinity +namespace ACORE { - /// Default TC string format function. - template<typename... Args> - inline std::string StringFormat(const std::string& format, Args const&... args) + /// Default AC string format function. + template<typename Format, typename... Args> + inline std::string StringFormat(Format&& fmt, Args&& ... args) { - size_t size = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1; // Extra space for '\0' - unique_ptr<char[]> buf(new char[size]); - std::snprintf(buf.get(), size, format.c_str(), args ...); - return std::string(buf.get(), buf.get() + size - 1); // We don + try + { + return fmt::sprintf(std::forward<Format>(fmt), std::forward<Args>(args)...); + } + catch (const fmt::format_error& formatError) + { + std::string error = "An error occurred formatting string \"" + std::string(fmt) + "\" : " + std::string(formatError.what()); + return error; + } } /// Returns true if the given char pointer is null. - inline bool IsFormatEmptyOrNull(const char* fmt) + inline bool IsFormatEmptyOrNull(char const* fmt) { return fmt == nullptr; } |