From 88f3c85517036af6c90e7855712ce34755acec71 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Fri, 25 Nov 2016 20:36:38 -0500 Subject: [PATCH] Add to_stream which avoids temporary streams and strings. * This is a low-level formatting facility which other functions such as format call into. --- tz.html | 63 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/tz.html b/tz.html index ff72fc4..db0ecf7 100644 --- a/tz.html +++ b/tz.html @@ -26,7 +26,7 @@

Howard E. Hinnant
-2016-10-08
+2016-11-25

Time Zone Database Parser

@@ -57,6 +57,7 @@
  • time_zone
  • zoned_time
  • make_zoned
  • +
  • to_stream
  • format
  • parse
  • utc_clock
  • @@ -1991,35 +1992,75 @@ make_zoned(const std::string& name, const sys_time<Duration>& st) +

    to_stream

    +
    + +
    +template <class CharT, class Traits, class Duration>
    +void
    +to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
    +          const local_time<Duration>& tp);
    +
    +
    +
    + +
    +template <class CharT, class Traits, class Duration>
    +void
    +to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
    +          const sys_time<Duration>& tp);
    +
    +
    +
    + +
    +template <class CharT, class Traits, class Duration>
    +void
    +to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
    +          const zoned_time<Duration>& tp);
    +
    +
    +

    +These are lower-level functions with respect to format. These functions +will format directly to a stream. If you use these you will not be able +to align your formatted time stamp within a width respecting the stream's +adjustfield. But in forgoing that utility you may realize some performance +gains over format as nothing in the implementation of to_stream +creates temporary strings or streams to format into. +

    +
    + +
    +

    format

     template <class CharT, class Traits, class Duration>
     std::basic_string<class CharT, class Traits>
    -format(const std::locale& loc, std::basic_string<class CharT, class Traits> format,
    +format(const std::locale& loc, const std::basic_string<class CharT, class Traits>& format,
            const local_time<Duration>& tp);
     
     template <class CharT, class Traits, class Duration>
     std::basic_string<class CharT, class Traits>
    -format(std::basic_string<class CharT, class Traits> format, const local_time<Duration>& tp);
    +format(const std::basic_string<class CharT, class Traits>& format, const local_time<Duration>& tp);
     
     template <class CharT, class Traits, class Duration>
     std::basic_string<class CharT, class Traits>
    -format(const std::locale& loc, std::basic_string<class CharT, class Traits> format,
    +format(const std::locale& loc, const std::basic_string<class CharT, class Traits>& format,
            const zoned_time<Duration>& tp);
     
     template <class CharT, class Traits, class Duration>
     std::basic_string<class CharT, class Traits>
    -format(std::basic_string<class CharT, class Traits> format, const zoned_time<Duration>& tp);
    +format(const std::basic_string<class CharT, class Traits>& format, const zoned_time<Duration>& tp);
     
     template <class CharT, class Traits, class Duration>
     std::basic_string<class CharT, class Traits>
    -format(const std::locale& loc, std::basic_string<class CharT, class Traits> format,
    +format(const std::locale& loc, const std::basic_string<class CharT, class Traits>& format,
            const sys_time<Duration>& tp);
     
     template <class CharT, class Traits, class Duration>
     std::basic_string<class CharT, class Traits>
    -format(std::basic_string<class CharT, class Traits> format, const sys_time<Duration>& tp);
    +format(const std::basic_string<class CharT, class Traits>& format, const sys_time<Duration>& tp);
     
     // const CharT* formats
     
    @@ -2067,10 +2108,12 @@ The format string follows the rules as specified for
     
    • If %S or %T appears in the format string -and the argument tp has precision finer than seconds, then seconds +and the argument tp has precision that can not be exactly represented +with seconds, then seconds are formatted as a decimal floating point number with a fixed format and a -precision matching that of the precision of tp. The character for -the decimal point is localized according to the locale. +precision matching that of the precision of tp (or to a microseconds precision +if the conversion to floating point decimal seconds can not be made within 18 digits). +The character for the decimal point is localized according to the locale.