23# include <type_traits>
29# if FMT_CPLUSPLUS >= 201703L
30# if FMT_HAS_INCLUDE(<filesystem>) && \
31 (!defined(FMT_CPP_LIB_FILESYSTEM) || FMT_CPP_LIB_FILESYSTEM != 0)
34# if FMT_HAS_INCLUDE(<variant>)
37# if FMT_HAS_INCLUDE(<optional>)
43# if FMT_CPLUSPLUS > 201703L && FMT_HAS_INCLUDE(<source_location>)
44# include <source_location>
46# if FMT_CPLUSPLUS > 202002L && FMT_HAS_INCLUDE(<expected>)
51#if FMT_HAS_INCLUDE(<version>)
56#if FMT_HAS_INCLUDE(<cxxabi.h>) || defined(__GLIBCXX__)
60# ifndef __GABIXX_CXXABI_H__
61# define FMT_HAS_ABI_CXA_DEMANGLE
66#ifndef FMT_CPP_LIB_FILESYSTEM
67# ifdef __cpp_lib_filesystem
68# define FMT_CPP_LIB_FILESYSTEM __cpp_lib_filesystem
70# define FMT_CPP_LIB_FILESYSTEM 0
74#ifndef FMT_CPP_LIB_VARIANT
75# ifdef __cpp_lib_variant
76# define FMT_CPP_LIB_VARIANT __cpp_lib_variant
78# define FMT_CPP_LIB_VARIANT 0
82#if FMT_CPP_LIB_FILESYSTEM
87template <
typename Char,
typename PathChar>
88auto get_path_string(
const std::filesystem::path& p,
89 const std::basic_string<PathChar>& native) {
90 if constexpr (std::is_same_v<Char, char> && std::is_same_v<PathChar, wchar_t>)
93 return p.string<Char>();
96template <
typename Char,
typename PathChar>
98 const std::filesystem::path& p,
99 const std::basic_string<PathChar>& native) {
100 if constexpr (std::is_same_v<Char, char> &&
101 std::is_same_v<PathChar, wchar_t>) {
106 }
else if constexpr (std::is_same_v<Char, PathChar>) {
108 std::back_inserter(quoted), native);
117template <
typename Char>
struct formatter<
std::filesystem::path, Char> {
128 auto it = ctx.
begin(), end = ctx.
end();
129 if (it == end)
return it;
132 if (it == end)
return it;
135 if ((c >=
'0' && c <=
'9') || c ==
'{')
137 if (it != end && *it ==
'?') {
145 template <
typename FormatContext>
146 auto format(
const std::filesystem::path& p, FormatContext& ctx)
const {
149 !path_type_ ? p.native()
150 : p.generic_string<std::filesystem::path::value_type>();
155 auto s = detail::get_path_string<Char>(p, path_string);
159 detail::write_escaped_path(quoted, p, path_string);
166class path :
public std::filesystem::path {
168 auto display_string() const ->
std::
string {
169 const std::filesystem::path& base = *
this;
172 auto system_string() const ->
std::
string {
return string(); }
174 auto generic_display_string() const ->
std::
string {
175 const std::filesystem::path& base = *
this;
178 auto generic_system_string() const ->
std::
string {
return generic_string(); }
186template <std::
size_t N,
typename Char>
191 const std::bitset<N>& bs;
193 template <
typename OutputIt>
195 for (
auto pos = N; pos > 0; --pos) {
204 template <
typename FormatContext>
205 auto format(
const std::bitset<N>& bs, FormatContext& ctx)
const
206 ->
decltype(ctx.out()) {
207 return write_padded(ctx, writer{bs});
212template <
typename Char>
216#ifdef __cpp_lib_optional
219template <
typename T,
typename Char>
221 std::enable_if_t<is_formattable<T, Char>::value>> {
232 ->
decltype(u.set_debug_format(
set)) {
233 u.set_debug_format(
set);
242 return underlying_.parse(ctx);
245 template <
typename FormatContext>
246 auto format(
const std::optional<T>& opt, FormatContext& ctx)
const
247 ->
decltype(ctx.out()) {
250 auto out = ctx.out();
253 out = underlying_.format(*opt, ctx);
260#if defined(__cpp_lib_expected) || FMT_CPP_LIB_VARIANT
265template <
typename Char,
typename OutputIt,
typename T>
266auto write_escaped_alternative(OutputIt out,
const T& v) -> OutputIt {
267 if constexpr (has_to_string_view<T>::value)
278#ifdef __cpp_lib_expected
282template <
typename T,
typename E,
typename Char>
284 std::enable_if_t<(std::is_void<T>::value ||
285 is_formattable<T, Char>::value) &&
286 is_formattable<E, Char>::value>> {
291 template <
typename FormatContext>
292 auto format(
const std::expected<T, E>& value, FormatContext& ctx)
const
293 ->
decltype(ctx.out()) {
294 auto out = ctx.out();
296 if (
value.has_value()) {
298 if constexpr (!std::is_void<T>::value)
299 out = detail::write_escaped_alternative<Char>(out, *value);
302 out = detail::write_escaped_alternative<Char>(out,
value.error());
311#ifdef __cpp_lib_source_location
317 template <
typename FormatContext>
318 auto format(
const std::source_location& loc, FormatContext& ctx)
const
319 ->
decltype(ctx.out()) {
320 auto out = ctx.out();
334#if FMT_CPP_LIB_VARIANT
339using variant_index_sequence =
340 std::make_index_sequence<std::variant_size<T>::value>;
342template <
typename>
struct is_variant_like_ : std::false_type {};
343template <
typename... Types>
344struct is_variant_like_<
std::variant<Types...>> : std::true_type {};
347template <
typename T,
typename C>
class is_variant_formattable_ {
348 template <std::size_t... Is>
349 static std::conjunction<
351 check(std::index_sequence<Is...>);
354 static constexpr const bool value =
355 decltype(check(variant_index_sequence<T>{}))::value;
360template <
typename T>
struct is_variant_like {
361 static constexpr const bool value = detail::is_variant_like_<T>::value;
364template <
typename T,
typename C>
struct is_variant_formattable {
365 static constexpr const bool value =
366 detail::is_variant_formattable_<T, C>::value;
375 template <
typename FormatContext>
376 auto format(
const std::monostate&, FormatContext& ctx)
const
377 ->
decltype(ctx.out()) {
383template <
typename Variant,
typename Char>
387 is_variant_like<Variant>, is_variant_formattable<Variant, Char>>>> {
392 template <
typename FormatContext>
393 auto format(
const Variant& value, FormatContext& ctx)
const
394 ->
decltype(ctx.out()) {
395 auto out = ctx.out();
401 out = detail::write_escaped_alternative<Char>(out, v);
405 FMT_CATCH(
const std::bad_variant_access&) {
424 auto it = ctx.
begin(), end = ctx.
end();
425 if (it == end)
return it;
428 if (it == end)
return it;
431 if ((c >=
'0' && c <=
'9') || c ==
'{')
436 template <
typename FormatContext>
438 FormatContext& ctx)
const ->
decltype(ctx.out()) {
454template <
typename Char,
typename OutputIt>
455auto write_demangled_name(OutputIt out,
const std::type_info& ti) -> OutputIt {
456# ifdef FMT_HAS_ABI_CXA_DEMANGLE
458 std::size_t size = 0;
459 std::unique_ptr<char, void (*)(
void*)> demangled_name_ptr(
460 abi::__cxa_demangle(ti.name(),
nullptr, &size, &status), &std::free);
463 if (demangled_name_ptr) {
464 demangled_name_view = demangled_name_ptr.get();
474 char* begin = demangled_name_ptr.get();
475 char* to = begin + 5;
476 for (
char *
from = to, *end = begin + demangled_name_view.
size();
479 if (
from[0] ==
'_' &&
from[1] ==
'_') {
480 char* next =
from + 1;
481 while (next < end && *next !=
':') next++;
482 if (next[0] ==
':' && next[1] ==
':') {
495# elif FMT_MSC_VERSION
497 for (std::size_t i = 0; i < demangled_name.size(); ++i) {
498 auto sub = demangled_name;
499 sub.remove_prefix(i);
500 if (sub.starts_with(
"enum ")) {
504 if (sub.starts_with(
"class ") || sub.starts_with(
"union ")) {
508 if (sub.starts_with(
"struct ")) {
512 if (*sub.begin() !=
' ') *out++ = *sub.begin();
523template <
typename Char>
531 template <
typename Context>
532 auto format(
const std::type_info& ti, Context& ctx)
const
533 ->
decltype(ctx.out()) {
534 return detail::write_demangled_name<Char>(ctx.out(), ti);
540template <
typename T,
typename Char>
543 typename
std::enable_if<std::is_base_of<std::exception, T>::value>::type> {
545 bool with_typename_ =
false;
549 auto it = ctx.
begin();
550 auto end = ctx.
end();
551 if (it == end || *it ==
'}')
return it;
559 template <
typename Context>
560 auto format(
const std::exception& ex, Context& ctx)
const
561 ->
decltype(ctx.out()) {
562 auto out = ctx.out();
564 if (with_typename_) {
565 out = detail::write_demangled_name<Char>(out,
typeid(ex));
576template <
typename T,
typename Enable =
void>
585 std::is_convertible<T, bool>::value &&
589#ifdef _LIBCPP_VERSION
595 static constexpr const bool value =
true;
606template <
typename BitRef,
typename Char>
610 template <
typename FormatContext>
612 ->
decltype(ctx.out()) {
617template <
typename T,
typename Deleter>
618auto ptr(
const std::unique_ptr<T, Deleter>& p) ->
const void* {
621template <
typename T>
auto ptr(
const std::shared_ptr<T>& p) ->
const void* {
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
639template <
typename Char>
641 template <
typename FormatContext>
642 auto format(
const std::atomic_flag& v, FormatContext& ctx)
const
643 ->
decltype(ctx.out()) {
650template <
typename T,
typename Char>
struct formatter<
std::complex<T>, Char> {
654 template <
typename FormatContext,
typename OutputIt>
657 FormatContext& ctx, OutputIt out)
const
677 if (ctx.begin() == ctx.end() || *ctx.begin() ==
'}')
return ctx.begin();
678 return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx,
682 template <
typename FormatContext>
683 auto format(
const std::complex<T>& c, FormatContext& ctx)
const
684 ->
decltype(ctx.out()) {
693 if (specs.
width == 0)
return do_format(c, specs, ctx, ctx.out());
697 outer_specs.width = specs.
width;
698 auto fill = specs.template fill<Char>();
701 outer_specs.set_align(specs.
align());
715template <
typename T,
typename Char>
717 enable_if_t<is_formattable<remove_cvref_t<T>, Char>::value>>
719 template <
typename FormatContext>
720 auto format(std::reference_wrapper<T> ref, FormatContext& ctx)
const
721 ->
decltype(ctx.out()) {
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 and nanopb were all 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:141
A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE el...
Definition format.h:790
FMT_CONSTEXPR20 void append(const ContiguousRange &range)
Definition format.h:886
constexpr bool dynamic() const
Definition base.h:768
FMT_CONSTEXPR void set_fill(char c)
Definition base.h:811
constexpr auto align() const -> align
Definition base.h:745
FMT_CONSTEXPR auto dynamic_precision() const -> arg_id_kind
Definition base.h:759
FMT_CONSTEXPR void set_sign(fmt::sign s)
Definition base.h:775
constexpr auto dynamic_width() const -> arg_id_kind
Definition base.h:752
FMT_CONSTEXPR void set_align(fmt::align a)
Definition base.h:748
constexpr auto fill_size() const -> size_t
Definition base.h:791
An implementation of std::basic_string_view for pre-C++17.
Definition base.h:504
constexpr auto size() const noexcept -> size_t
Returns the string size.
Definition base.h:549
FMT_CONSTEXPR auto starts_with(basic_string_view< Char > sv) const noexcept -> bool
Definition base.h:563
FMT_CONSTEXPR void push_back(const T &value)
Definition base.h:1767
constexpr auto size() const noexcept -> size_t
Returns the size of this buffer.
Definition base.h:1740
FMT_CONSTEXPR auto data() noexcept -> T *
Returns a pointer to the buffer data (not null-terminated).
Definition base.h:1746
auto convert(basic_string_view< WChar > s, to_utf8_error_policy policy=to_utf8_error_policy::abort) -> bool
Definition format.h:1311
Parsing context consisting of a format string range being parsed and an argument counter for automati...
Definition base.h:845
constexpr auto begin() const noexcept -> iterator
Returns an iterator to the beginning of the format string range being parsed.
Definition base.h:864
FMT_CONSTEXPR void advance_to(iterator it)
Advances the begin iterator to it.
Definition base.h:870
constexpr auto end() const noexcept -> iterator
Returns an iterator past the end of the format string range being parsed.
Definition base.h:867
detail namespace with internal helper functions
Definition input_adapters.h:32
FMT_CONSTEXPR20 auto isfinite(T value) -> bool
Definition format.h:2486
constexpr auto to_ascii(Char c) -> char
Definition base.h:1242
FMT_CONSTEXPR auto write(OutputIt out, Char value, const format_specs &specs, locale_ref loc={}) -> OutputIt
Definition format.h:1824
FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, const format_specs &specs={}) -> OutputIt
Definition format.h:1670
@ value
the parser finished reading a JSON value
FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t< Int >
Definition base.h:422
auto write_escaped_char(OutputIt out, Char v) -> OutputIt
Definition format.h:1798
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:1378
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:2184
constexpr auto to_string_view(const Char *s) -> basic_string_view< Char >
Definition base.h:910
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:3548
FMT_CONSTEXPR auto maybe_set_debug_format(Formatter &f, bool set) -> decltype(f.set_debug_format(set))
Definition ranges.h:240
auto write_escaped_string(OutputIt out, basic_string_view< Char > str) -> OutputIt
Definition format.h:1782
Implement std::hash so that hash_code can be used in STL containers.
Definition PointerIntPair.h:280
auto ptr(const std::unique_ptr< T, Deleter > &p) -> const void *
Definition std.h:618
typename std::enable_if< B, T >::type enable_if_t
Definition base.h:297
#define FMT_ASSERT(condition, message)
Definition base.h:381
basic_string_view< char > string_view
Definition base.h:603
#define FMT_TRY
Definition base.h:160
basic_appender< char > appender
Definition base.h:619
#define FMT_CONSTEXPR
Definition base.h:113
#define FMT_BEGIN_NAMESPACE
Definition base.h:239
#define FMT_CATCH(x)
Definition base.h:161
#define FMT_CONSTEXPR20
Definition base.h:141
#define FMT_END_NAMESPACE
Definition base.h:242
#define FMT_EXPORT
Definition base.h:248
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:2723