![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
ReferenceBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 7. Boost.Chrono 2.0.5
|
выражение |
Тип возврата |
Оперативная семантика |
---|---|---|
< |
Арифметический тип или класс, имитирующий арифметический тип. |
Тип представления< |
< |
< |
Период тика часов в секундах. |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
Возвращает< |
Модели<Clock
>:
Тип<TC
>соответствует требованиям<TrivialClock
>, если:
TC
>удовлетворяет требованиям<Clock
>,TC::rep
>,<TC::duration
>и<TC::time_point
>удовлетворяют требованиям<EqualityComparable
>,<LessThanComparable
>,<DefaultConstructible
>,<CopyConstructible
>,<CopyAssignable
>,<Destructible
>и требованиям числовых типов.![]() |
Note |
---|---|
Это означает, в частности, что операции на этих типах не будут бросать исключений. |
TC::rep
>,<TC::duration
>и<TC::time_point
>являются сменными,TC::now()
>не бросает исключений и она безвредна для потока, иTC::time_point::clock
>отвечает требованиям<TrivialClock
>рекурсивно.Тип<EcC
>соответствует требованиям<EcClock
>, если
TC
>удовлетворяет требованиям<TrivialClock
>, иnow()
>интерфейсы, позволяющие восстанавливать внутренние коды ошибок, как описано в следующей таблице.В этой таблице<C1
>обозначает тип<EcClock
>и<ec
>является примером<boost::system::error_code
>.
Table 7.2. Clock Requirements
выражение |
Тип возврата |
Оперативная семантика |
---|---|---|
< |
< |
Возвращает< |
< |
< |
Возвращает< |
Модели<Clock
>:
Этот файл содержит<time_point
>конкретные классы и нечленные функции.
namespace boost { namespace chrono { template <classClock
, classDuration
= typename Clock::duration> classtime_point
; } template <classClock
, classDuration1
, classDuration2
> structcommon_type
<time_point<Clock, Duration1>, time_point<Clock, Duration2> >; namespace chrono { // time_point arithmetic template <classClock
, classDuration1
, class Rep2, class Period2> constexpr time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2> >::type>operator+
(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs); template <class Rep1, class Period1, classClock
, classDuration2
> constexpr time_point<Clock, typename common_type<duration<Rep1, Period1>, Duration2>::type>operator+
(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs); template <classClock
, classDuration1
, class Rep2, class Period2> constexpr time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2> >::type>operator-
(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs); template <classClock
, classDuration1
, classDuration2
> constexpr typename common_type<Duration1, Duration2>::typeoperator-
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); // time_point comparisons template <classClock
, classDuration1
, classDuration2
> constexpr booloperator==
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); template <classClock
, classDuration1
, classDuration2
> constexpr booloperator!=
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); template <classClock
, classDuration1
, classDuration2
> constexpr booloperator<
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); template <classClock
, classDuration1
, classDuration2
> constexpr booloperator<=
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); template <classClock
, classDuration1
, classDuration2
> constexpr booloperator>
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); template <classClock
, classDuration1
, classDuration2
> constexpr booloperator>=
(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); // time_point_cast template <classToDuration
, classClock
, classDuration
> constexpr time_point<Clock, ToDuration>time_point_cast
(const time_point<Clock, Duration>& t); } }
template <classClock
, classDuration1
, classDuration2
> structcommon_type
<chrono::time_point
<Clock
,Duration1
>, chrono::time_point
<Clock
,Duration2
> > { typedef chrono::time_point
<Clock
, typenamecommon_type
<Duration1,Duration2
>::type> type; };
<common_type
>из двух<time_point
>с является<time_point
>с тем же<Clock
>(оба имеют тот же<Clock
>), и<common_type
>из двух<duration
>с.
<time_point
>представляет собой точку во времени относительно конкретных часов.
template <classClock
, classDuration
> class time_point { public: typedef Clock clock; typedef Duration duration; typedef typename duration::rep rep; typedef typename duration::period period; private: duration d_; // exposition only public: constexprtime_point
(); constexpr explicittime_point
(const duration& d); // conversions template <classDuration2
> constexprtime_point
(const time_point<clock,Duration2
>& t); // observer constexpr durationtime_since_epoch
() const; // arithmetic #ifdef BOOST_CHRONO_EXTENSIONS constexpr time_pointoperator+
(); constexpr time_pointoperator-
(); time_point&operator++
(); time_pointoperator++
(int); time_point&operator--
(); time_pointoperator--
(int); time_point& __time_point__op_plus_eq_1(const rep& d); time_point&operator-=
(const rep& d); #endif time_point& __time_point__op_plus_eq_2(const duration& d); time_point&operator-=
(const duration& d); // special values static constexpr time_pointmin
(); static constexpr time_pointmax
(); };
Часы должны соответствовать требованиям<Clock
>.
Продолжительность должна быть инстанциацией<duration
>, компилировать диагностику иначе.
constexpr time_point();
Эффекты:Построение объекта<time_point
>, инициализация<d_
>с<duration::zero()
>. Это<time_point
>представляет эпоху.
constexpr time_point(const duration& d);
Эффекты:Построение объекта<time_point
>, инициализация<d_
>с<d
>. Это<time_point
>представляет эпоху<+d
>.
template <classDuration2
> constexpr time_point(consttime_point
<clock,Duration2
>& t);
Требуется:Эта функция не будет участвовать в разрешении перегрузки, если<Duration2
>не является неявно конвертируемым в<duration
>.
Эффекты:Построение объекта<time_point
>, инициализация<d_
>с<t.time_since_epoch()
>.
constexpr duration time_since_epoch() const;
Возвращение:<d_
>.
constexpr time_point
operator-() const;
Возвращение:<
.time_point
>[-d_
time_point& operator+=(const duration& d);
Эффекты:<d_
+=d
>.
Возвращение:<*this
>.
time_point& operator-=(const duration& d);
Эффекты:<d_
-=d
>
Возвращение:<*this
>.
static constexpr time_point min();
Возвращение:<time_point(duration::min())
>.
static constexpr time_point max();
Возвращение:<time_point(duration::max())
>.
template <classClock
, classDuration1
, class Rep2, class Period2> constexprtime_point
<Clock
, typenamecommon_type
<Duration1, duration<Rep2, Period2> >::type> operator+(consttime_point
<Clock
,Duration1
>& lhs, const duration<Rep2, Period2>& rhs);
Возврат:<CT(lhs.time_since_epoch()+rhs)
>, где<CT
>является типом возвращаемого значения.
template <class Rep1, class Period1, classClock
, classDuration2
> constexprtime_point
<Clock
, typenamecommon_type
<duration<Rep1, Period1>,Duration2
>::type> operator+(const duration<Rep1, Period1>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<rhs
+lhs
>.
template <classClock
, classDuration1
, class Rep2, class Period2> constexprtime_point
<Clock
, typenamecommon_type
<Duration1, duration<Rep2, Period2> >::type> operator-(consttime_point
<Clock
,Duration1
>& lhs, const duration<Rep2, Period2>& rhs);
Возвращение:<lhs
+(-rhs)
>.
template <classClock
, classDuration1
, classDuration2
> constexpr typenamecommon_type
<Duration1,Duration2
>::type operator-(consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<lhs.time_since_epoch()-rhs.time_since_epoch()
>.
template <classClock
, classDuration1
, classDuration2
> constexpr bool operator==(consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<lhs.time_since_epoch()==rhs.time_since_epoch()
>.
template <classClock
, classDuration1
, classDuration2
> constexpr bool operator!=(consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<!(lhs==
rhs)
>.
template <classClock
, classDuration1
, classDuration2
> constexpr bool operator< (consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
1116Возврат:lhs.time_since_epoch()< rhs.time_since_epoch().
template <classClock
, classDuration1
, classDuration2
> constexpr bool operator<=(consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<!(rhs<
lhs)
>.
template <classClock
, classDuration1
, classDuration2
> constexpr bool operator>(consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<rhs
<lhs
>.
template <classClock
, classDuration1
, classDuration2
> constexpr bool operator>=(consttime_point
<Clock
,Duration1
>& lhs, consttime_point
<Clock
,Duration2
>& rhs);
Возвращение:<!(lhs<
rhs)
>.
template <classToDuration
, classClock
, classDuration
> constexprtime_point
<Clock
, ToDuration>time_point_cast
(consttime_point
<Clock
,Duration
>& t);
Требуется:Эта функция не будет участвовать в разрешении перегрузки, если<ToDuration
>не является инстанциацией<duration
>.
1146Возвращается:<
.time_point
><<Clock
>,ToDuration><duration_cast
><ToDuration>t.time_since_epoch[)]
Этот файл содержит стандартные классы часов. Типы, определенные в этом разделе, удовлетворяют требованиям<TrivialClock
>.
namespace boost { namespace chrono { // Clocks classsystem_clock
; classsteady_clock
; classhigh_resolution_clock
; template <class CharT> struct clock_string<system_clock, CharT>; template <class CharT> struct clock_string<steady_clock, CharT>; } }
Класс<system_clock
>обеспечивает способ получения текущего времени настенных часов от общесистемных часов реального времени. Текущее время можно получить по телефону<system_clock::now()
>. Случаи<system_clock::time_point
>могут быть преобразованы в функции<system_clock::to_time_t()
>и<system_clock::from_time_t()
>и из них. Если системные часы нестабильны, последующий вызов<system_clock::now()
>может вернуть более раннее время, чем предыдущий вызов (например, если часы операционной системы настроены вручную или синхронизированы с внешними часами).
Нынешняя реализация<system_clock
>связана с эпохой (полночь UTC 1 января 1970 года), но это не входит в контракт. Вы должны использовать статическую функцию статического
std::time_t to_time_t(const time_point& t);
Тип 1192, основанный на полночь UTC 1 января 1970 года.
class system_clock {
public:
typedef see bellow duration;
typedef duration::rep rep;
typedef duration::period period;
typedef chrono::time_point
<system_clock> time_point;
static constexpr bool is_steady = false;
static time_point now() noexcept;
static time_point now(system::error_code & ec);
// Map to C API
static std::time_t to_time_t(const time_point& t) noexcept;
static time_point from_time_t(std::time_t t) noexcept;
};
<system_clock
>удовлетворяют требованиям<Clock
>:
system_clock::duration::min()
<system_clock::duration::zero()
>—<true
>.duration
>типдеф имеет разрешение, зависящее от того, которое обеспечивает платформа.time_t to_time_t(const time_point& t) noexcept;
Возвращает:А<time_t
>так, что<time_t
>и<t
>представляют собой один и тот же момент времени, усеченный до более грубой точности среди<time_t
>и<time_point
>.
time_point from_time_t(time_t t) noexcept;
Возвращается:А<time_point
>так, что<time_point
>и<t
>представляют один и тот же момент времени, усеченный до более грубой точности среди<time_point
>и<time_t
>.
Определено, поддерживает ли платформа устойчивые часы.
<steady_clock
>удовлетворяют требованиям<Clock
>.
<steady_clock
>класс обеспечивает доступ к системным устойчивым часам. Текущее время можно получить по телефону<steady_clock::now()
>. Не существует фиксированной связи между значениями, возвращаемыми<steady_clock::now()
>и временем настенных часов.
#ifdef BOOST_HAS_CLOCK_STEADY class steady_clock { public: typedefnanoseconds
duration; typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point
<steady_clock> time_point; static constexpr bool is_steady = true; static time_point now() noexcept; static time_point now(system::error_code & ec); }; #endif
<high_resolution_clock
>удовлетворяют требованиям<Clock
>.
#ifdefBOOST_CHRONO_HAS_CLOCK_STEADY
typedefsteady_clock
high_resolution_clock; // as permitted by [time.clock.hires] #else typedefsystem_clock
high_resolution_clock; // as permitted by [time.clock.hires] #endif
template <class CharT> struct clock_string<system_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); };
<clock_string<>::name()
>возвращает «system_clock».
<clock_string<>::since()
>Возвращение «с 1 января 1970 года»
#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY template <class CharT> struct clock_string<steady_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); }; #endif
<clock_string<>::name()
>возвращает «steady_clock».
<clock_string<>::since()
>Возвращение «с ботинка»
namespace boost {
namespace chrono {
template <class Clock
, class CharT>
struct clock_string;
}
}
template <class Clock
, class CharT>
struct clock_string;
Этот шаблон должен быть специализирован для конкретных часов. Специализация должна определять следующие функции:
static std::basic_string<CharT> name(); static std::basic_string<CharT> since();
<clock_string<>::name()
>Возвращают название часов, которое обычно соответствует названию класса.
<clock_string<>::since()
>Возвращение текстового формата эпохи часов.
Зарегистрируйте<duration
><<>
>и<time_point
><<>
>шаблоны классовBoost.Typeof.
namespace boost { namespace chrono { template <class CharT> class duration_punct; template <class CharT, class Traits> std::basic_ostream<CharT, Traits>& duration_short(std::basic_ostream<CharT, Traits>& os); template <class CharT, class Traits> std::basic_ostream<CharT, Traits>& duration_long(std::basic_ostream<CharT, Traits>& os); template <class CharT, class Traits, class Rep, class Period> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const duration<Rep, Period>& d); template <class CharT, class Traits, class Rep, class Period> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, duration<Rep, Period>& d) template <class CharT, class Traits, class Clock, class Duration> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const time_point<Clock, Duration>& tp); template <class CharT, class Traits, class Clock, class Duration> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, time_point<Clock, Duration>& tp); } }
Названия единиц<duration
>могут быть настроены через грань:<duration_punct
>.<duration
>наименования единиц бывают двух разновидностей: длинные и короткие. По умолчанию построенный<duration_punct
>предоставляет имена в длинном формате. Эти названия являются английскими описаниями. Другие языки поддерживаются построением<duration_punct
>с правильными написаниями для «часов», «минут» и «секунд», а также их сокращениями (для короткого формата).
template <class CharT> class duration_punct : public std::locale::facet { public: typedef std::basic_string<CharT> string_type; enum {use_long, use_short}; static std::locale::id id; explicit duration_punct(int use = use_long); duration_punct(int use, const string_type& long_seconds, const string_type& long_minutes, const string_type& long_hours, const string_type& short_seconds, const string_type& short_minutes, const string_type& short_hours); duration_punct(int use, const duration_punct& d); template <class Period> string_type short_name() const; template <class Period> string_type long_name() const; template <class Period> string_type name() const; bool is_short_name() const; bool is_long_name() const; };
Короткий или длинный формат может быть легко выбран путем потоковой передачи манипулятора<duration_short
>или<duration_long
>соответственно.
template <class CharT, class Traits> std::basic_ostream<CharT, Traits>& duration_short(std::basic_ostream<CharT, Traits>& os);
Эффекты:Установите грань<duration_punct
>для потока<duration
>и<time_point
>в качестве сокращений.
Возврат:выходной поток
template <class CharT, class Traits> std::basic_ostream<CharT, Traits>& duration_long(std::basic_ostream<CharT, Traits>& os);
Эффекты:Установите грань<duration_punct
>для потоковой передачи длительностей и точек времени в виде длинного текста.
Возврат:выходной поток
Любое<duration
>может быть передано<basic_ostream
>. Значение времени выполнения<duration
>отформатировано в соответствии с правилами и текущими настройками формата для<duration
><::rep
>. За этим следует одно пространство, а затем имя единицы времени компиляции<duration
>. Название этого блока построено на строке, возвращенной из<ratio_string<>
>, и данных, используемых для построения<duration_punct
>, которые были вставлены в местоположение потока. Если<duration_punct
>не вставлено в локацию потока, в локацию потока будет добавлено построенное по умолчанию<duration_punct
>.
А<time_point
>форматируется путем вывода его внутреннего<duration
>, за которым следует строка, описывающая<time_point
><::clock
>эпоху. Эта строка будет варьироваться для каждого отдельного часа и для каждой реализации поставляемых часов.
template <class CharT, class Traits, class Rep, class Period> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const duration<Rep, Period>& d);
Эффекты:выводит<duration
>в виде сокращенного или длинного текстового формата в зависимости от состояния<duration_punct
>грани.
Возврат:выходной поток
template <class CharT, class Traits, class Rep, class Period> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, duration<Rep, Period>& d)
Эффекты:читает<duration
>из входного потока. Если найдена ошибка формата, состояние входного потока будет установлено на<failbit
>.
Возврат:входной поток
template <class CharT, class Traits, class Clock, class Duration> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const time_point<Clock, Duration>& tp);
Эффекты:выводит<time_point
>в виде сокращенного или длинного текстового формата в зависимости от состояния<duration_punct
>грани.
Возврат:выходной поток
template <class CharT, class Traits, class Clock, class Duration> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, time_point<Clock, Duration>& tp);
Эффекты:читает<time_point
>из входного потока. Если обнаружена ошибка формата, состояние потока ввода будет установлено на<failbit
>.
Возврат:входной поток
<boost/chrono/chrono_io.hpp>
<boost/chrono/io/duration_style.hpp>
<boost/chrono/io/timezone.hpp>
<boost/chrono/io/ios_base_state.hpp>
<boost/chrono/io/duration_get.hpp>
<boost/chrono/io/duration_put.hpp>
<boost/chrono/io/duration_units.hpp>
<boost/chrono/io/duration_io.hpp>
<boost/chrono/io/time_point_get.hpp>
<boost/chrono/io/time_point_put.hpp>
<boost/chrono/io/time_point_units.hpp>
<boost/chrono/io/time_point_io.hpp>
Этот файл включает в себя i/o двух основных компонентов, длительность и точку времени.
#include <boost/chrono/io/duration_style.hpp> #include <boost/chrono/io/timezone.hpp> #include <boost/chrono/io/ios_base_state.hpp> #include <boost/chrono/io/duration_get.hpp> #include <boost/chrono/io/duration_put.hpp> #include <boost/chrono/io/duration_units.hpp> #include <boost/chrono/io/duration_io.hpp> #include <boost/chrono/io/time_point_get.hpp> #include <boost/chrono/io/time_point_put.hpp> #include <boost/chrono/io/time_point_units.hpp> #include <boost/chrono/io/time_point_io.hpp>
namespace boost { namespace chrono { // typedefs enum classduration_style
{prefix
,symbol
}; } }
enum class duration_style { prefix, symbol };
<duration
>названия единиц бывают двух разновидностей: префикс и символ.
namespace boost { namespace chrono { structtimezone
{ enum type {utc
,local
}; }; } }
enum class timezone { utc, local };
namespace boost { namespace chrono { // setters and getters duration_styleget_duration_style
(std::ios_base & ios); voidset_duration_style
(std::ios_base& ios, duration_style style); timezoneget_timezone
(std::ios_base & ios); voidset_timezone
(std::ios_base& ios, timezone tz); template<typename CharT> std::basic_string<CharT>get_time_fmt
(std::ios_base & ios); template<typename CharT> voidset_time_fmt
(std::ios_base& ios, std::basic_string<CharT> const& fmt); // i/o state savers structduration_style_io_saver
; template<typename CharT = char, typename Traits = std::char_traits<CharT> > structtimezone_io_saver
; template<typename CharT = char, typename Traits = std::char_traits<CharT> > structtime_fmt_io_saver
; } }
duration_style get_duration_style(std::ios_base & ios);
Возвращение:<duration_style
>атрибут, связанный с<ios
>.
void set_duration_style(std::ios_base& ios, duration_style style);
Эффекты:Установите атрибут потока<duration_style
>, связанный с<ios
>параметром<style
>.
timezone get_timezone(std::ios_base & ios);
Возвращение:<timezone
>атрибут, связанный с<ios
>.
void set_timezone(std::ios_base& ios, timezone tz);
Эффекты:Установите атрибут потока<timezone
>, связанный с<ios
>параметром<tz
>.
template<typename CharT> std::basic_string<CharT> get_time_fmt(std::ios_base & ios);
Возвращение:Атрибут формата времени потока, связанный с<ios
>.
template<typename CharT> void set_time_fmt(std::ios_base& ios, std::basic_string<CharT> const& fmt);
Эффекты:Установите атрибут формата времени потока, связанный с<ios
>параметром<fmt
>.
Формат состоит из нулевых или более директив. Каждая директива состоит из одного из следующих:
* one or more white-space characters (as specified by isspace()); * an ordinary character (neither '%' nor a white-space character); * or a conversion specification.
Каждая спецификация преобразования состоит из символа «%», за которым следует символ преобразования, который определяет требуемую замену. Приложение должно обеспечивать наличие белого пространства или других буквенно-цифровых знаков между любыми двумя спецификациями преобразования. Поддерживаются следующие спецификации конверсии:
Table 7.3. Format tags
Спецификатор формата |
Описание |
Пример |
---|---|---|
< |
Заменил< |
|
< |
День недели с использованием названий будни города; может быть указано сокращенное или полное название. |
«Понедельник». |
< |
Месяц с использованием названий месяца местности; может быть указано сокращенное или полное название. |
«Февраль». |
< |
Не поддерживается. |
|
< |
День месяца< |
|
< |
Дата:< |
|
< |
Дата:< |
|
< |
Час (24 часа)< |
|
< |
Час (12-часовые часы)< |
|
< |
Число дней в году< |
«060» =>29 февраля |
< |
Номер месяца< |
«01» =>январь. |
< |
Минута< |
|
< |
Любое белое пространство |
|
< |
Не поддерживается. |
|
< |
Не поддерживается. |
|
< |
Время как< |
|
< |
Секунды< |
|
< |
Время как< |
|
< |
Не поддерживается. |
|
< |
Дневной день как десятичное число< |
«0» =>Воскресенье. |
< |
Не поддерживается. |
|
< |
Дата, используя формат даты местности. |
|
< |
Не поддерживается. |
|
< |
Не поддерживается. |
«2005». |
< |
Год, включая век (например, 1988). |
// i/o state savers struct duration_style_io_saver { typedef std::ios_base state_type; // the state type is ios_base typedefduration_style
aspect_type; // the aspect type is the __duration_style explicitduration_style_io_saver
(state_type &s);duration_style_io_saver
(state_type &s, aspect_type new_value);~duration_style_io_saver
(); voidrestore
(); };
<state_type
>— версия базового класса IOStreams<std::ios_base
>.
Этот конструктор берет объект потока и сохраняет ссылку на поток и текущее значение конкретного атрибута потока.
explicit duration_style_io_saver(state_type &s);
Эффекты:Конструирует<duration_style_io_saver
>путем хранения<s
>.
Этот конструктор работает так же, как предыдущий, и, кроме того, использует свой второй аргумент, чтобы изменить атрибут потока на новое значение<aspect_type
>.
explicit duration_style_io_saver(state_type &s, aspect_type new_value);
Эффекты:Конструирует<duration_style_io_saver
>путем хранения<s
>. Устанавливает<state_type
><aspect_type
>со значением<new_value
>.
Деструктор восстанавливает атрибут потока к сохраненному значению.
~duration_style_io_saver();
Эффекты:Как будто<restore
>().
Восстановление может быть активировано рано (и часто) с помощью функции восстановления.
void restore();
Эффекты:Восстанавливает атрибут потока<duration_style
>к сохраненному значению.
template<typename CharT = char, typename Traits = std::char_traits<CharT> > structtimezone_io_saver
{ typedef std::basic_ios<CharT, Traits> state_type; typedeftimezone
aspect_type; explicittimezone_io_saver
(state_type &s);timezone_io_saver
(state_type &s, aspect_type new_value);~timezone_io_saver
(); void timezone_io_saver__restore(); };
<state_type
>является версией шаблона базового класса IOStreams<std::basic_ios<CharT,Traits>
>, где<CharT
>является типом персонажа и<Traits
>является классом признаков персонажа. Пользователь обычно размещает фактический объект ввода, вывода или комбинированного потока для параметра типа состояния, а не объект базового класса.
Этот конструктор берет объект потока и сохраняет ссылку на поток и текущее значение конкретного атрибута потока.
explicit timezone_io_saver(state_type &s);
Эффекты:Конструирует<timezone_io_saver
>путем хранения<s
>.
Этот конструктор работает так же, как предыдущий, и использует свой второй аргумент, чтобы изменить атрибут потока на новое значение типа аспекта.
explicit timezone_io_saver(state_type &s, aspect_type new_value);
Эффекты:Конструирует<timezone_io_saver
>путем хранения<s
>. Устанавливает<state_type
><aspect_type
>со значением<new_value
>.
Деструктор восстанавливает атрибут потока к сохраненному значению.
~timezone_io_saver();
Эффекты:Как будто<restore
>().
Восстановление может быть активировано рано (и часто) с помощью функции восстановления.
void restore();
Эффекты:Восстанавливает атрибут потока<timezone
>к сохраненному значению.
template<typename CharT = char, typename Traits = std::char_traits<CharT> > structtime_fmt_io_saver
{ typedef std::basic_ios<CharT, Traits> state_type; explicittime_fmt_io_saver
(state_type &s);time_fmt_io_saver
(state_type &s, basic_string<CharT> const& new_value);~time_fmt_io_saver
(); voidrestore
(); };
<state_type
>является версией шаблона базового класса IOStreams<std::basic_ios<CharT,Traits>
>, где<CharT
>является типом персонажа и<Traits
>является классом признаков персонажа. Пользователь обычно размещает фактический объект ввода, вывода или комбинированного потока для параметра типа состояния, а не объект базового класса.
Этот конструктор берет объект потока и сохраняет ссылку на поток и текущее значение конкретного атрибута потока.
explicit time_fmt_io_saver(state_type &s);
Эффекты:Конструирует<time_fmt_io_saver
>путем хранения<s
>.
Этот конструктор работает так же, как предыдущий, и использует свой второй аргумент, чтобы изменить атрибут потока на новое значение типа аспекта.
explicit time_fmt_io_saver(state_type &s, aspect_type new_value);
Эффекты:Конструирует<time_fmt_io_saver
>путем хранения<s
>. Устанавливает<state_type
><aspect_type
>со значением<new_value
>.
Деструктор восстанавливает атрибут потока к сохраненному значению.
~time_fmt_io_saver();
Эффекты:Как будто<restore
>().
Восстановление может быть активировано рано (и часто) с помощью функции восстановления.
void restore();
Эффекты:Восстанавливает атрибут формата времени потока к сохраненному значению.
namespace boost {
namespace chrono {
template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> >
class duration_get
;
}
}
template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> > class duration_get: public std::locale::facet { public: typedef CharT char_type; // Type of character the facet is instantiated on typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions. typedef InputIterator iter_type; // Type of iterator used to scan the character buffer. explicitduration_get
(size_t refs = 0); template <typename Rep, typename Period> iter_typeget
( iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, duration<Rep, Period>& d, const char_type* pattern, const char_type* pat_end ) const; template <typename Rep, typename Period> iter_typeget
( iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, duration<Rep, Period>& d ) const; template <typename Rep> iter_typeget_value
( iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, Rep& r ) const; iter_typeget_unit
( iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, detail::rt_ratio &rt ) const static std::locale::id id; // Unique identifier for this type of facet.~duration_get
() { } };
<duration_get
>грань извлекает длительность из строки символа и сохраняет полученное значение в аргументе длительности класса d. Лицевая сторона парсирует строку, используя определенный формат в качестве руководства. Если строка не соответствует формату, то грань будет указывать на ошибку, установив аргумент ошибки в iosbase::failbit. Другими словами, подтверждение пользователя требуется для надежного анализа вводимых пользователем длительностей, но сгенерированные машиной форматы могут быть надежно проанализированы. Это позволяет парсерам быть агрессивными в интерпретации вариаций пользователей в стандартных форматах.
explicit duration_get(size_t refs);
Построена грань<duration_get
>.
Параметры:
Эффекты:Конструирует<duration_get
>грань. Если аргумент<refs
>является<0
>, то разрушение объекта делегируется в область, или области, содержащие его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refs
><1
>, то объект должен быть явно удален;<locale
>не будет этого делать. В этом случае объект может поддерживаться в течение жизни нескольких мест.
template <typename Rep, typename Period> iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, duration<Rep, Period> &d, const char_type *pattern, const char_type *pat_end) const;
Извлекает продолжительность из диапазона<[s,end)
>по образцу<[pattern,pat_end)
>.
Параметры:
Требуется:<[s,end)and[pattern,
pat_end)
>должны быть действительными диапазонами.
Эффекты:Функция начинается с оценки<err=
std::ios_base::goodbit
>.
Затем он вычисляет промежуточное представление на основе<Rep
>по следующим правилам:
Rep
>является типом с плавающей точкой, промежуточное представление<long
double
>.Rep
>— подписанный интегральный тип, промежуточное представление —<longlong
>.Rep
>является неподписанным интегральным типом, промежуточное представление неподписано долго.Rep
>.Следующие локальные переменные<r
>промежуточного представления типа и<rt
>типа<rt_ratio
>построены по умолчанию.
Затем он входит в цикл, считывая ноль или более символов<s
>на каждой итерации. Если не указано иное ниже, цикл прекращается, когда выполняется первое из следующих условий:
pattern
==pat_end
>оценивает до<true
>.err==std::ios_base::goodbit
>оценивается как ложное.s==end
>оценивает до<true
>, в этом случае функция оценивает<err
=std::ios_base::eofbit
|std::ios_base::failbit
>.'%'
>, за которым следует символ конверсионного спецификатора, формат. Если количество элементов в диапазоне<[pattern,pat_end)
>недостаточно для однозначного определения того, является ли спецификация преобразования полной и действительной, функция оценивает<err=
std::ios_base::failbit
>. В противном случае функция оценивает<s=
get_value(s,
end,
ios,
err,
r)
>, когда спецификация преобразования является 'v', и<s
=get_value(s,end,ios,err,rt)
>, когда спецификация преобразования является 'u'. Если<err==std::ios_base::goodbit
>сохраняется после оценки выражения, то функция инкрементирует паттерн, чтобы указать только на конец спецификации конверсии и продолжить циклизацию.isspace(*pattern,ios.getloc())
>оценивает до<true
>, и в этом случае функция сначала увеличивает паттерн до<pattern==
pat_end||
!isspace(*pattern,ios.getloc())
>оценивает до<true
>, затем продвигается<s
>до<s==
end||
!isspace(*s,ios.getloc())
>является<true
>и, наконец, возобновляет циклирование.s
>, соответствует элементу, на который указывает паттерн в нечувствительном к случаю сравнении, и в этом случае функция оценивает<++pattern,++s
>и продолжает зацикливание. В противном случае функция оценивает<err
=std::ios_base::failbit
>.Если значение представления длительности и единица уточнения успешно разобраны, вычисление<(rt.num/rt.den)/(Period::num/Period::den)
>сведено к самым низким значениям. Если это соотношение не может храниться без перелива, оценивает<err=
std::ios_base::failbit
>. В противном случае сохраните результат этого деления в<num
>и<den
>.
Если разделение не привело к переполнению, то вычислите<r*num/den
>таким образом, чтобы избежать промежуточного переполнения. Если<r
>имеет интегральный тип и это вычисление не будет точным, оценивает<err=std::ios_base::failbit
>. Если результат вычисления переполнится<Rep
>, оценивает<err=
std::ios_base::failbit
>. В противном случае результат<r*
num/
den
>используется для построения<duration<Rep,Period>
>, который присваивается<d
>.
Возвращение:<s
>, итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительной продолжительности.
template <typename Rep, typename Period> iter_type get( iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, duration<Rep, Period>& d ) const;
Извлекает продолжительность из диапазона<[s,end)
>по шаблону по умолчанию.
Параметры:
Эффекты:Сохраняет шаблон длительности от __duration_unit, связанный с 'ios<in
letsay
>str'. Последний как будто
return get(s, end, ios, err, ios, d, str.data(), str.data() + str.size());
Возвращение:<s
>, итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительной продолжительности.
template <typename Rep> iter_type get_value(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, Rep& r) const;
Извлекает представление длительности из диапазона<[s,end)
>.
Параметры:
Эффекты:Как будто
return std::use_facet<std::num_get<char_type, iter_type>>(ios.getloc()).get(s, end, ios, err, r);
Возврат:<s
>, итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительного значения<Rep
>.
iter_type get_unit(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, detail::rt_ratio &rt) const;
Извлекает единицу длительности из диапазона<[s,end)
>.
Параметры:
Эффекты:
'['
>, то делается попытка поглотить узор формы<"[N/D]"
>, где<N
>и<D
>имеют тип<unsignedlonglong
>.N
>и<D
>, в противном случае оценивает<err=std::ios_base::failbit
>и возвращает<i
>."[N/D]"
>.return do_get_n_d_prefix_unit(facet, i, e, is, err);
'['
>. Возвращайте парс самой длинной строкой, соответствующей одной из единиц длительности.return do_get_prefix_unit(facet, i, e, is, err, rt);
Возвращение:<i
>, итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительной единицы длительности.
virtual iter_type do_get_n_d_prefix_unit( duration_units<CharT> const &facet, iter_type i, iter_type e, std::ios_base&, std::ios_base::iostate& err ) const;
Извлекает отношение времени выполнения, связанное с продолжительностью, когда оно приведено в [N/D] форме.
Это точка расширения этого аспекта, так что мы можем принять во внимание другие периоды, которые могут иметь полезный перевод в других контекстах, например, дни и недели.
Параметры:
Эффекты:Сканирование<s
>для самой длинной из всех форм множественного числа, связанных с единицами продолжительности. В случае успеха установите соответствующее соотношение в<rt
>. В противном случае<err=std::ios_base::failbit
>.
Возвращение:<s
>, итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительного имени.
virtual iter_type do_get_prefix_unit( duration_units<CharT> const &facet, iter_type i, iter_type e, std::ios_base&, std::ios_base::iostate& err, detail::rt_ratio &rt ) const;
Извлекает отношение времени выполнения, связанное с продолжительностью, когда оно приведено в префиксной форме.
Это точка расширения этого аспекта, так что мы можем принять во внимание другие периоды, которые могут иметь полезный перевод в других контекстах, например, дни и недели.
Параметры:
Эффекты:Сканирование<s
>для самой длинной из всех форм множественного числа, связанных с единицами продолжительности. В случае успеха установите соответствующее соотношение в<rt
>. В противном случае<err=std::ios_base::failbit
>.
Возвращение:<s
>, итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительного имени.
namespace boost {
namespace chrono {
template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
class duration_put
;
}
}
template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> > class duration_put: public std::locale::facet { public: typedef CharT char_type; // Type of character the facet is instantiated on. typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions. typedef OutputIterator iter_type; // Type of iterator used to write in the character buffer. explicitduration_put
(size_t refs = 0); template <typename Rep, typename Period> iter_typeput
(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d, const CharT* pattern, const CharT* pat_end) const; template <typename Rep, typename Period> iter_typeput
(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const; template <typename Rep, typename Period> iter_typeput_value
(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const; template <typename Rep, typename Period> iter_typeput_unit
(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const; static std::locale::id id; // Unique identifier for this type of facet.~duration_put
(); };
explicit duration_put(size_t refs);
Построена грань<duration_put
>.
Параметры:
Эффекты:Конструирует грань<duration_put
>. Если аргумент<refs
>является аргументом<0
>, то разрушение объекта делегируется локализации, или локализациям, содержащим его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refs
>является<1
>, то объект должен быть явно удален;<locale
>не будет делать этого. В этом случае объект может поддерживаться в течение жизни нескольких мест.
template <typename Rep, typename Period> iter_type put(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d, const CharT* pattern, const CharT* pat_end) const;
Параметры:
Эффекты:Шаги через последовательность от<pattern
>до<pat_end
>, идентифицируя символы, которые являются частью последовательности шаблона. Каждый символ, который не является частью последовательности шаблонов, записывается на<s
>немедленно, и каждая последовательность шаблонов, как она идентифицирована, приводит к вызову<put_value
>или<put_unit
>; таким образом, элементы шаблонов и другие символы переплетаются на выходе в порядке, в котором они появляются в шаблоне. Последовательности шаблонов идентифицируются путем преобразования каждого символа<c
>в<char
>значение, как если бы<ct.narrow(c,0)
>, где<ct
>является ссылкой на<ctype<charT>
>, полученной из<ios.getloc()
>. Первый символ каждой последовательности равен<'%'
>, за которым следует спецификатор символов паттерна, который может быть<'v'
>для значения продолжительности или<'u'
>для единицы продолжительности. Для каждой достоверной идентифицированной последовательности шаблонов вызовы<put_value(s,ios,d)
>или<put_unit(s,ios,d)
>.
Возвращение:Итератор, указывающий сразу после создания последнего персонажа.
template <typename Rep, typename Period> iter_type put(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
Параметры:
Retrieves Сохраняет шаблон продолжительности из __duration_unit, скажем<str
>. Последний как будто
return put(s, ios, d, str.data(), str.data() + str.size());
Возвращение:Итератор, указывающий сразу после создания последнего персонажа.
template <typename Rep, typename Period> iter_type put_value(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
Параметры:
Эффекты:Как будто std::use_facet
Возвращение:Итератор, указывающий сразу после создания последнего персонажа.
template <typename Rep, typename Period> iter_type put_unit(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
Параметры:
Эффекты:Пусть<facet
>будет<duration_units<CharT>
>гранью, связанной с<ios
>. Если название ассоциированной единицы, как если бы
string_type str = facet.get_unit(get_duration_style(ios), d); s=std::copy(str.begin(), str.end(), s);
В противном случае, отформатируйте блок как<"[Period::num/Period::den]"
>, за которым следует блок, связанный с [N/D], полученный с использованием<facet.get_n_d_unit(get_duration_style(ios),d)
>.
Возвращение:с, итератор, указывающий сразу после последнего произведенного персонажа.
namespace boost { namespace chrono { class rt_ratio; template <typename CharT = char> class duration_units; } }
class rt_ratio { public: template <typename Period> rt_ratio(Period const&) : num(Period::type::num), den(Period::type::den) { } rt_ratio(intmax_t n = 0, intmax_t d = 1) : num(n), den(d) { } intmax_t num; intmax_t den; };
template <typename CharT = char> class duration_units: public std::locale::facet { public: typedef CharT char_type; // Type of character the facet is instantiated on. typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions. static std::locale::id id; // Unique identifier for this type of facet. explicitduration_units
(size_t refs = 0); virtual const string_type*get_n_d_valid_units_start
() const =0; virtual const string_type*get_n_d_valid_units_end
() const=0; virtual const string_type*get_valid_units_start
() const=0; virtual const string_type*get_valid_units_end
() const=0; virtual boolmatch_n_d_valid_unit
(const string_type* k) const = 0; virtual boolmatch_valid_unit
(const string_type* k, rt_ratio& rt) const = 0; virtual string_typeget_pattern
() const=0; template <typename Rep, typename Period> string_typeget_unit
(duration_style style, duration<Rep, Period> const& d) const; template <typename Rep, typename Period> string_typeget_n_d_unit
(duration_style style, duration<Rep, Period> const& d) const; template <typename Period> boolis_named_unit
() const; protected: virtual~duration_units
(); virtual string_typedo_get_n_d_unit
(duration_style style, rt_ratio rt, intmax_t v) const = 0; virtual string_typedo_get_unit
(duration_style style,rt_ratio rt, intmax_t v) const = 0; virtual booldo_is_named_unit
(rt_ratio rt) const =0; };
<duration_units
>грань дает полезную информацию о единицах продолжительности, таких как число форм множественного числа, форма множественного числа, связанная с продолжительностью, текст, связанный с формой множественного числа и периодом продолжительности,
explicit duration_units(size_t refs = 0);
Постройте<duration_units
>грань.
Параметры:
Эффекты:Постройте<duration_units
>грань. Если<refs
>аргумент<0
>, то разрушение объекта делегируется на место, или места, содержащие его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refs
>является<1
>, то объект должен быть явно удален; область не будет делать этого. В этом случае объект может поддерживаться в течение жизни нескольких мест.
virtual const string_type* get_n_d_valid_units_start() const =0;
Возврат:указатель на начало действительных [N/D] единиц.
virtual const string_type* get_n_d_valid_units_end() const=0;
Возврат:указатель на конец действительных единиц [N/D].
virtual const string_type* get_valid_units_start() const=0;
Возврат:указывает на начало действительных единиц, символа или префикса с его различными множественными формами.
virtual const string_type* get_valid_units_end() const=0;
указывает на конец действительных единиц.
virtual bool match_n_d_valid_unit(const string_type* k) const = 0;
Параметры:
Возврат:<true
>, если<k
>соответствует действительной единице.
virtual bool match_valid_unit(const string_type* k, rt_ratio& rt) const = 0;
Параметры:
Эффекты:<rt
>устанавливается на действительный период, когда<k
>соответствует действительной единице.Возврат:<true
>, если<k
>соответствует действительной единице.
virtual string_type get_pattern() const=0;
Возврат:шаблон, который будет использоваться по умолчанию.
template <typename Rep, typename Period> string_type get_unit(duration_style style, duration<Rep, Period> const& d) const;
Возврат:<get_unit(style,d.count(),rt_ratio(Period()))
>, единица, связанная с этой продолжительностью.
template <typename Rep, typename Period> string_type get_n_d_unit(duration_style style, duration<Rep, Period> const& d) const;
Возврат:get_n_d_unit(style, d.count(), rt_ratio(Period())), т.е. единица суффикса [N/D], связанная с этой продолжительностью.
template <typename Period> bool is_named_unit() const;
Возврат:<do_is_named_unit(rt_ratio(Period()))
>, истинно, если единица, связанная с данным Периодом, названа, ложно иначе.
virtual string_type do_get_n_d_unit(duration_style style, rt_ratio rt, intmax_t v) const = 0;
Возврат:единица суффикса [N/D], связанная с этой продолжительностью.
virtual string_type do_get_unit(duration_style style,rt_ratio rt, intmax_t v) const = 0;
Возвращает:единицу, связанную с этой продолжительностью.
virtual bool do_is_named_unit(rt_ratio rt) const =0;
Возврат:истинно, если единица, связанная с данным Периодом, названа, ложно иначе.
template <typename CharT = char> class duration_units_default: public duration_units<CharT> { protected: static const std::size_t pfs_ = 2; // The default English facet has two plural forms. public: typedef CharT char_type; typedef std::basic_string<CharT> string_type; explicit duration_units_default(size_t refs = 0); ~duration_units_default(); bool match_n_d_valid_unit(const string_type* k) const; bool match_valid_unit(const string_type* k, rt_ratio& rt) const; const string_type* get_n_d_valid_units_start()const; const string_type* get_n_d_valid_units_end()const; string_type* get_valid_units_start() const; string_type* get_valid_units_end() const; string_type get_pattern() const; protected: bool do_is_named_unit(rt_ratio rt) const; string_type do_get_n_d_unit(duration_style style, rt_ratio, intmax_t v) const; string_type do_get_unit(duration_style style, rt_ratio rt, intmax_t v) const; virtual std::size_t do_get_plural_forms() const; virtual std::size_t do_get_plural_form(int_least64_t value) const; virtual string_type do_get_unit(duration_style style, ratio<1> u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, ratio<60> u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, ratio<3600> u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, atto u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, femto u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, pico u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, nano u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, micro u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, milli u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, centi u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, deci u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, deca u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, hecto u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, kilo u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, mega u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, giga u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, tera u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, peta u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, exa u, std::size_t pf) const; virtual string_type do_get_ratio_prefix(duration_style style, atto u) const; virtual string_type do_get_ratio_prefix(duration_style style, femto u) const; virtual string_type do_get_ratio_prefix(duration_style style, pico u) const; virtual string_type do_get_ratio_prefix(duration_style style, nano u) const; virtual string_type do_get_ratio_prefix(duration_style style, micro u) const; virtual string_type do_get_ratio_prefix(duration_style style, milli u) const; virtual string_type do_get_ratio_prefix(duration_style style, centi u) const; virtual string_type do_get_ratio_prefix(duration_style style, deci u) const; virtual string_type do_get_ratio_prefix(duration_style style, deca u) const; virtual string_type do_get_ratio_prefix(duration_style style, hecto u) const; virtual string_type do_get_ratio_prefix(duration_style style, kilo u) const; virtual string_type do_get_ratio_prefix(duration_style style, mega u) const; virtual string_type do_get_ratio_prefix(duration_style style, giga u) const; virtual string_type do_get_ratio_prefix(duration_style style, tera u) const; virtual string_type do_get_ratio_prefix(duration_style style, peta u) const; virtual string_type do_get_ratio_prefix(duration_style style, exa u) const; };
Этот класс используется для определения строк для английского языка по умолчанию. Эта грань обозначает единицы, связанные со следующими периодами:
atto
>,femto
>,pico
>,nano
>,micro
>,milli
>,centi
>,deci
>,deca
>,hecto
>,kilo
>,mega
>,giga
>,tera
>,peta
>,exa
>,explicit duration_units_default(size_t refs = 0);
Постройте аспект long_units_default.
Параметры:
Эффекты:Постройте грань длительности_units_default. Если аргумент<refs
>является<0
>, то разрушение объекта делегируется на локализацию, или локализации, содержащие его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refs
>является<1
>, то объект должен быть явно удален. В этом случае объект может поддерживаться в течение жизни нескольких мест.
virtual const string_type* get_n_d_valid_units_start() const;
Возврат:указатель на начало действительных [N/D] единиц.
virtual const string_type* get_n_d_valid_units_end() const;
Возврат:указатель на конец действительных единиц [N/D].
virtual const string_type* get_valid_units_start() const;
Возврат:указывает на начало действительных единиц, символа или префикса с его различными множественными формами.
virtual const string_type* get_valid_units_end() const;
указывает на конец действительных единиц.
virtual bool match_n_d_valid_unit(const string_type* k) const;
Параметры:
Возврат:<true
>, если<k
>соответствует действительной единице.
virtual bool match_valid_unit(const string_type* k, rt_ratio& rt) const;
Параметры:
Эффекты:<rt
>устанавливается на действительный период, когда<k
>соответствует действительной единице.Возврат:<true
>, если<k
>соответствует действительной единице.
virtual string_type get_pattern() const;
Возврат:шаблон, который будет использоваться по умолчанию.
virtual string_type do_get_n_d_unit(duration_style style, rt_ratio rt, intmax_t v) const;
Возврат:единица суффикса [N/D], связанная с этой продолжительностью.
virtual string_type do_get_unit(duration_style style,rt_ratio rt, intmax_t v) const;
Возвращает:единицу, связанную с этой продолжительностью.
virtual bool do_is_named_unit(rt_ratio rt) const;
Возврат:истинно, если единица, связанная с данным Периодом, названа, ложно иначе.
virtual std::size_t do_get_plural_forms() const;
Возвращает:число связанных множественных форм, которыми управляет эта грань.
virtual std::size_t do_get_plural_form(int_least64_t value) const;
Получает ассоциированную множественную форму.
Параметры:
значение:представление продолжительности
Возвращает:множественную форму, связанную с<value
>параметром. В английском языке существует 2 формы множественного числа
virtual string_type do_get_unit(duration_style style, ratio<1> u, std::size_t pf) const;
Параметры:
Возврат:, если стиль является символом, возвращает «s», в противном случае, если pf равен 0, возвращает «второй», если pf равен 1 «секунде».
virtual string_type do_get_unit(duration_style style, ratio<60> u, std::size_t pf) const;
Параметры:
Возврат:, если стиль является символом, возвращает «мин», в противном случае, если pf равен 0, возвращает «минута», если pf равен 1 «минуте».
virtual string_type do_get_unit(duration_style style, ratio<3600> u, std::size_t pf) const;
Параметры:
Возврат:, если стиль является символом, возвращает «h», в противном случае, если pf равен 0, возвращает «час», если pf равен 1 «часу».
virtual string_type do_get_unit(duration_style style, atto u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, femto u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, pico u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, nano u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, micro u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, milli u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, centi u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, deci u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, deca u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, hecto u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, kilo u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, mega u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, giga u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, tera u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, peta u, std::size_t pf) const; virtual string_type do_get_unit(duration_style style, exa u, std::size_t pf) const;
Параметры:
Возвращает:сцепление префикса, связанное с периодом<u
>+ тот, который связан с секундами.
virtual string_type do_get_ratio_prefix(duration_style style, atto u) const; virtual string_type do_get_ratio_prefix(duration_style style, femto u) const; virtual string_type do_get_ratio_prefix(duration_style style, pico u) const; virtual string_type do_get_ratio_prefix(duration_style style, nano u) const; virtual string_type do_get_ratio_prefix(duration_style style, micro u) const; virtual string_type do_get_ratio_prefix(duration_style style, milli u) const; virtual string_type do_get_ratio_prefix(duration_style style, centi u) const; virtual string_type do_get_ratio_prefix(duration_style style, deci u) const; virtual string_type do_get_ratio_prefix(duration_style style, deca u) const; virtual string_type do_get_ratio_prefix(duration_style style, hecto u) const; virtual string_type do_get_ratio_prefix(duration_style style, kilo u) const; virtual string_type do_get_ratio_prefix(duration_style style, mega u) const; virtual string_type do_get_ratio_prefix(duration_style style, giga u) const; virtual string_type do_get_ratio_prefix(duration_style style, tera u) const; virtual string_type do_get_ratio_prefix(duration_style style, peta u) const; virtual string_type do_get_ratio_prefix(duration_style style, exa u) const;
Параметры:
Возврат:в зависимости от значения<style
>возвращают символ или префикс ratio_string.
namespace boost { namespace chrono { // manipulators std::ios_base&symbol_format
(ios_base& ios); std::ios_base&name_format
(ios_base& ios); classduration_fmt
; template<class CharT, class Traits> std::basic_ostream<CharT, Traits>&operator <<
(std::basic_ostream<CharT, Traits>& os, duration_fmt d); template<class CharT, class Traits> std::basic_istream<CharT, Traits>&operator >>
(std::basic_istream<CharT, Traits>& is, duration_fmt d); // duration I/O template <class CharT, class Traits, class Rep, class Period> std::basic_ostream<CharT, Traits>&operator <<
(std::basic_ostream<CharT, Traits>& os, constduration
<Rep, Period>& d); template <class CharT, class Traits, class Rep, class Period> std::basic_istream<CharT, Traits>&operator >>
(std::basic_istream<CharT, Traits>& is,duration
<Rep, Period>& d) } }
Существует параметризованный манипулятор, который принимает в качестве параметра стиль длительности. Формат символа или имени может быть легко выбран путем потоковой передачи манипуляторов<symbol_format
>или<name_format
>соответственно.
class duration_fmt { public: explicitduration_fmt
(duration_style
style) noexcept; #ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS explicitoperator duration_style
() const noexcept; #endifduration_style
get_duration_style
() const noexcept; }; template<class CharT, class Traits> std::basic_ostream<CharT, Traits>&operator <<
(std::basic_ostream<CharT, Traits>& os, duration_fmt d); template<class CharT, class Traits> std::basic_istream<CharT, Traits>&operator >>
(std::basic_istream<CharT, Traits>& is, duration_fmt d);
explicit duration_fmt(duration_style f) noexcept;
Эффекты:Конструирует<duration_fmt
>путем хранения<f
>.
Условия поста:<static_cast<duration_style>(*this)==f
>.
explicit operator duration_style() const noexcept; duration_style get_duration_style() const noexcept;
Возвращение::<duration_fmt
><f
>.
template<class CharT, class Traits> basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& s, duration_fmt d);
Эффекты::<
.set_duration_style
>s,static_cast<<duration_style
>>d)]]
Возвращение::<s
>.
template<class CharT, class Traits> basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& s, duration_fmt d);
Эффекты::<
.set_duration_style
>s,static_cast<<duration_style
>>d)]]
Возвращение::<s
>.
std::ios_base& symbol_format
(ios_base& ios);
Эффекты::<
.set_duration_style
>s,<duration_style
>::символ
Возвращение:<ios
>
std::ios_base& name_format
(ios_base& ios);
Эффекты::<
.set_duration_style
>s,<duration_style
>::префикс
Возвращение:<ios
>
Любой<duration
>может быть передан<basic_ostream
>. Значение времени выполнения<duration
>отформатировано в соответствии с правилами и текущими настройками формата для<duration
><::rep
>и<duration_units
>.
template <class CharT, class Traits, class Rep, class Period> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const duration<Rep, Period>& d);
Эффекты:Ведет себя как отформатированная выходная функция. После построения сторожевого объекта, если сторожевой преобразуется в истинный, вызывает<facet.
, где<put
>os,ososdfacet
>является<
гранью, связанной с<duration_put
><2687]CharTos
>или новым созданным экземпляром по умолчанию<duration_put
><CharT>>
Возвращение:<os
>.
template <class CharT, class Traits, class Rep, class Period> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, duration<Rep, Period>& d)
Эффекты:Ведет себя как отформатированная входная функция. После конструирования<sentry
>объекта, если<sentry
>преобразуется в<true
>, вызывает<facet.
, где<get
>stdistreambuf_iterator<CharT>(),являетсяerrdfacet
>является<duration_get
>>, связанным с<is
>или новым созданным экземпляром по умолчанию<
>duration_get
><CharT
Если что-то не получается, звоните<os.setstate(std::ios_base::failbit
|std::ios_base::badbit)
>.
Возвращение:<is
>
namespace boost { namespace chrono { template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> > class time_point_get; } }
template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> > class time_point_get: public std::locale::facet { public: typedef CharT char_type; // Type of character the facet is instantiated on. typedef InputIterator iter_type; // Type of iterator used to scan the character buffer. explicit __time_point_get_c(size_t refs = 0); template <class Clock, class Duration> iter_type __time_point_get_get(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, time_point<Clock, Duration> &tp, const char_type *pattern, const char_type *pat_end) const; template <class Clock, class Duration> iter_type __time_point_get_get2(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, time_point<Clock, Duration> &tp) const; template <typename Rep, typename Period> iter_type __time_point_get_get_duration(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, duration<Rep, Period>& d) const; template <class Clock> iter_type __time_point_get_get_epoch(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err) const; static std::locale::id id; // Unique identifier for this type of facet. __time_point_get_d(); };
<time_point_get
>используется для разбора последовательности символов, извлекая продолжительность и эпоху в класс<time_point
>.
Узор может содержать спецификаторы формата<%d
>и<%e
>в любом порядке.
Подтверждение пользователя требуется для надежного анализа вводимых пользователем длительностей, но сгенерированные машиной форматы могут быть надежно проанализированы. Это позволяет парсерам быть агрессивными в интерпретации вариаций пользователей в стандартных форматах.
Если конечный итератор достигнут при разборе наборов функций члена<std::ios_base::eofbit
>в<err
>.
explicit time_point_get(size_t refs);
Построение __time_point_get facet.
Параметры:
Эффекты:Конструирует грань<duration_put
>. Если аргумент<refs
>является аргументом<0
>, то разрушение объекта делегируется локализации, или локализациям, содержащим его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refs
>является<1
>, то объект должен быть явно удален;<locale
>не будет делать этого. В этом случае объект может поддерживаться в течение жизни нескольких мест.
template <class Clock, class Duration> iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, time_point<Clock, Duration> &tp, const char_type *pattern, const char_type *pat_end) const;
Параметры:
ios_base
>ios_base::iostate
>time_point
><[pattern,pat_end)
>должен быть действительным диапазоном.
Эффекты:: Функция начинается с оценки<err=
std::ios_base::goodbit
>. Затем он входит в цикл, считывая ноль или более символов<s
>на каждой итерации. Если не указано иное ниже, цикл прекращается, когда выполняется первое из следующих условий:
pattern
==pat_end
>оценивает до<true
>.err==std::ios_base::goodbit
>соответствует<false
>.s==end
>оценивает до<true
>, в этом случае функция оценивает<err
=std::ios_base::eofbit
|std::ios_base::failbit
>.'%'
>, за которым следует символ конверсионного спецификатора, функции<get_duration
>или<get_epoch
>называются в зависимости от того, является ли формат<'d'
>или<'e'
>. Если количество элементов в диапазоне<[pattern,pat_end)
>недостаточно для однозначного определения того, является ли спецификация преобразования полной и действительной, функция оценивает<err|=
std::ios_base::failbit
>. В противном случае функция оценивает<s=
do_get(s,
end,
ios,
err,
d)
>. Если<err==
std::ios_base::goodbit
>выполняется после оценки выражения, шаблон приращения функции указывает только на конец спецификации преобразования и продолжает зацикливаться.isspace(*pattern,ios.getloc())
>оценивает до<true
>, и в этом случае функция сначала прирастает<pattern
>до<pattern==pat_end
||!isspace(*pattern,
ios.getloc())
>оценивает до<true
>, затем продвигается<s
>до<s==
end||
!isspace(*s,ios.getloc())
>является<true
>и, наконец, возобновляет циклирование.s
>, соответствует элементу, на который указывает паттерн в нечувствительном к случаю сравнении, и в этом случае функция оценивает<++pattern
>,<++s
>и продолжает зацикливание. В противном случае функция оценивает<err=
std::ios_base::failbit
>.Возвращение:Итератор, указывающий чуть дальше последнего символа, который может быть определен как часть действительной точки времени.
template <class Clock, class Duration> iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, time_point<Clock, Duration> &tp) const;
Параметры:
ios_base
>ios_base::iostate
>time_point
>Эффекты:Сохраняет закономерность длительности от<duration_unit
>грань, скажем<str
>. Последний как будто
return get(s, end, ios, err, ios, d, str.data(), str.data() + str.size());
Возвращение:Итератор, указывающий только на последний символ, который может быть определен как часть действительного имени.
template <typename Rep, typename Period> iter_type get_duration(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, duration<Rep, Period>& d) const;
Эффекты:Как будто
return facet.get(s, end, ios, err, d);
где<facet
>— либо грань<duration_get
>, связанная с<ios
>, либо грань по умолчанию<duration_get
>.
Возвращение:Итератор, указывающий только на последний символ, который может быть определен как часть действительной продолжительности.
template <class Clock> iter_type get_epoch(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err) const;
Эффекты:Пусть<facet
>будет<time_point_units
>гранью, ассоциированной с<ios
>, или новым экземпляром по умолчанию __time_point_units_default гранью. Пусть<epoch
>будет строкой эпохи, связанной с<Clock
>, используя эту грань. Сканирование<s
>, чтобы соответствовать<epoch
>или<end
>.
Если не совпадать до достижения<end
><std::ios_base::failbit
>, то устанавливается<err
>. Если<end
>достигнут<std::ios_base::failbit
>, то<err
>установлен.
Возвращение:Итератор, указывающий чуть дальше последнего персонажа, который можно определить как часть эпохи.
namespace boost { namespace chrono { template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> > class time_point_put; } }
Форму __time_point_put обеспечивают возможности для форматированного вывода значений<time_point
>. Функция __time_point_put берет<time_point
>и форматирует его в представление строк символов.
парам ChatT — тип персонажа tparam OutputIterator модель<OutputIterator
>
template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> > class time_point_put: public std::locale::facet { public: typedef CharT char_type; // Type of character the facet is instantiated on. typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions. typedef OutputIterator iter_type; // Type of iterator used to write in the character buffer. explicit time_point_put(size_t refs = 0); ~time_point_put(); template <class Clock, class Duration> iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp, const CharT* pattern, const CharT* pat_end) const; template <class Clock, class Duration> iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp) const; template <typename Rep, typename Period> iter_type put_duration(iter_type i, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const; template <typename Clock> iter_type put_epoch(iter_type i, std::ios_base& os) const; static std::locale::id id; // Unique identifier for this type of facet. };
explicit time_point_put(size_t refs = 0);
Постройте грань time_point_put.
Эффекты:Постройте грань Time_point_put. Если аргумент<refs
>является<0
>, то разрушение объекта делегируется в область, или области, содержащие его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refs
>является<1
>, то объект должен быть явно удален. В этом случае объект может поддерживаться в течение жизни нескольких мест.
Параметры:
template <class Clock, class Duration> iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp, const CharT* pattern, const CharT* pat_end) const;
Параметры:
time_point
>Эффекты:Шаги по последовательности от<pattern
>до<pat_end
>, идентифицирующие символы, которые являются частью последовательности шаблонов. Каждый символ, который не является частью последовательности шаблонов, записывается<s
>немедленно, и каждая последовательность шаблонов, как она определена, приводит к вызову __put_duration или __put_epoch; таким образом, элементы шаблона и другие символы переплетаются на выходе в порядке, в котором они появляются в шаблоне. Последовательности шаблонов идентифицируются путем преобразования каждого символа<c
>в<char
>значение, как если бы<ct.narrow(c,0)
>, где<ct
>является ссылкой на<ctype<charT>
>, полученной из<ios.getloc()
>. Первый символ каждой последовательности равен<'%'
>, за которым следует спецификация символа паттерна, которая может быть<'d'
>для значения длительности или<'e'
>для эпохи. Для каждой достоверной идентифицированной последовательности шаблонов вызовы<put_duration(s,ios,fill,tp.time_since_epoch())
>или<put_epoch(s,ios)
>.
Возвращение:Итератор, указывающий сразу после создания последнего персонажа.
template <class Clock, class Duration> iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp) const;
Параметры:
time_point
>Эффекты:Хранит шаблон time_point из грани __time_point_unit, скажем<str
>. Последний как будто
return put(s, ios, fill, tp, str.data(), str.data() + str.size());
Возвращение:Итератор, указывающий сразу после создания последнего персонажа.
template <typename Rep, typename Period> iter_type put_duration(iter_type i, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
Параметры:
duration
>Эффекты:Как будто<facet.put(s,ios,fill,d)
>, где гранью является<
грань, связанная с<duration_put
><CharT>ios
>или новым экземпляром<
.duration_put
><CharT>
Возвращение:Итератор, указывающий сразу после создания последнего персонажа.
template <typename Clock> iter_type put_epoch(iter_type i, std::ios_base& os) const;
Параметры:
Эффекты:Как будто
string_type str = facet.template get_epoch<Clock>(); s=std::copy(str.begin(), str.end(), s);
где грань —<
грань, связанная с<time_point_units
><CharT>ios
>или новым экземпляром<__time_point_units_default<CharT>
>.
Возвращение:с, итератор, указывающий сразу после последнего произведенного персонажа.
namespace boost { namespace chrono { template <typename CharT, typename Clock, typename TPUFacet> std::basic_string<CharT> get_epoch_custom(Clock, TPUFacet& f); template <typename CharT=char> class time_point_units; template <typename CharT=char> class time_point_units_default, } }
template <typename CharT, typename Clock, typename TPUFacet> std::basic_string<CharT> get_epoch_custom(Clock, TPUFacet& f);
Настройка указывает на эпоху, связанную с часами<Clock
>. По умолчанию вызывает<f.do_get_epoch(Clock())
>.
Пользователь может перегрузить эту функцию.
Возвращение:Призыв в сторону как бы
return f.do_get_epoch(Clock());
<time_point_units
>грань дает полезную информацию о шаблоне time_point, тексте, связанном с эпохой time_point,
template <typename CharT=char> class time_point_units: public std::locale::facet { public: typedef CharT char_type; // Type of character the facet is instantiated on. typedef std::basic_string<char_type> string_type; // Type of character string used by member functions. static std::locale::id id; // Unique identifier for this type of facet. explicit time_point_units(size_t refs = 0); virtual string_type get_pattern() const =0; template <typename Clock> string_type get_epoch() const; protected: virtual ~time_point_units(); virtual string_type do_get_epoch(system_clock) const=0; virtual string_type do_get_epoch(steady_clock) const=0; #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) virtual string_type do_get_epoch(process_real_cpu_clock) const=0; virtual string_type do_get_epoch(process_user_cpu_clock) const=0; virtual string_type do_get_epoch(process_system_cpu_clock) const=0; virtual string_type do_get_epoch(process_cpu_clock) const=0; #endif #if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) virtual string_type do_get_epoch(thread_clock) const=0; #endif };
explicit time_point_units(size_t refs = 0);
Постройте<time_point_units
>грань.
Параметры:
Эффекты:Постройте<time_point_units
>грань. Если аргумент<refs
><0
>, то разрушение объекта делегируется в область, или области, содержащие его. Это позволяет пользователю игнорировать проблемы управления временем жизни. С другой стороны, если<refsvis
>1' тогда объект должен быть явно удален; местоимение не будет делать этого. В этом случае объект может поддерживаться в течение жизни нескольких мест.
virtual string_type get_pattern() const =0;
Возврат:шаблон, который будет использоваться по умолчанию.
template <typename Clock> string_type get_epoch() const;
Возвращается:эпоха, связанная с часами<Clock
>как<returnget_epoch_custom<CharT>(Clock(),*this);
>
virtual string_type do_get_epoch(system_clock) const=0;
Параметры:
system_clock
>.Возвращение:Эпоха, связанная с<system_clock
>.
virtual string_type do_get_epoch(steady_clock) const=0;
Параметры:
steady_clock
>.Возвращение:Эпохальная струна, связанная с<steady_clock
>.
#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) virtual string_type do_get_epoch(process_real_cpu_clock) const=0; #endif
Параметры:
process_real_cpu_clock
>.Возвращение:Эпоха, связанная с<process_real_cpu_clock
>.
#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) virtual string_type do_get_epoch(process_user_cpu_clock) const=0; #endif
Параметры:
process_real_cpu_clock
>.Возвращение:Эпохальная строка, связанная с process_user_cpu_clock.
#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) virtual string_type do_get_epoch(process_system_cpu_clock) const=0; #endif
Параметры:
process_system_cpu_clock
>.Возвращение:Эпохальная строка, связанная с process_user_cpu_clock.
#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) virtual string_type do_get_epoch(process_cpu_clock) const=0; #endif
Параметры:
process_cpu_clock
>.Возвращение:Эпохальная строка, связанная с процессом_cpu_clock.
#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) virtual string_type do_get_epoch(thread_clock) const=0; #endif
Параметры:
thread_clock
>.3337Возвращение:Эпохальная струна, связанная с<thread_clock
>.
// This class is used to define the strings for the default English template <typename CharT=char> class time_point_units_default: public time_point_units<CharT> { public: typedef CharT char_type; // Type of character the facet is instantiated on. typedef std::basic_string<char_type> string_type; // Type of character string used by member functions. explicit time_point_units_default(size_t refs = 0); ~time_point_units_default(); /** * __returns the default pattern "%d%e". */ string_type get_pattern() const; protected: /** * [param c a dummy instance of __system_clock. * __returns The epoch string returned by `clock_string<system_clock,CharT>::since()`. */ string_type do_get_epoch(system_clock ) const; /** * [param c a dummy instance of __steady_clock. * __returns The epoch string returned by `clock_string<steady_clock,CharT>::since()`. */ string_type do_get_epoch(steady_clock ) const; #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) /** * [param c a dummy instance of __process_real_cpu_clock. * __returns The epoch string returned by `clock_string<process_real_cpu_clock,CharT>::since()`. */ string_type do_get_epoch(process_real_cpu_clock ) const; /** * [param c a dummy instance of __process_user_cpu_clock. * __returns The epoch string returned by `clock_string<process_user_cpu_clock,CharT>::since()`. */ string_type do_get_epoch(process_user_cpu_clock ) const; /** * [param c a dummy instance of __process_system_cpu_clock. * __returns The epoch string returned by `clock_string<process_system_cpu_clock,CharT>::since()`. */ string_type do_get_epoch(process_system_cpu_clock ) const; /** * [param c a dummy instance of __process_cpu_clock. * __returns The epoch string returned by `clock_string<process_cpu_clock,CharT>::since()`. */ string_type do_get_epoch(process_cpu_clock ) const; #endif #if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) /** * [param c a dummy instance of __thread_clock. * __returns The epoch string returned by `clock_string<thread_clock,CharT>::since()`. */ string_type do_get_epoch(thread_clock ) const; #endif };
namespace boost { namespace chrono { // manipulators unspecifiedtime_fmt
(timezone tz); template<class CharT> unspecifiedtime_fmt
(timezone tz, basic_string<CharT> f); template<class CharT> unspecifiedtime_fmt
(timezone tz, const CharT* f); // i/o state savers template<typename CharT = char, typename Traits = std::char_traits<CharT> > structtimezone_io_saver
{ typedef std::basic_ios<CharT, Traits> state_type; typedef timezone aspect_type; explicittimezone_io_saver
(state_type &s);timezone_io_saver
(state_type &s, aspect_type new_value);~timezone_io_saver
(); void timezone_io_saver__restore(); }; template<typename CharT = char, typename Traits = std::char_traits<CharT> > structtime_fmt_io_saver
{ typedef std::basic_ios<CharT, Traits> state_type; explicit time_fmt_io_saver(state_type &s); time_fmt_io_saver(state_type &s, basic_string<CharT> const& new_value); ~ time_fmt_io_saver(); void restore(); }; // system_clock I/O template <class CharT, class Traits, classDuration
> basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os, const time_point<system_clock,Duration
>& tp); template <class CharT, class Traits, classDuration
> basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is, time_point<system_clock,Duration
>& tp); // Other Clocks I/O template <class CharT, class Traits, classClock
, classDuration
> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const time_point<Clock
,Duration
>& tp); template <class CharT, class Traits, classClock
, classDuration
> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, time_point<Clock
,Duration
>& tp); } }
unspecified time_fmt(timezone
tz);
3346Возвращение:: Неопределённый объект, который при передаче на<basic_ostream<CharT,Traits>
>или<basic_istream<CharT,Traits>
><s
>будет иметь последствия:
set_timezone
(s, tz);
template<class CharT> unspecified time_fmt(timezone tz, basic_string<CharT> f); template<class CharT> unspecified time_fmt(timezone tz, const CharT* f);
3346Возвращение:: Неопределённый объект, который при передаче на<basic_ostream<CharT,Traits>
>или<basic_istream<CharT,Traits>
><s
>будет иметь последствия:
set_timezone
(s, tz);set_time_fmt
<CharT>(s, f);
template <class CharT, class Traits, classDuration
> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const time_point<system_clock,Duration
>& tp);
Эффекты:Ведет себя как отформатированная выходная функция. После построения объекта<sentry
>, если<sentry
>преобразуется в<true
>, устанавливает локальную переменную<tz
>типа<timezone
>до<get_timezone(os)
>. Кроме того, строка формата, полученная с<
, записывается как пара<get_time_fmt
>()const
CharT*
>. Если у потока нет временной грани, то эта пара<constCharT*
>представляет собой пустой диапазон.
Затем<tp
>превращается в<time_t
>, а это<time_t
>превращается в<tm
>. Преобразование в<tm
>использование<gmtime
>(при наличии), если часовой пояс<utc
>, иначе он использует местное время (при наличии).
Используя грань<std::time_put
>, хранящуюся в<os
>, этот вставщик записывает символы в поток с использованием<tm
>и строки форматирования, хранящейся в гране<time_punct
>, если только эта грань не отсутствовала или если она не обеспечивала пустую строку.
Если строка форматирования пуста, то выводим следующее:
Первый выход<tm
>с использованием<"%F %H:%M:"
>
Следующий вывод a<double
>, представляющий количество секунд, хранящихся в<tm
>, плюс дробные секунды, представленные в<tp
>. Формат должен быть<ios::fixed
>, а точность должна быть достаточной для точного представления<system_clock::duration
>(например, если<system_clock::period
>является микро, точность должна быть достаточной для вывода шести цифр после десятичной точки). Если число секунд меньше<10
>, то выходной сигнал должен быть префиксирован<'0'
>.
Наконец, если<tz
>является<local
>, выведите<tm
>, используя шаблон «%z». Прибавьте последовательность «+0000» к потоку.
Если что-то не получается, звоните<os.setstate(ios_base::failbit
|ios_base::badbit)
>.
Возвращение:<os
>
template <class CharT, class Traits, classDuration
> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, time_point<system_clock,Duration
>& tp);
Эффекты:Ведет себя как отформатированная входная функция. После построения сторожевого объекта, если сторожевой преобразуется в истинный, получает<std::time_get
>грань от<is
>и получает строку форматирования таким же образом, как описано для оператора вставки. Извлеките<tm
>, используя поставляемую строку форматирования, или, если она пуста, по умолчанию, как описано для оператора вставки. Обратите внимание, что извлечение не использует данные<timezone
>, хранящиеся в<is
>для строки по умолчанию, поскольку информация<timezone
>хранится в потоке.
Любой<time_point<system_clock,
вставленный, а затем извлеченный должен привести к равному<Duration
>>time_point<system_clock,
, за исключением любой точности, которая не была вставлена.Duration
>>
Пример:
void test(std::chrono::system_clock::time_point tp) { std::stringstream s; s << tp; boost::chrono::system_clock::time_point tp2; s >> tp2; assert(tp == tp2); }
Возвращение:
template <class CharT, class Traits, classClock
, classDuration
> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const time_point<Clock
,Duration
>& tp);
Эффекты:Ведет себя как отформатированная выходная функция. После построения<sentry
>объекта, если<sentry
>преобразуется в<true
>, вызывает<facet.put(os,os,os.fill(),tp)
>, где<facet
>является<time_point_put<CharT>
>гранью, связанной с<os
>, или новым созданным экземпляром по умолчанию<time_point_put<CharT>
>гранью.
Возвращение:<os
>.
Пример:
22644271279698 nanoseconds since boot
template <class CharT, class Traits, classClock
, classDuration
> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, time_point<Clock
,Duration
>& tp);
Выдержки<tp
>из потока<is
>.
Эффекты:Ведет себя как отформатированная входная функция. После построения объекта<sentry
>, если<sentry
>преобразуется в<true
>, вызывает<facet.get(is,std::istreambuf_iterator<CharT,
Traits>(),
is,
err,
tp)
>, где<facet
>является<time_point_get<CharT>
>гранью, связанной с<is
>, или новым созданным экземпляром по умолчанию<time_point_get<CharT>
>гранью.
Если что-то не получается, звоните<os.setstate(std::ios_base::failbit
|std::ios_base::badbit)
>.
Возвращение:<is
>.
namespace boost { namespace chrono { template <class To, class Rep, class Period> To floor(const duration<Rep, Period>& d); } }
Эта функция округляет данный параметр.
namespace boost { namespace chrono { template <class To, class Rep, class Period> To round(const duration<Rep, Period>& d); } }
Эта функция округляется до ближайшего, даже на привязке данного параметра.
namespace boost { namespace chrono { template <class To, class Rep, class Period> To ceil(const duration<Rep, Period>& d); } }
Эта функция округляет данный параметр.
BOOST_CHRONO_HAS_PROCESS_CLOCKS
process_real_cpu_clock
process_user_cpu_clock
process_system_cpu_clock
process_cpu_clock
process_times
process_times
Input/Outputduration_values
Specialization for process_times<>
clock_string<process_real_cpu_clock>
Specializationclock_string<process_user_cpu_clock>
Specializationclock_string<process_system_cpu_clock>
Specializationclock_string<process_cpu_clock>
Specializationnumeric_limits
Specialization for process_times<>
Знание того, сколько времени занимает выполнение программы, полезно как в тестовой, так и в производственной среде. Также полезно, если такая информация о времени разбивается на реальное (настенные часы) время, время процессора, затрачиваемое пользователем, и время процессора, затрачиваемое операционной системой, обслуживающей запросы пользователей.
Часы процесса не включают время, затрачиваемое процессом ребенка.
#define BOOST_CHRONO_HAS_PROCESS_CLOCKS namespace boost { namespace chrono { class process_real_cpu_clock; class process_user_cpu_clock; class process_system_cpu_clock; class process_cpu_clock; template <typename Rep> struct process_times; template <class CharT, class Traits, class Rep> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, process_times<Rep> const& rhs); template <class CharT, class Traits, class Rep> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, process_times<Rep> const& rhs); template <class Rep> struct duration_values<process_times<Rep> >; template <class CharT> struct clock_string<process_real_cpu_clock, CharT>; struct clock_string<process_user_cpu_clock, CharT>; struct clock_string<process_system_cpu_clock, CharT>; struct clock_string<process_cpu_clock, CharT>; } } namespace std { template <class Rep> class numeric_limits<boost::chrono::process_times<Rep> >; }
Этот макрос определяется, поддерживает ли платформа процессные часы.
<process_real_cpu_clock
>удовлетворяют требованиям<Clock
>.
Класс<process_real_cpu_clock
>обеспечивает доступ к реальным настенным часам процесса, т.е. к реальным часам CPU-времени процесса вызова. Процесс относительного текущего времени можно получить по телефону<process_real_cpu_clock::now()
>.
class process_real_cpu_clock { public: typedefnanoseconds
duration; typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point
<process_real_cpu_clock> time_point; static constexpr bool is_steady = true; static time_point now( ) noexcept; static time_point now( system::error_code & ec ); };
<process_user_cpu_clock
>удовлетворяют требованиям<Clock
>.
<process_user_cpu_clock
>класс обеспечивает доступ к постоянному времени процессора пользователя процесса вызова. Процесс относительного текущего времени пользователя можно получить по телефону<process_user_cpu_clock::now()
>.
class process_user_cpu_clock { public: typedefnanoseconds
duration; typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point
<process_user_cpu_clock> time_point; static constexpr bool is_steady = true; static time_point now( ) noexcept; static time_point now( system::error_code & ec ); };
<process_system_cpu_clock
>удовлетворяют требованиям<Clock
>.
<process_system_cpu_clock
>класс обеспечивает доступ к системе CPU-времени устойчивых часов процесса вызова. Процесс относительной системы текущего времени можно получить по телефону<process_system_cpu_clock::now()
>.
class process_system_cpu_clock { public: typedefnanoseconds
duration; typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point
<process_system_cpu_clock> time_point; static constexpr bool is_steady = true; static time_point now( ) noexcept; static time_point now( system::error_code & ec ); };
<process_cpu_clock
>может рассматриваться как<tuple<process_real_cpu_clock,process_user_cpu_clock,process_system_cpu_clock>
>.
<process_cpu_clock
>обеспечивает тонкую обертку вокруг API времени процесса операционной системы. Для POSIX-подобных систем это функция time(), а для Windows — функция<GetProcessTimes()
>.
Процесс относительно реального, пользовательского и системного времени можно получить сразу по телефону<process_clocks::now()
>.
class process_cpu_clock { public: typedef process_times<nanoseconds::rep> times ; typedefduration
<times, nano> duration; typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point
<process_cpu_clock> time_point; static constexpr bool is_steady = true; static time_point now( ) noexcept; static time_point now( system::error_code & ec ); };
Этот класс представляет собой класс<process_cpu_clock::duration
>. Как таковой он должен реализовывать арифметические операторы.
template <typename Rep> struct process_times : arithmetic<process_times<Rep>, multiplicative<process_times<Rep>, Rep, less_than_comparable<process_times<Rep> > > > { Rep real; // real (i.e wall clock) time Rep user; // user cpu time Rep system; // system cpu time times(); times( process_real_cpu_clock::rep r, process_user_cpu_clock::rep u, process_system_cpu_clock::rep s); template <typename Rep2> explicit process_times( Rep2 r); template <typename Rep2> explicit process_times( process_times<Rep2> const& rhs); operator rep() const; bool operator==(process_times const& rhs); template <typename Rep2> bool operator==(process_times<Rep2> const& rhs); times operator+=(process_times const& rhs); times operator-=(process_times const& rhs); times operator*=(process_times const& rhs); times operator/=(process_times const& rhs); bool operator<(process_times const & rhs) const; };
template <class CharT, class Traits, class Rep> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, process_times<Rep> const& rhs);
Эффекты:Выведите каждую часть, разделенную на ';' и окруженную '{', '}'.
Броски:Никаких.
template <class CharT, class Traits, class Rep> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, process_times<Rep> const& rhs);
Эффекты:перевешивает значение rhs, если входной поток имеет формат «{r;u;s}». В противном случае установите состояние входного потока как failbit | eofbit.
Броски:Никаких.
template <class Rep>
struct duration_values
<process_times<Rep> >
{
static process_times<Rep> zero();
static process_times<Rep> max();
static process_times<Rep> min();
};
Конкретные функции<times
><zero()
>,<max()
>и<min()
>используют относительные функции для представления каждого компонента.
template <class CharT> struct clock_string<process_real_cpu_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); };
<clock_string<>::name()
>возвращает «process_real_cpu_clock».
<clock_string<>::since()
>Возвращение «с момента запуска процесса»
template <class CharT> struct clock_string<process_user_cpu_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); };
<clock_string<>::name()
>возвращает «process_real_cpu_clock».
<clock_string<>::since()
>Возвращение «с момента запуска процесса»
template <class CharT> struct clock_string<process_system_cpu_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); };
<clock_string<>::name()
>возвращает «process_real_cpu_clock».
<clock_string<>::since()
>Возвращение «с момента запуска процесса»
template <class CharT> struct clock_string<process_cpu_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); };
<clock_string<>::name()
>возвращает «process_real_cpu_clock».
<clock_string<>::since()
>Возвращение «с момента запуска процесса»
namespace std { template <> class numeric_limits<boost::chrono::process_times<Rep>> { typedef boost::chrono::process_times<Rep> Res; public: static const bool is_specialized = true; static Res min(); static Res max(); static Res lowest(); static const int digits; static const int digits10; static const bool is_signed = false; static const bool is_integer = true; static const bool is_exact = true; static const int radix = 0; }; }
Специализированные функции<process_times<Rep>
><min()
>,<max()
>и<lowest()
>используют относительные функции для представления каждого компонента.
Заметки
min()
>возвращает кортеж мин.max()
>возвращает кортеж макс.lowest()
>возвращает кортеж низших.digits
>— сумма (двоичных) цифр.digits10
>— сумма цифр 10.Знание времени, необходимого для выполнения нити, полезно как в тестовой, так и в производственной среде.
#define BOOST_CHRONO_HAS_THREAD_CLOCK #define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY namespace boost { namespace chrono { class thread_clock; template <class CharT> struct clock_string<thread_clock, CharT>; } }
Этот макрос определяется, поддерживает ли платформа резьбовые часы.
Этот макрос определяется, если платформа имеет резьбовые часы. Его значение истинно, если оно устойчиво и ложно в противном случае.
<thread_clock
>удовлетворяют требованиям<Clock
>.
<thread_clock
>класс обеспечивает доступ к реальным резьбовым настенным часам, т.е. реальным CPU-часам вызывающего потока. Относительное время потока можно получить по телефону<thread_clock::now()
>.
class thread_clock { public: typedefnanoseconds
duration; typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point
<thread_clock> time_point; static constexpr bool is_steady = BOOST_CHRONO_THREAD_CLOCK_IS_STEADY; static time_point now( ) noexcept; static time_point now( system::error_code & ec ); };
#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) template <class CharT> struct clock_string<thread_clock, CharT> { static std::basic_string<CharT> name(); static std::basic_string<CharT> since(); }; #endif
<clock_string<>::name()
>возвращает «thread_clock».
<clock_string<>::since()
>Возвращение "с момента запуска потока"
Статья Reference раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 7. Boost.Chrono 2.0.5 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 7. Boost.Chrono 2.0.5 ::
реклама |