Move some fmt related code and allow formatting of std::filesystem::path
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#define SPDLOG_DEBUG_ON
|
||||
#define SPDLOG_TRACE_ON
|
||||
|
||||
#include "Extensions/FmtFormatter.hpp"
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
namespace OpenVulkano
|
||||
|
||||
45
openVulkanoCpp/Extensions/FmtFormatter.hpp
Normal file
45
openVulkanoCpp/Extensions/FmtFormatter.hpp
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if __has_include("fmt/format.h")
|
||||
#include <fmt/format.h>
|
||||
#elif __has_include("spdlog/fmt/fmt.h")
|
||||
#include <spdlog/fmt/fmt.h>
|
||||
#else
|
||||
#error "Failed to find fmt include"
|
||||
#endif
|
||||
#include "Math/ByteSize.hpp"
|
||||
#include <filesystem>
|
||||
|
||||
template<> struct fmt::formatter<OpenVulkano::ByteSize>
|
||||
{
|
||||
template<typename ParseContext> constexpr auto parse(ParseContext& ctx)
|
||||
{
|
||||
return ctx.begin();
|
||||
}
|
||||
|
||||
template<typename FormatContext> auto format(const OpenVulkano::ByteSize& bs, FormatContext& ctx) const
|
||||
{
|
||||
return fmt::format_to(ctx.out(), "{}", bs.Format());
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct fmt::formatter<std::filesystem::path> : fmt::formatter<std::string>
|
||||
{
|
||||
template<typename PATH = std::filesystem::path>
|
||||
auto format(const std::filesystem::path& path, format_context& ctx) const requires std::is_same_v<std::filesystem::path::value_type, char>
|
||||
{
|
||||
return formatter<std::string>::format(path.native(), ctx);
|
||||
}
|
||||
|
||||
template<typename PATH = std::filesystem::path>
|
||||
auto format(const std::filesystem::path& path, format_context& ctx) const requires std::is_same_v<std::filesystem::path::value_type, wchar_t>
|
||||
{
|
||||
return formatter<std::string>::format(path.string(), ctx);
|
||||
}
|
||||
};
|
||||
@@ -11,22 +11,13 @@
|
||||
#include <sstream>
|
||||
#include <regex>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#if __has_include("fmt/format.h")
|
||||
#include <fmt/format.h>
|
||||
#elif __has_include("spdlog/fmt/fmt.h")
|
||||
#include <spdlog/fmt/fmt.h>
|
||||
#else
|
||||
#warning "Failed to find fmt include"
|
||||
#define OVKMBS_FMT_MISSING
|
||||
#endif
|
||||
#include <magic_enum.hpp>
|
||||
|
||||
namespace OpenVulkano
|
||||
{
|
||||
namespace ByteSizeUnitHelper
|
||||
{
|
||||
constexpr std::array<uint64_t, 13> BuildFactors()
|
||||
consteval std::array<uint64_t, 13> BuildFactors()
|
||||
{
|
||||
std::array<uint64_t, 13> factors = { 1 };
|
||||
for(uint64_t j = 1, i = 10; i < 70; i += 10, j++)
|
||||
@@ -40,7 +31,7 @@ namespace OpenVulkano
|
||||
return factors;
|
||||
}
|
||||
|
||||
constexpr std::array<double, 13> BuildDivisors()
|
||||
consteval std::array<double, 13> BuildDivisors()
|
||||
{
|
||||
std::array<uint64_t, 13> factors = BuildFactors();
|
||||
std::array<double, 13> divs{{1}};
|
||||
@@ -59,7 +50,7 @@ namespace OpenVulkano
|
||||
public:
|
||||
enum Unit : int { B = 0, kiB, MiB, GiB, TiB, PiB, EiB, kB, MB, GB, TB, PB, EB };
|
||||
|
||||
constexpr ByteSizeUnit(Unit unit) : unit(unit) {}
|
||||
constexpr ByteSizeUnit(const Unit unit) : unit(unit) {}
|
||||
|
||||
[[nodiscard]] constexpr uint64_t GetFactor() const { return FACTORS[unit]; }
|
||||
|
||||
@@ -97,10 +88,10 @@ namespace OpenVulkano
|
||||
uint64_t bytes;
|
||||
|
||||
public:
|
||||
constexpr ByteSize(uint64_t size = 0) : bytes(size) {}
|
||||
constexpr ByteSize(const uint64_t size = 0) : bytes(size) {}
|
||||
|
||||
template<typename T>
|
||||
constexpr ByteSize(T size, ByteSizeUnit unit)
|
||||
constexpr ByteSize(const T size, const ByteSizeUnit unit)
|
||||
: bytes(size * unit.GetFactor()) {}
|
||||
|
||||
ByteSize(const std::string& str)
|
||||
@@ -114,7 +105,7 @@ namespace OpenVulkano
|
||||
|
||||
std::ostream& operator<<(std::ostream& os) const { return FormatStream(os); }
|
||||
|
||||
std::ostream& FormatStream(std::ostream& oss, bool si = false) const
|
||||
std::ostream& FormatStream(std::ostream& oss, const bool si = false) const
|
||||
{
|
||||
oss << std::setprecision(3);
|
||||
auto unit = ByteSizeUnit::GetClosestUnit(bytes, si);
|
||||
@@ -122,7 +113,7 @@ namespace OpenVulkano
|
||||
return oss;
|
||||
}
|
||||
|
||||
[[nodiscard]] std::string Format(bool si = false) const
|
||||
[[nodiscard]] std::string Format(const bool si = false) const
|
||||
{
|
||||
std::ostringstream oss;
|
||||
FormatStream(oss, si);
|
||||
@@ -145,44 +136,30 @@ namespace OpenVulkano
|
||||
ByteSize& operator -=(const ByteSize other) { bytes -= other.bytes; return *this; }
|
||||
};
|
||||
|
||||
inline constexpr ByteSize operator"" _kiB(long double num) { return { num, ByteSizeUnit::kiB }; }
|
||||
inline constexpr ByteSize operator"" _MiB(long double num) { return { num, ByteSizeUnit::MiB }; }
|
||||
inline constexpr ByteSize operator"" _GiB(long double num) { return { num, ByteSizeUnit::GiB }; }
|
||||
inline constexpr ByteSize operator"" _TiB(long double num) { return { num, ByteSizeUnit::TiB }; }
|
||||
inline constexpr ByteSize operator"" _PiB(long double num) { return { num, ByteSizeUnit::PiB }; }
|
||||
inline constexpr ByteSize operator"" _EiB(long double num) { return { num, ByteSizeUnit::EiB }; }
|
||||
inline constexpr ByteSize operator"" _kB(long double num) { return { num, ByteSizeUnit::kB }; }
|
||||
inline constexpr ByteSize operator"" _MB(long double num) { return { num, ByteSizeUnit::MB }; }
|
||||
inline constexpr ByteSize operator"" _GB(long double num) { return { num, ByteSizeUnit::GB }; }
|
||||
inline constexpr ByteSize operator"" _TB(long double num) { return { num, ByteSizeUnit::TB }; }
|
||||
inline constexpr ByteSize operator"" _PB(long double num) { return { num, ByteSizeUnit::PB }; }
|
||||
inline constexpr ByteSize operator"" _EB(long double num) { return { num, ByteSizeUnit::EB }; }
|
||||
inline constexpr ByteSize operator"" _B(unsigned long long int num) { return { num }; }
|
||||
inline constexpr ByteSize operator"" _kiB(unsigned long long int num) { return { num << 10 }; }
|
||||
inline constexpr ByteSize operator"" _MiB(unsigned long long int num) { return { num << 20 }; }
|
||||
inline constexpr ByteSize operator"" _GiB(unsigned long long int num) { return { num << 30 }; }
|
||||
inline constexpr ByteSize operator"" _TiB(unsigned long long int num) { return { num << 40 }; }
|
||||
inline constexpr ByteSize operator"" _PiB(unsigned long long int num) { return { num << 50 }; }
|
||||
inline constexpr ByteSize operator"" _EiB(unsigned long long int num) { return { num << 60 }; }
|
||||
inline constexpr ByteSize operator"" _kB(unsigned long long int num) { return { num, ByteSizeUnit::kB }; }
|
||||
inline constexpr ByteSize operator"" _MB(unsigned long long int num) { return { num, ByteSizeUnit::MB }; }
|
||||
inline constexpr ByteSize operator"" _GB(unsigned long long int num) { return { num, ByteSizeUnit::GB }; }
|
||||
inline constexpr ByteSize operator"" _TB(unsigned long long int num) { return { num, ByteSizeUnit::TB }; }
|
||||
inline constexpr ByteSize operator"" _PB(unsigned long long int num) { return { num, ByteSizeUnit::PB }; }
|
||||
inline constexpr ByteSize operator"" _EB(unsigned long long int num) { return { num, ByteSizeUnit::EB }; }
|
||||
constexpr ByteSize operator"" _kiB(long double num) { return { num, ByteSizeUnit::kiB }; }
|
||||
constexpr ByteSize operator"" _MiB(long double num) { return { num, ByteSizeUnit::MiB }; }
|
||||
constexpr ByteSize operator"" _GiB(long double num) { return { num, ByteSizeUnit::GiB }; }
|
||||
constexpr ByteSize operator"" _TiB(long double num) { return { num, ByteSizeUnit::TiB }; }
|
||||
constexpr ByteSize operator"" _PiB(long double num) { return { num, ByteSizeUnit::PiB }; }
|
||||
constexpr ByteSize operator"" _EiB(long double num) { return { num, ByteSizeUnit::EiB }; }
|
||||
constexpr ByteSize operator"" _kB(long double num) { return { num, ByteSizeUnit::kB }; }
|
||||
constexpr ByteSize operator"" _MB(long double num) { return { num, ByteSizeUnit::MB }; }
|
||||
constexpr ByteSize operator"" _GB(long double num) { return { num, ByteSizeUnit::GB }; }
|
||||
constexpr ByteSize operator"" _TB(long double num) { return { num, ByteSizeUnit::TB }; }
|
||||
constexpr ByteSize operator"" _PB(long double num) { return { num, ByteSizeUnit::PB }; }
|
||||
constexpr ByteSize operator"" _EB(long double num) { return { num, ByteSizeUnit::EB }; }
|
||||
constexpr ByteSize operator"" _B(unsigned long long int num) { return { num }; }
|
||||
constexpr ByteSize operator"" _kiB(unsigned long long int num) { return { num << 10 }; }
|
||||
constexpr ByteSize operator"" _MiB(unsigned long long int num) { return { num << 20 }; }
|
||||
constexpr ByteSize operator"" _GiB(unsigned long long int num) { return { num << 30 }; }
|
||||
constexpr ByteSize operator"" _TiB(unsigned long long int num) { return { num << 40 }; }
|
||||
constexpr ByteSize operator"" _PiB(unsigned long long int num) { return { num << 50 }; }
|
||||
constexpr ByteSize operator"" _EiB(unsigned long long int num) { return { num << 60 }; }
|
||||
constexpr ByteSize operator"" _kB(unsigned long long int num) { return { num, ByteSizeUnit::kB }; }
|
||||
constexpr ByteSize operator"" _MB(unsigned long long int num) { return { num, ByteSizeUnit::MB }; }
|
||||
constexpr ByteSize operator"" _GB(unsigned long long int num) { return { num, ByteSizeUnit::GB }; }
|
||||
constexpr ByteSize operator"" _TB(unsigned long long int num) { return { num, ByteSizeUnit::TB }; }
|
||||
constexpr ByteSize operator"" _PB(unsigned long long int num) { return { num, ByteSizeUnit::PB }; }
|
||||
constexpr ByteSize operator"" _EB(unsigned long long int num) { return { num, ByteSizeUnit::EB }; }
|
||||
}
|
||||
|
||||
#ifndef OVKMBS_FMT_MISSING
|
||||
template<> struct fmt::formatter<OpenVulkano::ByteSize>
|
||||
{
|
||||
template<typename ParseContext> constexpr auto parse(ParseContext& ctx)
|
||||
{
|
||||
return ctx.begin();
|
||||
}
|
||||
|
||||
template<typename FormatContext> auto format(const OpenVulkano::ByteSize& bs, FormatContext& ctx)
|
||||
{
|
||||
return fmt::format_to(ctx.out(), "{}", bs.Format());
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -6,17 +6,10 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Extensions/FmtFormatter.hpp"
|
||||
#include <imgui.h>
|
||||
#include <string>
|
||||
|
||||
#if __has_include("fmt/format.h")
|
||||
#include <fmt/format.h>
|
||||
#elif __has_include("spdlog/fmt/fmt.h")
|
||||
#include <spdlog/fmt/fmt.h>
|
||||
#else
|
||||
#error "Failed to find fmt include"
|
||||
#endif
|
||||
|
||||
namespace ImGui
|
||||
{
|
||||
template <typename... Args>
|
||||
|
||||
Reference in New Issue
Block a user