36 lines
893 B
C++
36 lines
893 B
C++
|
/*
|
||
|
Formatting library for C++ - std::ostream support
|
||
|
|
||
|
Copyright (c) 2012 - 2016, Victor Zverovich
|
||
|
All rights reserved.
|
||
|
|
||
|
For the license information refer to format.h.
|
||
|
*/
|
||
|
|
||
|
#include "ostream.h"
|
||
|
|
||
|
namespace fmt {
|
||
|
|
||
|
namespace internal {
|
||
|
FMT_FUNC void write(std::ostream &os, Writer &w) {
|
||
|
const char *data = w.data();
|
||
|
typedef internal::MakeUnsigned<std::streamsize>::Type UnsignedStreamSize;
|
||
|
UnsignedStreamSize size = w.size();
|
||
|
UnsignedStreamSize max_size =
|
||
|
internal::to_unsigned((std::numeric_limits<std::streamsize>::max)());
|
||
|
do {
|
||
|
UnsignedStreamSize n = size <= max_size ? size : max_size;
|
||
|
os.write(data, static_cast<std::streamsize>(n));
|
||
|
data += n;
|
||
|
size -= n;
|
||
|
} while (size != 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
FMT_FUNC void print(std::ostream &os, CStringRef format_str, ArgList args) {
|
||
|
MemoryWriter w;
|
||
|
w.write(format_str, args);
|
||
|
internal::write(os, w);
|
||
|
}
|
||
|
} // namespace fmt
|