PLCnext API Documentation 23.6.0.37
Duration.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8#include "Arp/System/Commons/Chrono/DurationUnit.hpp"
9#include <chrono>
10#include <iostream>
11
12namespace Arp { namespace System { namespace Commons { namespace Chrono
13{
14
16{
17public: // typedefs
18 typedef std::chrono::microseconds Ticks;
19
20public: // construction/destruction
22 Duration(int factor = 0, DurationUnit unit = DurationUnit::None);
24 Duration(const Duration& arg) = default;
26 Duration& operator=(const Duration& arg) = default;
28 ~Duration(void) = default;
29
30public: // static properties
31 static const Ticks Tick;
32
33public: // static operations
34 static Duration Parse(const char* input);
35 static bool TryParse(const char* input, Duration& result);
36
37public: // setter/getter operations
38 int64 GetFactor(void)const;
39 DurationUnit GetUnit(void)const;
40 int64 GetMicroseconds(void)const;
41
42public: // operations
43 Nanoseconds ToNanoseconds(void)const;
44 Microseconds ToMicroseconds(void)const;
45 Milliseconds ToMilliseconds(void)const;
46 Seconds ToSeconds(void)const;
47 Minutes ToMinutes(void)const;
48 Hours ToHours(void)const;
49 Ticks ToTicks(void)const;
50 String ToString(void)const;
51
52 void GetDuration(Nanoseconds& value)const;
53 void GetDuration(Microseconds& value)const;
54 void GetDuration(Milliseconds& value)const;
55 void GetDuration(Seconds& value)const;
56 void GetDuration(Minutes& value)const;
57 void GetDuration(Hours& value)const;
58
59protected: // operations
60
61private: // static methods
62
63private: // methods
64
65private: // fields
66 int64 factor;
67 DurationUnit unit;
68
69private: // static fields
70
71};
72
74// inline methods of class Duration
75inline Duration::Duration(int factorArg, DurationUnit unitArg)
76 : factor(factorArg)
77 , unit(unitArg)
78{
79}
80
81inline int64 Duration::GetFactor()const
82{
83 return this->factor;
84}
85
86inline DurationUnit Duration::GetUnit()const
87{
88 return this->unit;
89}
90
91inline Nanoseconds Duration::ToNanoseconds()const
92{
93 return std::chrono::duration_cast<Nanoseconds>(this->ToMicroseconds());
94}
95
96inline Microseconds Duration::ToMicroseconds()const
97{
98 return Microseconds(this->GetMicroseconds());
99}
100
101inline Milliseconds Duration::ToMilliseconds()const
102{
103 return std::chrono::duration_cast<Milliseconds>(this->ToMicroseconds());
104}
105
106inline Seconds Duration::ToSeconds()const
107{
108 return std::chrono::duration_cast<Seconds>(this->ToMicroseconds());
109}
110
111inline Minutes Duration::ToMinutes()const
112{
113 return std::chrono::duration_cast<Minutes>(this->ToMicroseconds());
114}
115
116inline Hours Duration::ToHours()const
117{
118 return std::chrono::duration_cast<Hours>(this->ToMicroseconds());
119}
120
121inline Duration::Ticks Duration::ToTicks()const
122{
123 std::chrono::microseconds microSeconds(this->GetMicroseconds());
124 return std::chrono::duration_cast<Ticks>(this->ToMicroseconds());
125}
126
127std::ostream& operator<<(std::ostream& os, const Duration& value);
128std::ostream& operator<<(std::ostream& os, const Duration::Ticks& value);
129
130}}}} // end of namesapce Arp::System::Commons::Chrono
Definition: Duration.hpp:16
~Duration(void)=default
Destructs this instance and frees all resources.
Duration & operator=(const Duration &arg)=default
Assignment operator.
Duration(int factor=0, DurationUnit unit=DurationUnit::None)
Constructs an Duration instance.
Definition: Duration.hpp:75
Duration(const Duration &arg)=default
Copy contructor.
std::chrono::seconds Seconds
The Arp Seconds unit class.
Definition: TypeSystem.h:55
std::chrono::hours Hours
The Arp Hours unit class.
Definition: TypeSystem.h:61
std::chrono::milliseconds Milliseconds
The Arp Milliseconds unit class.
Definition: TypeSystem.h:52
std::chrono::microseconds Microseconds
The Arp Microseconds unit class.
Definition: TypeSystem.h:49
std::chrono::minutes Minutes
The Arp Minutes unit class.
Definition: TypeSystem.h:58
std::chrono::nanoseconds Nanoseconds
The Arp Nanoseconds unit class.
Definition: TypeSystem.h:46
std::int64_t int64
The Arp integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:42
Nanoseconds Duration
Represents a duration in arbitary units like ns, ms, s and more. The duration unit might not be ommit...
Definition: TypeSystem.h:68
Root namespace for the PLCnext API