78 lines
14 KiB
HTML
78 lines
14 KiB
HTML
<!DOCTYPE html><html lang='en'><head><title>[qty.chrono]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>5.9</a> <span class='texttt'>std​::​chrono</span> interoperability <a class='abbr_ref'>[qty.chrono]</a></h2><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Period<span class='anglebracket'>></span>
|
|
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >time-unit-from-chrono-period</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>
|
|
<span class='curlybracket'>{</span>
|
|
<span class='keyword'>using</span> <span class='keyword'>namespace</span> si;
|
|
|
|
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>nanoseconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> nano<span class='anglebracket'><</span>second<span class='anglebracket'>></span>;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>microseconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> micro<span class='anglebracket'><</span>second<span class='anglebracket'>></span>;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>milliseconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> milli<span class='anglebracket'><</span>second<span class='anglebracket'>></span>;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>seconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> second;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>minutes<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> minute;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>hours<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> hour;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>days<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> day;
|
|
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>weeks<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>return</span> mag<span class='anglebracket'><</span><span class='literal'>7</span><span class='anglebracket'>></span> <span class='operator'>*</span> day;
|
|
<span class='keyword'>else</span>
|
|
<span class='keyword'>return</span> mag_ratio<span class='anglebracket'><</span>Period<span class='operator'>::</span>num, Period<span class='operator'>::</span>den<span class='anglebracket'>></span> <span class='operator'>*</span> second;
|
|
<span class='curlybracket'>}</span>
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>></span>
|
|
<span class='keyword'>struct</span> <a class='index' id='lib:quantity_like_traits,std::chrono::duration'></a>quantity_like_traits<span class='anglebracket'><</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> reference <span class='operator'>=</span> <i >time-unit-from-chrono-period</i><span class='anglebracket'><</span>Period<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_import <span class='operator'>=</span> <span class='literal'>false</span>;
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_export <span class='operator'>=</span> <span class='literal'>false</span>;
|
|
<span class='keyword'>using</span> rep <span class='operator'>=</span> Rep;
|
|
<span class='keyword'>using</span> <i >T</i> <span class='operator'>=</span> std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span>;
|
|
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> rep to_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> <i >T</i><span class='operator'>&</span> q<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
|
|
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'><</span>rep<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='curlybracket'>{</span>
|
|
<span class='keyword'>return</span> q<span class='operator'>.</span>count<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
|
<span class='curlybracket'>}</span>
|
|
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <i >T</i> from_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> rep<span class='operator'>&</span> v<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
|
|
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'><</span>rep<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='curlybracket'>{</span>
|
|
<span class='keyword'>return</span> <i >T</i><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span>;
|
|
<span class='curlybracket'>}</span>
|
|
<span class='curlybracket'>}</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>></span>
|
|
<span class='keyword'>struct</span> <span id='lib:chrono_point_origin_'><a class='hidden_link' href='#lib:chrono_point_origin_' title='5.9 std​::​chrono interoperability [qty.chrono]'>chrono_point_origin_</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> absolute_point_origin<span class='anglebracket'><</span>isq<span class='operator'>::</span>time<span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
|
<span class='keyword'>using</span> clock <span class='operator'>=</span> Clock;
|
|
<span class='curlybracket'>}</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Clock, <span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>></span>
|
|
<span class='keyword'>struct</span> <a class='index' id='lib:quantity_point_like_traits,std::chrono::time_point'></a>quantity_point_like_traits<span class='anglebracket'><</span>
|
|
std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'><</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> reference <span class='operator'>=</span> <i >time-unit-from-chrono-period</i><span class='anglebracket'><</span>Period<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> point_origin <span class='operator'>=</span> chrono_point_origin<span class='anglebracket'><</span>Clock<span class='anglebracket'>></span>;
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_import <span class='operator'>=</span> <span class='literal'>false</span>;
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_export <span class='operator'>=</span> <span class='literal'>false</span>;
|
|
<span class='keyword'>using</span> rep <span class='operator'>=</span> Rep;
|
|
<span class='keyword'>using</span> <i >T</i> <span class='operator'>=</span> std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'><</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></span>;
|
|
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> rep to_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> <i >T</i><span class='operator'>&</span> tp<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
|
|
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'><</span>rep<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='curlybracket'>{</span>
|
|
<span class='keyword'>return</span> tp<span class='operator'>.</span>time_since_epoch<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='operator'>.</span>count<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
|
<span class='curlybracket'>}</span>
|
|
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <i >T</i> from_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> rep<span class='operator'>&</span> v<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
|
|
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'><</span>rep<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
|
<span class='curlybracket'>{</span>
|
|
<span class='keyword'>return</span> <i >T</i><span class='parenthesis'>(</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
|
<span class='curlybracket'>}</span>
|
|
<span class='curlybracket'>}</span>;
|
|
|
|
<span class='curlybracket'>}</span>
|
|
</span></div></div></body></html> |