4#ifndef _Stroika_Foundation_Time_Duration_h_
5#define _Stroika_Foundation_Time_Duration_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
13#if qStroika_Foundation_Common_Platform_POSIX
15#elif qStroika_Foundation_Common_Platform_Windows
19#include "Stroika/Foundation/Characters/FloatConversion.h"
21#include "Stroika/Foundation/Common/Common.h"
22#include "Stroika/Foundation/Execution/Exceptions.h"
52namespace Stroika::Foundation::Time {
96 class Duration final :
public chrono::duration<double> {
98 using inherited = chrono::duration<double>;
113 template <Characters::IConvertibleToString STRINGISH_T>
121 template <
typename DURATION_REP,
typename DURATION_PERIOD>
122 constexpr Duration (
const chrono::duration<DURATION_REP, DURATION_PERIOD>& d);
132 using InternalNumericFormatType_ = inherited::rep;
137 nonvirtual
void clear ();
142 constexpr bool empty ()
const;
184 template <
typename T>
187 Common::ITimePoint<T>);
189 nonvirtual T
As (Characters::FloatConversion::SignificantFigures
p)
const
204 Common::ITimePoint<T>);
245 static const PrettyPrintInfo kDefaultPrettyPrintInfo;
265 struct AgePrettyPrintInfo {
271 double fNowThreshold{};
275 static const AgePrettyPrintInfo kDefaultAgePrettyPrintInfo;
295 const PrettyPrintInfo&
prettyPrintInfo = kDefaultPrettyPrintInfo)
const;
301 nonvirtual Characters::String
ToString ()
const;
322 class FormatException;
325 static InternalNumericFormatType_ ParseTime_ (
const string&
s);
326 static Characters::String UnParseTime_ (InternalNumericFormatType_
t, Characters::FloatConversion::SignificantFigures
p);
336 static constexpr InternalNumericFormatType_ kValueWhenEmptyRenderedAsNumber_{0};
342 RepType_ fRepType_{eEmpty_};
344 char fNonStringRep_{};
347 constexpr void destroy_ ();
349 static_assert (totally_ordered<Duration>);
351 class Duration::FormatException :
public Execution::RuntimeErrorException<> {
353 using inherited = Execution::RuntimeErrorException<>;
359 static const FormatException kThe;
361 inline const Duration::FormatException Duration::FormatException::kThe;
363 inline namespace Literals {
368 [[nodiscard]] Duration
operator""_duration (
const char* str,
size_t len);
369 [[nodiscard]] Duration
operator""_duration (
const wchar_t* str,
size_t len);
370 [[nodiscard]] Duration
operator""_duration (
const char8_t* str,
size_t len);
371 [[nodiscard]] Duration
operator""_duration (
const char16_t* str,
size_t len);
372 [[nodiscard]] Duration
operator""_duration (
const char32_t* str,
size_t len);
373 [[nodiscard]] Duration
operator""_duration (
long double _Val)
noexcept;
381 Duration operator+ (
const DurationSeconds& lhs,
const Duration& rhs);
388 Duration operator* (
long double lhs,
const Duration& rhs);
395 struct DefaultOpenness<Time::Duration> : ExplicitOpenness<Openness::eClosed, Openness::eClosed> {};
397 struct DefaultDifferenceTypes<Time::Duration> : ExplicitDifferenceTypes<Time::DurationSeconds> {};
418#include "Duration.inl"
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Duration is a chrono::duration<double> (=.
nonvirtual T AsPinned() const
nonvirtual Characters::String ToString() const
nonvirtual Characters::String Format(const PrettyPrintInfo &prettyPrintInfo=kDefaultPrettyPrintInfo) const
like javascript 'humanize' APIs
nonvirtual Duration & operator+=(const Duration &rhs)
nonvirtual u8string AsUTF8() const
nonvirtual Characters::String PrettyPrintAge(const AgePrettyPrintInfo &agePrettyPrintInfo=kDefaultAgePrettyPrintInfo, const PrettyPrintInfo &prettyPrintInfo=kDefaultPrettyPrintInfo) const
nonvirtual Characters::String PrettyPrint(const PrettyPrintInfo &prettyPrintInfo=kDefaultPrettyPrintInfo) const
static constexpr Duration min()
nonvirtual Duration operator-() const
static constexpr Duration max()