PLCnext API Documentation  22.9.0.33
Duration.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 #include "Arp/System/Commons/Chrono/DurationUnit.hpp"
9 #include <chrono>
10 #include <iostream>
11 
12 namespace Arp { namespace System { namespace Commons { namespace Chrono
13 {
14 
15 class Duration
16 {
17 public: // typedefs
18  typedef std::chrono::microseconds Ticks;
19 
20 public: // 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 
30 public: // static properties
31  static const Ticks Tick;
32 
33 public: // static operations
34  static Duration Parse(const char* input);
35  static bool TryParse(const char* input, Duration& result);
36 
37 public: // setter/getter operations
38  int64 GetFactor(void)const;
39  DurationUnit GetUnit(void)const;
40  int64 GetMicroseconds(void)const;
41 
42 public: // 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 
59 protected: // operations
60 
61 private: // static methods
62 
63 private: // methods
64 
65 private: // fields
66  int64 factor;
67  DurationUnit unit;
68 
69 private: // static fields
70 
71 };
72 
74 // inline methods of class Duration
75 inline Duration::Duration(int factorArg, DurationUnit unitArg)
76  : factor(factorArg)
77  , unit(unitArg)
78 {
79 }
80 
81 inline int64 Duration::GetFactor()const
82 {
83  return this->factor;
84 }
85 
86 inline DurationUnit Duration::GetUnit()const
87 {
88  return this->unit;
89 }
90 
91 inline Nanoseconds Duration::ToNanoseconds()const
92 {
93  return std::chrono::duration_cast<Nanoseconds>(this->ToMicroseconds());
94 }
95 
96 inline Microseconds Duration::ToMicroseconds()const
97 {
98  return Microseconds(this->GetMicroseconds());
99 }
100 
101 inline Milliseconds Duration::ToMilliseconds()const
102 {
103  return std::chrono::duration_cast<Milliseconds>(this->ToMicroseconds());
104 }
105 
106 inline Seconds Duration::ToSeconds()const
107 {
108  return std::chrono::duration_cast<Seconds>(this->ToMicroseconds());
109 }
110 
111 inline Minutes Duration::ToMinutes()const
112 {
113  return std::chrono::duration_cast<Minutes>(this->ToMicroseconds());
114 }
115 
116 inline Hours Duration::ToHours()const
117 {
118  return std::chrono::duration_cast<Hours>(this->ToMicroseconds());
119 }
120 
121 inline Duration::Ticks Duration::ToTicks()const
122 {
123  std::chrono::microseconds microSeconds(this->GetMicroseconds());
124  return std::chrono::duration_cast<Ticks>(this->ToMicroseconds());
125 }
126 
127 std::ostream& operator<<(std::ostream& os, const Duration& value);
128 std::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::nanoseconds Nanoseconds
The Arp Nanoseconds unit class.
Definition: TypeSystem.h:32
std::chrono::milliseconds Milliseconds
The Arp Milliseconds unit class.
Definition: TypeSystem.h:36
std::chrono::seconds Seconds
The Arp Seconds unit class.
Definition: TypeSystem.h:38
std::chrono::microseconds Microseconds
The Arp Microseconds unit class.
Definition: TypeSystem.h:34
std::int64_t int64
The Arp integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:41
std::chrono::minutes Minutes
The Arp Minutes unit class.
Definition: TypeSystem.h:40
std::chrono::hours Hours
The Arp Hours unit class.
Definition: TypeSystem.h:42
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API