diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2018-07-11 07:33:08 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2018-07-11 07:33:08 +0200 | 
| commit | 621f4acf1406e51eaf5d9429c46625e6f5fde98e (patch) | |
| tree | 0fe1fd92a0502602f54b2bf12a8c247ef575d00f /lib/spdlog/fmt/bundled/ostream.h | |
| parent | 25d4e8d5ee396a852568b7ae1c15971a9da409db (diff) | |
| parent | 5aa4b715375b173e9c24363f977883786b05cd6d (diff) | |
Merge branch 'release/debian/2.0.0-1'debian/2.0.0-1
Diffstat (limited to 'lib/spdlog/fmt/bundled/ostream.h')
| -rw-r--r-- | lib/spdlog/fmt/bundled/ostream.h | 117 | 
1 files changed, 117 insertions, 0 deletions
diff --git a/lib/spdlog/fmt/bundled/ostream.h b/lib/spdlog/fmt/bundled/ostream.h new file mode 100644 index 0000000..ffa75ab --- /dev/null +++ b/lib/spdlog/fmt/bundled/ostream.h @@ -0,0 +1,117 @@ +/* + Formatting library for C++ - std::ostream support + + Copyright (c) 2012 - 2016, Victor Zverovich + All rights reserved. + + For the license information refer to format.h. + */ + +#ifndef FMT_OSTREAM_H_ +#define FMT_OSTREAM_H_ + +#include "format.h" +#include <ostream> + +namespace fmt { + +namespace internal { + +template<class Char> +class FormatBuf : public std::basic_streambuf<Char> +{ +private: +    typedef typename std::basic_streambuf<Char>::int_type int_type; +    typedef typename std::basic_streambuf<Char>::traits_type traits_type; + +    Buffer<Char> &buffer_; + +public: +    FormatBuf(Buffer<Char> &buffer) +        : buffer_(buffer) +    { +    } + +protected: +    // The put-area is actually always empty. This makes the implementation +    // simpler and has the advantage that the streambuf and the buffer are always +    // in sync and sputc never writes into uninitialized memory. The obvious +    // disadvantage is that each call to sputc always results in a (virtual) call +    // to overflow. There is no disadvantage here for sputn since this always +    // results in a call to xsputn. + +    int_type overflow(int_type ch = traits_type::eof()) FMT_OVERRIDE +    { +        if (!traits_type::eq_int_type(ch, traits_type::eof())) +            buffer_.push_back(static_cast<Char>(ch)); +        return ch; +    } + +    std::streamsize xsputn(const Char *s, std::streamsize count) FMT_OVERRIDE +    { +        buffer_.append(s, s + count); +        return count; +    } +}; + +Yes &convert(std::ostream &); + +struct DummyStream : std::ostream +{ +    DummyStream(); // Suppress a bogus warning in MSVC. + +    // Hide all operator<< overloads from std::ostream. +    template<typename T> +    typename EnableIf<sizeof(T) == 0>::type operator<<(const T &); +}; + +No &operator<<(std::ostream &, int); + +template<typename T> +struct ConvertToIntImpl<T, true> +{ +    // Convert to int only if T doesn't have an overloaded operator<<. +    enum +    { +        value = sizeof(convert(get<DummyStream>() << get<T>())) == sizeof(No) +    }; +}; + +// Write the content of w to os. +FMT_API void write(std::ostream &os, Writer &w); +} // namespace internal + +// Formats a value. +template<typename Char, typename ArgFormatter_, typename T> +void format_arg(BasicFormatter<Char, ArgFormatter_> &f, const Char *&format_str, const T &value) +{ +    internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE> buffer; + +    internal::FormatBuf<Char> format_buf(buffer); +    std::basic_ostream<Char> output(&format_buf); +    output.exceptions(std::ios_base::failbit | std::ios_base::badbit); +    output << value; + +    BasicStringRef<Char> str(&buffer[0], buffer.size()); +    typedef internal::MakeArg<BasicFormatter<Char>> MakeArg; +    format_str = f.format(format_str, MakeArg(str)); +} + +/** +  \rst +  Prints formatted data to the stream *os*. + +  **Example**:: + +    print(cerr, "Don't {}!", "panic"); +  \endrst + */ +FMT_API void print(std::ostream &os, CStringRef format_str, ArgList args); +FMT_VARIADIC(void, print, std::ostream &, CStringRef) +} // namespace fmt + +#ifdef FMT_HEADER_ONLY +#include "ostream.cc" +#endif + +#endif // FMT_OSTREAM_H_  | 
