22# include <type_traits>
27# if FMT_CPLUSPLUS >= 201703L
28# if FMT_HAS_INCLUDE(<filesystem>) && \
29 (!defined(FMT_CPP_LIB_FILESYSTEM) || FMT_CPP_LIB_FILESYSTEM != 0)
32# if FMT_HAS_INCLUDE(<variant>)
35# if FMT_HAS_INCLUDE(<optional>)
41# if FMT_CPLUSPLUS > 201703L && FMT_HAS_INCLUDE(<source_location>)
42# include <source_location>
44# if FMT_CPLUSPLUS > 202002L && FMT_HAS_INCLUDE(<expected>)
49#if FMT_HAS_INCLUDE(<version>)
54#if FMT_HAS_INCLUDE(<cxxabi.h>) || defined(__GLIBCXX__)
58# ifndef __GABIXX_CXXABI_H__
59# define FMT_HAS_ABI_CXA_DEMANGLE
63#ifdef FMT_CPP_LIB_FILESYSTEM
65#elif defined(__cpp_lib_filesystem)
66# define FMT_CPP_LIB_FILESYSTEM __cpp_lib_filesystem
68# define FMT_CPP_LIB_FILESYSTEM 0
71#ifdef FMT_CPP_LIB_VARIANT
73#elif defined(__cpp_lib_variant)
74# define FMT_CPP_LIB_VARIANT __cpp_lib_variant
76# define FMT_CPP_LIB_VARIANT 0
82#if FMT_CPP_LIB_FILESYSTEM
84template <
typename Char,
typename PathChar>
85auto get_path_string(
const std::filesystem::path&
p,
86 const std::basic_string<PathChar>& native) {
87 if constexpr (std::is_same_v<Char, char> && std::is_same_v<PathChar, wchar_t>)
90 return p.string<Char>();
93template <
typename Char,
typename PathChar>
95 const std::filesystem::path&
p,
96 const std::basic_string<PathChar>& native) {
97 if constexpr (std::is_same_v<Char, char> &&
98 std::is_same_v<PathChar, wchar_t>) {
103 }
else if constexpr (std::is_same_v<Char, PathChar>) {
105 std::back_inserter(quoted), native);
113#if defined(__cpp_lib_expected) || FMT_CPP_LIB_VARIANT
115template <
typename Char,
typename OutputIt,
typename T,
typename FormatContext>
116auto write_escaped_alternative(OutputIt out,
const T& v, FormatContext& ctx)
118 if constexpr (has_to_string_view<T>::value)
128#if FMT_CPP_LIB_VARIANT
130template <
typename>
struct is_variant_like_ : std::false_type {};
131template <
typename... Types>
132struct is_variant_like_<
std::variant<Types...>> : std::true_type {};
134template <
typename Variant,
typename Char>
class is_variant_formattable {
135 template <
size_t... Is>
136 static auto check(std::index_sequence<Is...>) -> std::conjunction<
140 static constexpr bool value =
decltype(check(
141 std::make_index_sequence<std::variant_size<Variant>::value>()))::value;
147inline auto normalize_libcxx_inline_namespaces(
string_view demangled_name_view,
157 char* to = begin + 5;
158 for (
const char *
from = to, *end = begin + demangled_name_view.
size();
161 if (
from[0] ==
'_' &&
from[1] ==
'_') {
162 const char* next =
from + 1;
163 while (next < end && *next !=
':') next++;
164 if (next[0] ==
':' && next[1] ==
':') {
173 return demangled_name_view;
176template <
class OutputIt>
177auto normalize_msvc_abi_name(
string_view abi_name_view, OutputIt out)
180 for (
size_t i = 0; i < demangled_name.
size(); ++i) {
181 auto sub = demangled_name;
183 if (sub.starts_with(
"enum ")) {
187 if (sub.starts_with(
"class ") || sub.starts_with(
"union ")) {
191 if (sub.starts_with(
"struct ")) {
195 if (*sub.begin() !=
' ') *out++ = *sub.begin();
200template <
typename OutputIt>
201auto write_demangled_name(OutputIt out,
const std::type_info& ti) -> OutputIt {
202# ifdef FMT_HAS_ABI_CXA_DEMANGLE
205 std::unique_ptr<char, void (*)(
void*)> demangled_name_ptr(
206 abi::__cxa_demangle(ti.name(),
nullptr, &size, &status), &
free);
209 if (demangled_name_ptr) {
210 demangled_name_view = normalize_libcxx_inline_namespaces(
211 demangled_name_ptr.get(), demangled_name_ptr.get());
216# elif FMT_MSC_VERSION && defined(_MSVC_STL_UPDATE)
217 return normalize_msvc_abi_name(ti.name(), out);
218# elif FMT_MSC_VERSION && defined(_LIBCPP_VERSION)
220 std::string name_copy(demangled_name.
size(),
'\0');
223 name_copy.erase(normalize_msvc_abi_name(demangled_name, name_copy.
begin()),
229 normalize_libcxx_inline_namespaces(name_copy, name_copy.data());
238template <
typename T,
typename Enable =
void>
246 static constexpr bool value = std::is_convertible<T, bool>::value &&
247 std::is_nothrow_assignable<T, bool>::value &&
253#if defined(_LIBCPP_VERSION) && !defined(FMT_IMPORT_STD)
256 static constexpr bool value =
true;
260template <
typename T,
typename Enable =
void>
266template <
typename T,
typename Enable =
void>
275template <
typename T,
typename Deleter>
276auto ptr(
const std::unique_ptr<T, Deleter>&
p) ->
const void* {
279template <
typename T>
auto ptr(
const std::shared_ptr<T>&
p) ->
const void* {
283#if FMT_CPP_LIB_FILESYSTEM
285template <
typename Char>
struct formatter<
std::filesystem::path, Char> {
288 detail::arg_ref<Char> width_ref_;
296 auto it = ctx.
begin(), end = ctx.
end();
297 if (it == end)
return it;
300 if (it == end)
return it;
303 if ((c >=
'0' && c <=
'9') || c ==
'{')
305 if (it != end && *it ==
'?') {
313 template <
typename FormatContext>
314 auto format(
const std::filesystem::path&
p, FormatContext& ctx)
const {
317 !path_type_ ?
p.native()
318 :
p.generic_string<std::filesystem::path::value_type>();
323 auto s = detail::get_path_string<Char>(
p, path_string);
324 return detail::write(ctx.out(), basic_string_view<Char>(s), specs);
326 auto quoted = basic_memory_buffer<Char>();
327 detail::write_escaped_path(quoted,
p, path_string);
329 basic_string_view<Char>(quoted.data(), quoted.size()),
334class path :
public std::filesystem::path {
336 auto display_string() const -> std::
string {
337 const std::filesystem::path& base = *
this;
340 auto system_string() const -> std::
string {
return string(); }
342 auto generic_display_string() const -> std::
string {
343 const std::filesystem::path& base = *
this;
346 auto generic_system_string() const -> std::
string {
return generic_string(); }
351template <
size_t N,
typename Char>
357 const std::bitset<N>& bs;
359 template <
typename OutputIt>
361 for (
auto pos = N; pos > 0; --pos)
368 template <
typename FormatContext>
369 auto format(
const std::bitset<N>& bs, FormatContext& ctx)
const
370 ->
decltype(ctx.out()) {
375template <
typename Char>
378#ifdef __cpp_lib_optional
379template <
typename T,
typename Char>
381 std::enable_if_t<is_formattable<T, Char>::value>> {
387 static constexpr basic_string_view<Char>
none =
388 detail::string_literal<Char,
'n',
'o',
'n',
'e'>{};
393 return underlying_.parse(ctx);
396 template <
typename FormatContext>
397 auto format(
const std::optional<T>& opt, FormatContext& ctx)
const
398 ->
decltype(ctx.out()) {
401 auto out = ctx.out();
404 out = underlying_.format(*opt, ctx);
410#ifdef __cpp_lib_expected
411template <
typename T,
typename E,
typename Char>
413 std::enable_if_t<(std::is_void<T>::value ||
414 is_formattable<T, Char>::value) &&
415 is_formattable<E, Char>::value>> {
416 FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) ->
const Char* {
420 template <
typename FormatContext>
421 auto format(
const std::expected<T, E>& value, FormatContext& ctx)
const
422 ->
decltype(ctx.out()) {
423 auto out = ctx.out();
425 if (value.has_value()) {
427 if constexpr (!std::is_void<T>::value)
428 out = detail::write_escaped_alternative<Char>(out, *value, ctx);
431 out = detail::write_escaped_alternative<Char>(out, value.error(), ctx);
439#ifdef __cpp_lib_source_location
443 template <
typename FormatContext>
444 auto format(
const std::source_location& loc, FormatContext& ctx)
const
445 ->
decltype(ctx.out()) {
446 auto out = ctx.out();
459#if FMT_CPP_LIB_VARIANT
461template <
typename T>
struct is_variant_like {
462 static constexpr bool value = detail::is_variant_like_<T>::value;
466 FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) ->
const Char* {
470 template <
typename FormatContext>
471 auto format(
const std::monostate&, FormatContext& ctx)
const
472 ->
decltype(ctx.out()) {
477template <
typename Variant,
typename Char>
480 is_variant_like<Variant>,
481 detail::is_variant_formattable<Variant, Char>>>> {
482 FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) ->
const Char* {
486 template <
typename FormatContext>
487 auto format(
const Variant& value, FormatContext& ctx)
const
488 ->
decltype(ctx.out()) {
489 auto out = ctx.out();
495 out = detail::write_escaped_alternative<Char>(out, v, ctx);
499 FMT_CATCH(
const std::bad_variant_access&) {
519 auto it = ctx.
begin(), end = ctx.
end();
520 if (it == end)
return it;
525 if (it != end && ((c >=
'0' && c <=
'9') || c ==
'{'))
528 if (it != end && *it ==
'?') {
532 if (it != end && *it ==
's') {
539 template <
typename FormatContext>
541 FormatContext& ctx)
const ->
decltype(ctx.out()) {
547 buf.append(ec.message());
566 FMT_CONSTEXPR auto parse(parse_context<>& ctx) ->
const char* {
570 template <
typename Context>
571 auto format(
const std::type_info& ti, Context& ctx)
const
572 ->
decltype(ctx.out()) {
573 return detail::write_demangled_name(ctx.out(), ti);
581 typename
std::enable_if<std::is_base_of<std::exception, T>::value>::type> {
583 bool with_typename_ =
false;
587 auto it = ctx.
begin();
588 auto end = ctx.
end();
589 if (it == end || *it ==
'}')
return it;
597 template <
typename Context>
598 auto format(
const std::exception& ex, Context& ctx)
const
599 ->
decltype(ctx.out()) {
600 auto out = ctx.out();
602 if (with_typename_) {
603 out = detail::write_demangled_name(out,
typeid(ex));
615template <
typename BitRef,
typename Char>
619 template <
typename FormatContext>
621 ->
decltype(ctx.out()) {
626template <
typename T,
typename Char>
630 template <
typename FormatContext>
631 auto format(
const std::atomic<T>& v, FormatContext& ctx)
const
632 ->
decltype(ctx.out()) {
637#ifdef __cpp_lib_atomic_flag_test
638template <
typename Char>
640 template <
typename FormatContext>
641 auto format(
const std::atomic_flag& v, FormatContext& ctx)
const
642 ->
decltype(ctx.out()) {
648template <
typename T,
typename Char>
struct formatter<
std::complex<T>, Char> {
652 template <
typename FormatContext,
typename OutputIt>
655 FormatContext& ctx, OutputIt out)
const
675 if (ctx.begin() == ctx.end() || *ctx.begin() ==
'}')
return ctx.begin();
676 return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx,
680 template <
typename FormatContext>
681 auto format(
const std::complex<T>& c, FormatContext& ctx)
const
682 ->
decltype(ctx.out()) {
691 if (specs.
width == 0)
return do_format(c, specs, ctx, ctx.out());
695 outer_specs.width = specs.
width;
696 outer_specs.copy_fill_from(specs);
697 outer_specs.set_align(specs.
align());
710template <
typename T,
typename Char>
714 enable_if_t<is_formattable<remove_cvref_t<T>, Char>::value &&
715 !detail::has_format_as<T>::value &&
716 !detail::has_format_as_member<T>::value>>
718 template <
typename FormatContext>
719 auto format(std::reference_wrapper<T> ref, FormatContext& ctx)
const
720 ->
decltype(ctx.out()) {
constexpr auto format_as(HAL_AddressableLEDColorOrder order)
Definition AddressableLEDTypes.h:34
and restrictions which apply to each piece of software is included later in this file and or inside of the individual applicable source files The disclaimer of warranty in the WPILib license above applies to all code in and nothing in any of the other licenses gives permission to use the names of FIRST nor the names of the WPILib contributors to endorse or promote products derived from this software The following pieces of software have additional or alternate and or glfw and nanopb were modified for use in Google Inc All rights reserved Redistribution and use in source and binary with or without are permitted provided that the following conditions are this list of conditions and the following disclaimer *Redistributions in binary form must reproduce the above copyright this list of conditions and the following disclaimer in the documentation and or other materials provided with the distribution *Neither the name of Google Inc nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY OR CONSEQUENTIAL WHETHER IN STRICT OR EVEN IF ADVISED OF THE POSSIBILITY OF SUCH January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the whether in Source or Object that is based or other modifications as a an original work of authorship For the purposes of this Derivative Works shall not include works that remain separable from
Definition ThirdPartyNotices.txt:140
and restrictions which apply to each piece of software is included later in this file and or inside of the individual applicable source files The disclaimer of warranty in the WPILib license above applies to all code in and nothing in any of the other licenses gives permission to use the names of FIRST nor the names of the WPILib contributors to endorse or promote products derived from this software The following pieces of software have additional or alternate and or glfw and nanopb were modified for use in Google Inc All rights reserved Redistribution and use in source and binary with or without are permitted provided that the following conditions are this list of conditions and the following disclaimer *Redistributions in binary form must reproduce the above copyright this list of conditions and the following disclaimer in the documentation and or other materials provided with the distribution *Neither the name of Google Inc nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY OR CONSEQUENTIAL WHETHER IN STRICT OR EVEN IF ADVISED OF THE POSSIBILITY OF SUCH January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the whether in Source or Object that is based or other modifications as a an original work of authorship For the purposes of this Derivative Works shall not include works that remain separable or merely the Work and Derivative Works thereof Contribution shall mean any work of including the original version of the Work and any modifications or additions to that Work or Derivative Works that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner For the purposes of this submitted means any form of or written communication sent to the Licensor or its including but not limited to communication on electronic mailing source code control and issue tracking systems that are managed or on behalf the Licensor for the purpose of discussing and improving the but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as Not a Contribution Contributor shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work Grant of Copyright License Subject to the terms and conditions of this each Contributor hereby grants to You a non no royalty free
Definition ThirdPartyNotices.txt:163
typename std::enable_if< B, T >::type enable_if_t
Definition base.h:307
#define FMT_ASSERT(condition, message)
Definition base.h:394
basic_string_view< char > string_view
Definition base.h:620
#define FMT_TRY
Definition base.h:162
basic_appender< char > appender
Definition base.h:623
#define FMT_CONSTEXPR
Definition base.h:113
@ none
Definition base.h:688
#define FMT_BEGIN_NAMESPACE
Definition base.h:256
@ plus
Definition base.h:689
void void_t
Definition base.h:331
#define FMT_CATCH(x)
Definition base.h:163
#define FMT_CONSTEXPR20
Definition base.h:143
@ none
Definition base.h:667
@ string
Definition base.h:669
#define FMT_END_NAMESPACE
Definition base.h:259
bool_constant<!std::is_same< detail::mapped_t< conditional_t< std::is_void< T >::value, int *, T >, Char >, void >::value > is_formattable
Definition base.h:2797
A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE el...
Definition format.h:797
FMT_CONSTEXPR void set_fill(char c)
Definition base.h:817
constexpr auto align() const -> align
Definition base.h:751
FMT_CONSTEXPR auto dynamic_precision() const -> arg_id_kind
Definition base.h:765
FMT_CONSTEXPR void set_sign(fmt::sign s)
Definition base.h:781
constexpr auto dynamic() const -> bool
Definition base.h:774
constexpr auto dynamic_width() const -> arg_id_kind
Definition base.h:758
FMT_CONSTEXPR void set_align(fmt::align a)
Definition base.h:754
An implementation of std::basic_string_view for pre-C++17.
Definition base.h:522
constexpr auto size() const noexcept -> size_t
Returns the string size.
Definition base.h:567
constexpr auto begin() const noexcept -> iterator
Definition base.h:569
FMT_CONSTEXPR void remove_prefix(size_t n) noexcept
Definition base.h:576
FMT_CONSTEXPR auto starts_with(basic_string_view< Char > sv) const noexcept -> bool
Definition base.h:581
auto convert(basic_string_view< WChar > s, to_utf8_error_policy policy=to_utf8_error_policy::abort) -> bool
Definition format.h:1340
Parsing context consisting of a format string range being parsed and an argument counter for automati...
Definition base.h:857
constexpr auto begin() const noexcept -> iterator
Returns an iterator to the beginning of the format string range being parsed.
Definition base.h:876
FMT_CONSTEXPR void advance_to(iterator it)
Advances the begin iterator to it.
Definition base.h:882
constexpr auto end() const noexcept -> iterator
Returns an iterator past the end of the format string range being parsed.
Definition base.h:879
Converts a string literal into a format string that will be parsed at compile time and converted into...
Definition printf.h:50
FMT_CONSTEXPR20 auto isfinite(T value) -> bool
Definition format.h:2629
constexpr auto to_ascii(Char c) -> char
Definition base.h:1307
FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, const format_specs &specs={}) -> OutputIt
Definition format.h:1714
FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t< Int >
Definition base.h:439
@ replace
Definition format.h:1314
auto write_escaped_char(OutputIt out, Char v) -> OutputIt
Definition format.h:1842
FMT_CONSTEXPR auto parse_width(const Char *begin, const Char *end, format_specs &specs, arg_ref< Char > &width_ref, parse_context< Char > &ctx) -> const Char *
Definition base.h:1443
FMT_CONSTEXPR auto parse_align(const Char *begin, const Char *end, format_specs &specs) -> const Char *
Definition format.h:2312
constexpr auto to_string_view(const Char *s) -> basic_string_view< Char >
Definition base.h:958
FMT_CONSTEXPR void handle_dynamic_spec(arg_id_kind kind, int &value, const arg_ref< typename Context::char_type > &ref, Context &ctx)
Definition format.h:3712
FMT_CONSTEXPR FMT_INLINE auto write(basic_appender< Char > out, T value, const format_specs &specs, locale_ref loc) -> basic_appender< Char >
Definition format.h:2137
FMT_CONSTEXPR auto maybe_set_debug_format(Formatter &f, bool set) -> decltype(f.set_debug_format(set))
Definition format.h:767
auto write_escaped_string(OutputIt out, basic_string_view< Char > str) -> OutputIt
Definition format.h:1826
Definition StringMap.hpp:773
@ string
Definition ranges.h:31
@ set
Definition ranges.h:31
auto ptr(const std::unique_ptr< T, Deleter > &p) -> const void *
Definition std.h:276
static constexpr bool value
Definition std.h:246