Changeset - r27415:cd7d225c26b7
[Not reviewed]
master
0 6 1
Rubidium - 13 months ago 2023-05-20 09:46:46
rubidium@openttd.org
Codechange: fmt (and std::format) do explicitly not support enums out-of-the-box

That it works for the version we have packaged it pure coincidence, as that is
one of the few versions that due to a bug allow it. So add the appropriate
template specialisations to support it out-of-the-box within OpenTTD.
7 files changed with 50 insertions and 5 deletions:
0 comments (0 inline, 0 general)
CMakeLists.txt
Show inline comments
 
@@ -250,7 +250,7 @@ endif()
 
target_precompile_headers(openttd_lib
 
    PRIVATE
 
    src/stdafx.h
 
    src/3rdparty/fmt/format.h
 
    src/core/format.hpp
 
)
 

	
 
add_subdirectory(${CMAKE_SOURCE_DIR}/bin)
src/console_func.h
Show inline comments
 
@@ -11,7 +11,7 @@
 
#define CONSOLE_FUNC_H
 

	
 
#include "console_type.h"
 
#include "3rdparty/fmt/format.h"
 
#include "core/format.hpp"
 

	
 
/* console modes */
 
extern IConsoleModes _iconsole_mode;
src/core/CMakeLists.txt
Show inline comments
 
@@ -8,6 +8,7 @@ add_files(
 
    endian_func.hpp
 
    endian_type.hpp
 
    enum_type.hpp
 
    format.hpp
 
    geometry_func.cpp
 
    geometry_func.hpp
 
    geometry_type.hpp
src/core/format.hpp
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD 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, version 2.
 
 * OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file format.hpp String formatting functions and helpers. */
 

	
 
#ifndef FORMAT_HPP
 
#define FORMAT_HPP
 

	
 
#include "../3rdparty/fmt/format.h"
 
#include "strong_typedef_type.hpp"
 

	
 
template <typename E, typename Char>
 
struct fmt::formatter<E, Char, std::enable_if_t<std::is_enum<E>::value>> : fmt::formatter<typename std::underlying_type<E>::type> {
 
	using underlying_type = typename std::underlying_type<E>::type;
 
	using parent = typename fmt::formatter<underlying_type>;
 

	
 
	constexpr fmt::format_parse_context::iterator parse(fmt::format_parse_context &ctx) {
 
		return parent::parse(ctx);
 
	}
 

	
 
	fmt::format_context::iterator format(const E &e, format_context &ctx) const {
 
		return parent::format(underlying_type(e), ctx);
 
	}
 
};
 

	
 
template <typename T, typename Char>
 
struct fmt::formatter<T, Char, std::enable_if_t<std::is_base_of<StrongTypedefBase, T>::value>> : fmt::formatter<typename T::Type> {
 
	using underlying_type = typename T::Type;
 
	using parent = typename fmt::formatter<underlying_type>;
 

	
 
	constexpr fmt::format_parse_context::iterator parse(fmt::format_parse_context &ctx) {
 
		return parent::parse(ctx);
 
	}
 

	
 
	fmt::format_context::iterator format(const T &t, format_context &ctx) const {
 
		return parent::format(underlying_type(t), ctx);
 
	}
 
};
 

	
 
#endif /* FORMAT_HPP */
src/debug.h
Show inline comments
 
@@ -12,7 +12,7 @@
 

	
 
#include "cpu.h"
 
#include <chrono>
 
#include "3rdparty/fmt/format.h"
 
#include "core/format.hpp"
 

	
 
/* Debugging messages policy:
 
 * These should be the severities used for direct Debug() calls
src/misc_gui.cpp
Show inline comments
 
@@ -117,7 +117,7 @@ public:
 
#else
 
#	define LANDINFOD_LEVEL 1
 
#endif
 
		Debug(misc, LANDINFOD_LEVEL, "TILE: 0x{:x} ({},{})", tile, TileX(tile), TileY(tile));
 
		Debug(misc, LANDINFOD_LEVEL, "TILE: 0x{:x} ({},{})", (TileIndex)tile, TileX(tile), TileY(tile));
 
		Debug(misc, LANDINFOD_LEVEL, "type   = 0x{:x}", tile.type());
 
		Debug(misc, LANDINFOD_LEVEL, "height = 0x{:x}", tile.height());
 
		Debug(misc, LANDINFOD_LEVEL, "m1     = 0x{:x}", tile.m1());
src/os/unix/font_unix.cpp
Show inline comments
 
@@ -148,7 +148,7 @@ bool SetFallbackFont(FontCacheSettings *
 
			callback->SetFontNames(settings, (const char *)file);
 

	
 
			bool missing = callback->FindMissingGlyphs();
 
			Debug(fontcache, 1, "Font \"{}\" misses{} glyphs", file, missing ? "" : " no");
 
			Debug(fontcache, 1, "Font \"{}\" misses{} glyphs", (char *)file, missing ? "" : " no");
 

	
 
			if (!missing) {
 
				best_weight = value;
0 comments (0 inline, 0 general)