PLCnext API Documentation  21.0.0.35466
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 using namespace std::chrono;
16 
17 class Duration
18 {
19 public: // typedefs
20  typedef std::chrono::microseconds Ticks;
21 
22 public: // construction/destruction
24  Duration(int factor = 0, DurationUnit unit = DurationUnit::None);
26  Duration(const Duration& arg) = default;
28  Duration& operator=(const Duration& arg) = default;
30  ~Duration(void) = default;
31 
32 public: // static properties
33  static const Ticks Tick;
34 
35 public: // static operations
36  static Duration Parse(const char* input);
37  static bool TryParse(const char* input, Duration& result);
38 
39 public: // setter/getter operations
40  int64 GetFactor(void)const;
41  DurationUnit GetUnit(void)const;
42  int64 GetMicroseconds(void)const;
43 
44 public: // operations
45  Nanoseconds ToNanoseconds(void)const;
46  Microseconds ToMicroseconds(void)const;
47  Milliseconds ToMilliseconds(void)const;
48  Seconds ToSeconds(void)const;
49  Minutes ToMinutes(void)const;
50  Hours ToHours(void)const;
51  Ticks ToTicks(void)const;
52  String ToString(void)const;
53 
54  void GetDuration(Nanoseconds& value)const;
55  void GetDuration(Microseconds& value)const;
56  void GetDuration(Milliseconds& value)const;
57  void GetDuration(Seconds& value)const;
58  void GetDuration(Minutes& value)const;
59  void GetDuration(Hours& value)const;
60 
61 protected: // operations
62 
63 private: // static methods
64 
65 private: // methods
66 
67 private: // fields
68  int64 factor;
69  DurationUnit unit;
70 
71 private: // static fields
72 
73 };
74 
76 // inline methods of class Duration
77 inline Duration::Duration(int factorArg, DurationUnit unitArg)
78  : factor(factorArg)
79  , unit(unitArg)
80 {
81 }
82 
83 inline int64 Duration::GetFactor()const
84 {
85  return this->factor;
86 }
87 
88 inline DurationUnit Duration::GetUnit()const
89 {
90  return this->unit;
91 }
92 
93 inline Nanoseconds Duration::ToNanoseconds()const
94 {
95  return duration_cast<Nanoseconds>(this->ToMicroseconds());
96 }
97 
98 inline Microseconds Duration::ToMicroseconds()const
99 {
100  return Microseconds(this->GetMicroseconds());
101 }
102 
103 inline Milliseconds Duration::ToMilliseconds()const
104 {
105  return duration_cast<Milliseconds>(this->ToMicroseconds());
106 }
107 
108 inline Seconds Duration::ToSeconds()const
109 {
110  return duration_cast<Seconds>(this->ToMicroseconds());
111 }
112 
113 inline Minutes Duration::ToMinutes()const
114 {
115  return duration_cast<Minutes>(this->ToMicroseconds());
116 }
117 
118 inline Hours Duration::ToHours()const
119 {
120  return duration_cast<Hours>(this->ToMicroseconds());
121 }
122 
123 inline Duration::Ticks Duration::ToTicks()const
124 {
125  std::chrono::microseconds microSeconds(this->GetMicroseconds());
126  return duration_cast<Ticks>(this->ToMicroseconds());
127 }
128 
129 inline std::ostream& operator<<(std::ostream& os, const Duration& value)
130 {
131  os << value.GetFactor() << Enum<DurationUnit>(value.GetUnit()).ToString();
132  return os;
133 }
134 
135 inline std::ostream& operator<<(std::ostream& os, const Duration::Ticks& value)
136 {
137  os << value.count() << "us";
138  return os;
139 }
140 
141 }}}} // end of namesapce Arp::System::Commons::Chrono
std::chrono::milliseconds Milliseconds
The Arp Milliseconds unit class.
Definition: TypeSystem.h:36
Duration(int factor=0, DurationUnit unit=DurationUnit::None)
Constructs an Duration instance.
Definition: Duration.hpp:77
std::chrono::minutes Minutes
The Arp Minutes unit class.
Definition: TypeSystem.h:40
std::chrono::microseconds Microseconds
The Arp Microseconds unit class.
Definition: TypeSystem.h:34
Adapter class for enums to make them loggable and parsable from e.g. XML files.
Definition: Enum.hxx:23
std::chrono::nanoseconds Nanoseconds
The Arp Nanoseconds unit class.
Definition: TypeSystem.h:32
Definition: Duration.hpp:17
Root namespace for the PLCnext API
std::chrono::hours Hours
The Arp Hours unit class.
Definition: TypeSystem.h:42
System components used by the System, Device, Plc or Io domains.
std::chrono::seconds Seconds
The Arp Seconds unit class.
Definition: TypeSystem.h:38
std::int64_t int64
The Arp integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:41