|
|
@ -102,6 +102,7 @@ inline uint32_t clzll(uint64_t x) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __clang__
|
|
|
|
#ifdef __clang__
|
|
|
|
|
|
|
|
# pragma clang diagnostic push
|
|
|
|
# pragma clang diagnostic ignored "-Wdocumentation"
|
|
|
|
# pragma clang diagnostic ignored "-Wdocumentation"
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -174,7 +175,6 @@ inline uint32_t clzll(uint64_t x) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
namespace fmt {
|
|
|
|
namespace fmt {
|
|
|
|
|
|
|
|
|
|
|
|
// Fix the warning about long long on older versions of GCC
|
|
|
|
// Fix the warning about long long on older versions of GCC
|
|
|
|
// that don't support the diagnostic pragma.
|
|
|
|
// that don't support the diagnostic pragma.
|
|
|
|
FMT_GCC_EXTENSION typedef long long LongLong;
|
|
|
|
FMT_GCC_EXTENSION typedef long long LongLong;
|
|
|
@ -288,7 +288,6 @@ public:
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
namespace internal {
|
|
|
|
namespace internal {
|
|
|
|
|
|
|
|
|
|
|
|
// The number of characters to store in the MemoryBuffer object itself
|
|
|
|
// The number of characters to store in the MemoryBuffer object itself
|
|
|
|
// to avoid dynamic memory allocation.
|
|
|
|
// to avoid dynamic memory allocation.
|
|
|
|
enum { INLINE_BUFFER_SIZE = 500 };
|
|
|
|
enum { INLINE_BUFFER_SIZE = 500 };
|
|
|
@ -379,7 +378,7 @@ void Buffer<T>::append(const T *begin, const T *end) {
|
|
|
|
// A memory buffer for POD types with the first SIZE elements stored in
|
|
|
|
// A memory buffer for POD types with the first SIZE elements stored in
|
|
|
|
// the object itself.
|
|
|
|
// the object itself.
|
|
|
|
template <typename T, std::size_t SIZE, typename Allocator = std::allocator<T> >
|
|
|
|
template <typename T, std::size_t SIZE, typename Allocator = std::allocator<T> >
|
|
|
|
class MemoryBuffer : private Allocator, public Buffer<T> {
|
|
|
|
class MemoryBuffer : private Allocator, public Buffer < T > {
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|
T data_[SIZE];
|
|
|
|
T data_[SIZE];
|
|
|
|
|
|
|
|
|
|
|
@ -516,7 +515,7 @@ template <typename Char>
|
|
|
|
class CharTraits;
|
|
|
|
class CharTraits;
|
|
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
template <>
|
|
|
|
class CharTraits<char> : public BasicCharTraits<char> {
|
|
|
|
class CharTraits<char> : public BasicCharTraits < char > {
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|
// Conversion from wchar_t to char is not allowed.
|
|
|
|
// Conversion from wchar_t to char is not allowed.
|
|
|
|
static char convert(wchar_t);
|
|
|
|
static char convert(wchar_t);
|
|
|
@ -533,7 +532,7 @@ public:
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
template <>
|
|
|
|
class CharTraits<wchar_t> : public BasicCharTraits<wchar_t> {
|
|
|
|
class CharTraits<wchar_t> : public BasicCharTraits < wchar_t > {
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
static wchar_t convert(char value) {
|
|
|
|
static wchar_t convert(char value) {
|
|
|
|
return value;
|
|
|
|
return value;
|
|
|
@ -557,7 +556,7 @@ struct SignChecker {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
template <>
|
|
|
|
struct SignChecker<false> {
|
|
|
|
struct SignChecker < false > {
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
static bool is_negative(T) {
|
|
|
|
static bool is_negative(T) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
@ -578,7 +577,7 @@ struct TypeSelector {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
template <>
|
|
|
|
struct TypeSelector<false> {
|
|
|
|
struct TypeSelector < false > {
|
|
|
|
typedef uint64_t Type;
|
|
|
|
typedef uint64_t Type;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -754,7 +753,7 @@ struct NonZero {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
template <>
|
|
|
|
struct NonZero<0> {
|
|
|
|
struct NonZero < 0 > {
|
|
|
|
enum { VALUE = 1 };
|
|
|
|
enum { VALUE = 1 };
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -815,7 +814,7 @@ struct WCharHelper {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
struct WCharHelper<T, wchar_t> {
|
|
|
|
struct WCharHelper < T, wchar_t > {
|
|
|
|
typedef T Supported;
|
|
|
|
typedef T Supported;
|
|
|
|
typedef None<T> Unsupported;
|
|
|
|
typedef None<T> Unsupported;
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -943,7 +942,7 @@ public:
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
MakeValue(const T &value) {
|
|
|
|
MakeValue(const T &value) {
|
|
|
|
custom.value = &value;
|
|
|
|
custom.value = &value;
|
|
|
|
custom.format = &format_custom_arg<T>;
|
|
|
|
custom.format = &format_custom_arg < T > ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
static uint64_t type(const T &) {
|
|
|
|
static uint64_t type(const T &) {
|
|
|
@ -1111,7 +1110,6 @@ public:
|
|
|
|
struct FormatSpec;
|
|
|
|
struct FormatSpec;
|
|
|
|
|
|
|
|
|
|
|
|
namespace internal {
|
|
|
|
namespace internal {
|
|
|
|
|
|
|
|
|
|
|
|
class FormatterBase {
|
|
|
|
class FormatterBase {
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|
ArgList args_;
|
|
|
|
ArgList args_;
|
|
|
@ -1740,8 +1738,8 @@ private:
|
|
|
|
template<typename T>
|
|
|
|
template<typename T>
|
|
|
|
void append_float_length(Char *&, T) {}
|
|
|
|
void append_float_length(Char *&, T) {}
|
|
|
|
|
|
|
|
|
|
|
|
friend class internal::ArgFormatter<Char>;
|
|
|
|
friend class internal::ArgFormatter < Char > ;
|
|
|
|
friend class internal::PrintfFormatter<Char>;
|
|
|
|
friend class internal::PrintfFormatter < Char > ;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
protected:
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -2283,7 +2281,7 @@ accessed as a C string with ``out.c_str()``.
|
|
|
|
\endrst
|
|
|
|
\endrst
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
template <typename Char, typename Allocator = std::allocator<Char> >
|
|
|
|
template <typename Char, typename Allocator = std::allocator<Char> >
|
|
|
|
class BasicMemoryWriter : public BasicWriter<Char> {
|
|
|
|
class BasicMemoryWriter : public BasicWriter < Char > {
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|
internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE, Allocator> buffer_;
|
|
|
|
internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE, Allocator> buffer_;
|
|
|
|
|
|
|
|
|
|
|
|