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
64#ifndef FMT_CPP_LIB_FILESYSTEM
65# ifdef __cpp_lib_filesystem
66# define FMT_CPP_LIB_FILESYSTEM __cpp_lib_filesystem
68# define FMT_CPP_LIB_FILESYSTEM 0
72#ifndef FMT_CPP_LIB_VARIANT
73# ifdef __cpp_lib_variant
74# define FMT_CPP_LIB_VARIANT __cpp_lib_variant
76# define FMT_CPP_LIB_VARIANT 0
83#if FMT_CPP_LIB_FILESYSTEM
85template <
typename Char,
typename PathChar>
86auto get_path_string(
const std::filesystem::path& p,
87 const std::basic_string<PathChar>& native) {
88 if constexpr (std::is_same_v<Char, char> && std::is_same_v<PathChar, wchar_t>)
91 return p.string<Char>();
94template <
typename Char,
typename PathChar>
96 const std::filesystem::path& p,
97 const std::basic_string<PathChar>& native) {
98 if constexpr (std::is_same_v<Char, char> &&
99 std::is_same_v<PathChar, wchar_t>) {
104 }
else if constexpr (std::is_same_v<Char, PathChar>) {
106 std::back_inserter(quoted), native);
114#if defined(__cpp_lib_expected) || FMT_CPP_LIB_VARIANT
115template <
typename Char,
typename OutputIt,
typename T>
116auto write_escaped_alternative(OutputIt out,
const T& v) -> OutputIt {
117 if constexpr (has_to_string_view<T>::value)
124#if FMT_CPP_LIB_VARIANT
126template <
typename>
struct is_variant_like_ : std::false_type {};
127template <
typename... Types>
128struct is_variant_like_<
std::variant<Types...>> : std::true_type {};
130template <
typename Variant,
typename Char>
class is_variant_formattable {
131 template <
size_t... Is>
132 static std::conjunction<
134 check(std::index_sequence<Is...>);
137 static constexpr bool value =
decltype(check(
138 std::make_index_sequence<std::variant_size<Variant>::value>()))::value;
145template <
typename Char,
typename OutputIt>
146auto write_demangled_name(OutputIt out,
const std::type_info& ti) -> OutputIt {
147# ifdef FMT_HAS_ABI_CXA_DEMANGLE
150 std::unique_ptr<char, void (*)(
void*)> demangled_name_ptr(
151 abi::__cxa_demangle(ti.name(),
nullptr, &size, &status), &std::free);
154 if (demangled_name_ptr) {
155 demangled_name_view = demangled_name_ptr.get();
165 char* begin = demangled_name_ptr.get();
166 char* to = begin + 5;
167 for (
char *
from = to, *end = begin + demangled_name_view.
size();
170 if (
from[0] ==
'_' &&
from[1] ==
'_') {
171 char* next =
from + 1;
172 while (next < end && *next !=
':') next++;
173 if (next[0] ==
':' && next[1] ==
':') {
186# elif FMT_MSC_VERSION
188 for (
size_t i = 0; i < demangled_name.
size(); ++i) {
189 auto sub = demangled_name;
191 if (sub.starts_with(
"enum ")) {
195 if (sub.starts_with(
"class ") || sub.starts_with(
"union ")) {
199 if (sub.starts_with(
"struct ")) {
203 if (*sub.begin() !=
' ') *out++ = *sub.begin();
213template <
typename T,
typename Enable =
void>
221 static constexpr bool value = std::is_convertible<T, bool>::value &&
222 std::is_nothrow_assignable<T, bool>::value &&
228#ifdef _LIBCPP_VERSION
231 static constexpr bool value =
true;
235template <
typename T,
typename Enable =
void>
241template <
typename T,
typename Enable =
void>
250template <
typename T,
typename Deleter>
251auto ptr(
const std::unique_ptr<T, Deleter>& p) ->
const void* {
254template <
typename T>
auto ptr(
const std::shared_ptr<T>& p) ->
const void* {
258#if FMT_CPP_LIB_FILESYSTEM
260class path :
public std::filesystem::path {
262 auto display_string() const ->
std::
string {
263 const std::filesystem::path& base = *
this;
266 auto system_string() const ->
std::
string {
return string(); }
268 auto generic_display_string() const ->
std::
string {
269 const std::filesystem::path& base = *
this;
272 auto generic_system_string() const ->
std::
string {
return generic_string(); }
275template <
typename Char>
struct formatter<
std::filesystem::path, Char> {
286 auto it = ctx.
begin(), end = ctx.
end();
287 if (it == end)
return it;
290 if (it == end)
return it;
293 if ((c >=
'0' && c <=
'9') || c ==
'{')
295 if (it != end && *it ==
'?') {
303 template <
typename FormatContext>
304 auto format(
const std::filesystem::path& p, FormatContext& ctx)
const {
307 !path_type_ ? p.native()
308 : p.generic_string<std::filesystem::path::value_type>();
313 auto s = detail::get_path_string<Char>(p, path_string);
317 detail::write_escaped_path(quoted, p, path_string);
326template <
size_t N,
typename Char>
332 const std::bitset<N>& bs;
334 template <
typename OutputIt>
336 for (
auto pos = N; pos > 0; --pos)
343 template <
typename FormatContext>
344 auto format(
const std::bitset<N>& bs, FormatContext& ctx)
const
345 ->
decltype(ctx.out()) {
346 return this->write_padded(ctx, writer{bs});
350template <
typename Char>
353#ifdef __cpp_lib_optional
354template <
typename T,
typename Char>
356 std::enable_if_t<is_formattable<T, Char>::value>> {
367 ->
decltype(u.set_debug_format(
set)) {
368 u.set_debug_format(
set);
377 return underlying_.parse(ctx);
380 template <
typename FormatContext>
381 auto format(
const std::optional<T>& opt, FormatContext& ctx)
const
382 ->
decltype(ctx.out()) {
385 auto out = ctx.out();
388 out = underlying_.format(*opt, ctx);
394#ifdef __cpp_lib_expected
395template <
typename T,
typename E,
typename Char>
397 std::enable_if_t<(std::is_void<T>::value ||
398 is_formattable<T, Char>::value) &&
399 is_formattable<E, Char>::value>> {
404 template <
typename FormatContext>
405 auto format(
const std::expected<T, E>& value, FormatContext& ctx)
const
406 ->
decltype(ctx.out()) {
407 auto out = ctx.out();
409 if (
value.has_value()) {
411 if constexpr (!std::is_void<T>::value)
412 out = detail::write_escaped_alternative<Char>(out, *value);
415 out = detail::write_escaped_alternative<Char>(out,
value.error());
423#ifdef __cpp_lib_source_location
427 template <
typename FormatContext>
428 auto format(
const std::source_location& loc, FormatContext& ctx)
const
429 ->
decltype(ctx.out()) {
430 auto out = ctx.out();
443#if FMT_CPP_LIB_VARIANT
445template <
typename T>
struct is_variant_like {
446 static constexpr bool value = detail::is_variant_like_<T>::value;
454 template <
typename FormatContext>
455 auto format(
const std::monostate&, FormatContext& ctx)
const
456 ->
decltype(ctx.out()) {
461template <
typename Variant,
typename Char>
464 is_variant_like<Variant>,
465 detail::is_variant_formattable<Variant, Char>>>> {
470 template <
typename FormatContext>
471 auto format(
const Variant& value, FormatContext& ctx)
const
472 ->
decltype(ctx.out()) {
473 auto out = ctx.out();
479 out = detail::write_escaped_alternative<Char>(out, v);
483 FMT_CATCH(
const std::bad_variant_access&) {
501 auto it = ctx.
begin(), end = ctx.
end();
502 if (it == end)
return it;
507 if (it != end && ((c >=
'0' && c <=
'9') || c ==
'{'))
510 if (it != end && *it ==
'?') {
514 if (it != end && *it ==
's') {
521 template <
typename FormatContext>
523 FormatContext& ctx)
const ->
decltype(ctx.out()) {
529 buf.append(ec.message());
546template <
typename Char>
554 template <
typename Context>
555 auto format(
const std::type_info& ti, Context& ctx)
const
556 ->
decltype(ctx.out()) {
557 return detail::write_demangled_name<Char>(ctx.out(), ti);
562template <
typename T,
typename Char>
565 typename
std::enable_if<std::is_base_of<std::exception, T>::value>::type> {
567 bool with_typename_ =
false;
571 auto it = ctx.
begin();
572 auto end = ctx.
end();
573 if (it == end || *it ==
'}')
return it;
581 template <
typename Context>
582 auto format(
const std::exception& ex, Context& ctx)
const
583 ->
decltype(ctx.out()) {
584 auto out = ctx.out();
586 if (with_typename_) {
587 out = detail::write_demangled_name<Char>(out,
typeid(ex));
599template <
typename BitRef,
typename Char>
603 template <
typename FormatContext>
605 ->
decltype(ctx.out()) {
610template <
typename T,
typename Char>
614 template <
typename FormatContext>
615 auto format(
const std::atomic<T>& v, FormatContext& ctx)
const
616 ->
decltype(ctx.out()) {
621#ifdef __cpp_lib_atomic_flag_test
622template <
typename Char>
624 template <
typename FormatContext>
625 auto format(
const std::atomic_flag& v, FormatContext& ctx)
const
626 ->
decltype(ctx.out()) {
632template <
typename T,
typename Char>
struct formatter<
std::complex<T>, Char> {
636 template <
typename FormatContext,
typename OutputIt>
639 FormatContext& ctx, OutputIt out)
const
659 if (ctx.begin() == ctx.end() || *ctx.begin() ==
'}')
return ctx.begin();
660 return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx,
664 template <
typename FormatContext>
665 auto format(
const std::complex<T>& c, FormatContext& ctx)
const
666 ->
decltype(ctx.out()) {
675 if (specs.
width == 0)
return do_format(c, specs, ctx, ctx.out());
679 outer_specs.width = specs.
width;
680 outer_specs.copy_fill_from(specs);
681 outer_specs.set_align(specs.
align());
694template <
typename T,
typename Char>
698 enable_if_t<is_formattable<remove_cvref_t<T>, Char>::value &&
699 !detail::has_format_as<T>::value &&
700 !detail::has_format_as_member<T>::value>>
702 template <
typename FormatContext>
703 auto format(std::reference_wrapper<T> ref, FormatContext& ctx)
const
704 ->
decltype(ctx.out()) {
constexpr auto format_as(HAL_AddressableLEDColorOrder order)
Definition AddressableLEDTypes.h:33
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
A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE el...
Definition format.h:774
constexpr bool dynamic() const
Definition base.h:783
FMT_CONSTEXPR void set_fill(char c)
Definition base.h:826
constexpr auto align() const -> align
Definition base.h:760
FMT_CONSTEXPR auto dynamic_precision() const -> arg_id_kind
Definition base.h:774
FMT_CONSTEXPR void set_sign(fmt::sign s)
Definition base.h:790
constexpr auto type() const -> presentation_type
Definition base.h:753
constexpr auto dynamic_width() const -> arg_id_kind
Definition base.h:767
FMT_CONSTEXPR void set_align(fmt::align a)
Definition base.h:763
FMT_CONSTEXPR void set_type(presentation_type t)
Definition base.h:756
constexpr auto size() const noexcept -> size_t
Returns the string size.
Definition base.h:563
FMT_CONSTEXPR void remove_prefix(size_t n) noexcept
Definition base.h:572
FMT_CONSTEXPR auto starts_with(basic_string_view< Char > sv) const noexcept -> bool
Definition base.h:577
auto convert(basic_string_view< WChar > s, to_utf8_error_policy policy=to_utf8_error_policy::abort) -> bool
Definition format.h:1295
Parsing context consisting of a format string range being parsed and an argument counter for automati...
Definition base.h:866
constexpr auto begin() const noexcept -> iterator
Returns an iterator to the beginning of the format string range being parsed.
Definition base.h:885
FMT_CONSTEXPR void advance_to(iterator it)
Advances the begin iterator to it.
Definition base.h:891
constexpr auto end() const noexcept -> iterator
Returns an iterator past the end of the format string range being parsed.
Definition base.h:888
detail namespace with internal helper functions
Definition input_adapters.h:32
FMT_CONSTEXPR20 auto isfinite(T value) -> bool
Definition format.h:2575
constexpr auto to_ascii(Char c) -> char
Definition base.h:1280
FMT_CONSTEXPR auto write(OutputIt out, Char value, const format_specs &specs, locale_ref loc={}) -> OutputIt
Definition format.h:1815
FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, const format_specs &specs={}) -> OutputIt
Definition format.h:1661
@ value
the parser finished reading a JSON value
FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t< Int >
Definition base.h:437
auto write_escaped_char(OutputIt out, Char v) -> OutputIt
Definition format.h:1789
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:1416
typename make_void< Ts... >::type void_t
Definition void_t.h:21
FMT_CONSTEXPR auto parse_align(const Char *begin, const Char *end, format_specs &specs) -> const Char *
Definition format.h:2258
constexpr auto to_string_view(const Char *s) -> basic_string_view< Char >
Definition base.h:931
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:3646
FMT_CONSTEXPR auto maybe_set_debug_format(Formatter &f, bool set) -> decltype(f.set_debug_format(set))
Definition ranges.h:238
auto write_escaped_string(OutputIt out, basic_string_view< Char > str) -> OutputIt
Definition format.h:1773
Definition PointerIntPair.h:280
auto ptr(const std::unique_ptr< T, Deleter > &p) -> const void *
Definition std.h:251
typename std::enable_if< B, T >::type enable_if_t
Definition base.h:312
#define FMT_ASSERT(condition, message)
Definition base.h:396
basic_string_view< char > string_view
Definition base.h:616
#define FMT_TRY
Definition base.h:160
basic_appender< char > appender
Definition base.h:632
#define FMT_CONSTEXPR
Definition base.h:113
#define FMT_BEGIN_NAMESPACE
Definition base.h:261
#define FMT_CATCH(x)
Definition base.h:161
#define FMT_CONSTEXPR20
Definition base.h:141
#define FMT_END_NAMESPACE
Definition base.h:264
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:2792