Home | History | Annotate | Download | only in fmt
      1 /*
      2  Formatting library for C++ - std::ostream support
      3 
      4  Copyright (c) 2012 - 2016, Victor Zverovich
      5  All rights reserved.
      6 
      7  For the license information refer to format.h.
      8  */
      9 
     10 #include "ostream.h"
     11 
     12 namespace fmt {
     13 
     14 namespace internal {
     15 FMT_FUNC void write(std::ostream &os, Writer &w) {
     16   const char *data = w.data();
     17   typedef internal::MakeUnsigned<std::streamsize>::Type UnsignedStreamSize;
     18   UnsignedStreamSize size = w.size();
     19   UnsignedStreamSize max_size =
     20       internal::to_unsigned((std::numeric_limits<std::streamsize>::max)());
     21   do {
     22     UnsignedStreamSize n = size <= max_size ? size : max_size;
     23     os.write(data, static_cast<std::streamsize>(n));
     24     data += n;
     25     size -= n;
     26   } while (size != 0);
     27 }
     28 }
     29 
     30 FMT_FUNC void print(std::ostream &os, CStringRef format_str, ArgList args) {
     31   MemoryWriter w;
     32   w.write(format_str, args);
     33   internal::write(os, w);
     34 }
     35 }  // namespace fmt
     36