CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
common_Time.h
1 /*--------------------------------------------------------------------------------*
2  Copyright (C)Nintendo All rights reserved.
3 
4  These coded instructions, statements, and computer programs contain proprietary
5  information of Nintendo and/or its licensed developers and are protected by
6  national and international copyright laws. They may not be disclosed to third
7  parties or copied or duplicated in any form, in whole or in part, without the
8  prior written consent of Nintendo.
9 
10  The content herein is highly confidential and should be handled accordingly.
11  *--------------------------------------------------------------------------------*/
12 
13 
14 #pragma once
15 
16 #include <nn/pia/common/common_TimeSpan.h>
17 
18 namespace nn
19 {
20 namespace pia
21 {
22 namespace common
23 {
24 
25 /*!
26  @brief 時刻を表すクラスです。
27 
28  */
29 class Time : public RootObject
30 {
31 public:
32  /*!
33  @brief デフォルトコンストラクタです。
34  */
35  Time()
36  : m_Tick(0)
37  {
38  }
39 
40 
41  explicit Time(uint64_t tick)
42  : m_Tick(tick)
43  {
44  }
45 
46  /*!
47  @brief コピーコンストラクタです。
48 
49  @param[in] rhs 本インスタンスを初期化する値を持つ Time インスタンスです。
50  */
51  Time(const Time& rhs)
52  : m_Tick(rhs.m_Tick)
53  {
54  }
55 
56 
57  /*!
58  @brief このオブジェクトが現在の時刻を表すようにします。
59  */
60  void SetNow();
61 
62 
63  /*!
64  @brief 現在の時刻を表す Time インスタンスを取得します。
65 
66  @return 現在の時刻を表す Time インスタンスです。
67  */
68  static Time GetTime()
69  {
70  Time time;
71  time.SetNow();
72  return time;
73  }
74 
75 
76  /*!
77  @brief 代入演算子です。
78 
79  @param[in] rhs 代入する Time です。
80 
81  @return 本インスタンスへの参照が返されます。
82  */
83  Time& operator=(const Time& rhs)
84  {
85  m_Tick = rhs.m_Tick;
86  return *this;
87  }
88 
89 
90  /*!
91  @brief 本インスタンスの時刻に時間を加算します。
92 
93  @param[in] span 加算する時間です。
94 
95  @return 本インスタンスへの参照が返されます。
96  */
97  Time& operator+=(const TimeSpan& span)
98  {
99  m_Tick += span.m_TickSpan;
100  return *this;
101  }
102 
103 
104  /*!
105  @brief 本インスタンスの時刻に時間を減算します。
106 
107  @param[in] span 減算する時間です。
108 
109  @return 本インスタンスへの参照が返されます。
110  */
111  Time& operator-=(const TimeSpan& span)
112  {
113  m_Tick -= span.m_TickSpan;
114  return *this;
115  }
116 
117 
118  /*!
119  @brief 本インスタンスの時刻に時間を加算した値をもつ Time を計算します。
120 
121  @param[in] span 加算する時間です。
122 
123  @return 加算された時刻を表す Time です。
124  */
125  Time operator+(const TimeSpan& span) const
126  {
127  Time time;
128  time.m_Tick = m_Tick + span.m_TickSpan;
129  return time;
130  }
131 
132 
133  /*!
134  @brief 本インスタンスの時刻に時間を減算した値をもつ Time を計算します。
135 
136  @param[in] span 減算する時間です。
137 
138  @return 減算された時刻を表す Time です。
139  */
140  Time operator-(const TimeSpan& span) const
141  {
142  Time time;
143  time.m_Tick = m_Tick - span.m_TickSpan;
144  return time;
145  }
146 
147 
148  /*!
149  @brief 時刻の差分を計算します。
150 
151  @param[in] rhs 基準となる時刻です。
152 
153  @return 時刻の差分を表す TimeSpan です。
154  */
155  TimeSpan operator-(const Time& rhs) const
156  {
157  TimeSpan span;
158  span.m_TickSpan = m_Tick - rhs.m_Tick;
159  return span;
160  }
161 
162 
163  /*!
164  @brief 等値演算子です。二つの Time オブジェクトが同等と見なせるかどうかを判定します。
165 
166  @param[in] rhs 比較する Time です。
167 
168  @return 両者の表す時刻が同じであれば true を、そうでなければ false を返します。
169  */
170  bool operator==(const Time& rhs) const
171  {
172  return (m_Tick == rhs.m_Tick);
173  }
174 
175 
176  /*!
177  @brief 等値演算子です。二つの Time オブジェクトが異なるかどうかを判定します。
178 
179  @param[in] rhs 比較する Time です。
180 
181  @return 両者の表す時刻が異なれば true を、そうでなければ false を返します。
182  */
183  bool operator!=(const Time& rhs) const
184  {
185  return (m_Tick != rhs.m_Tick);
186  }
187 
188 
189  /*!
190  @brief 比較演算子です。本インスタンスの方が古い時刻を表していれば true を返します。
191 
192  @param[in] rhs 比較する Time です。
193 
194  @return 本インスタンスの方が古い時刻を表していれば true を、そうでなければ false を返します。
195  */
196  bool operator<(const Time& rhs) const
197  {
198  return (m_Tick < rhs.m_Tick);
199  }
200 
201 
202  /*!
203  @brief 比較演算子です。本インスタンスの方が古いか同じ時刻を表していれば true を返します。
204 
205  @param[in] rhs 比較する Time です。
206 
207  @return 本インスタンスの方が古いか同じ時刻を表していれば true を、そうでなければ false を返します。
208  */
209  bool operator<=(const Time& rhs) const
210  {
211  return (m_Tick <= rhs.m_Tick);
212  }
213 
214 
215  /*!
216  @brief 比較演算子です。本インスタンスの方が新しい時刻を表していれば true を返します。
217 
218  @param[in] rhs 比較する Time です。
219 
220  @return 本インスタンスの方が新しい時刻を表していれば true を、そうでなければ false を返します。
221  */
222  bool operator>(const Time& rhs) const
223  {
224  return (m_Tick > rhs.m_Tick);
225  }
226 
227 
228  /*!
229  @brief 比較演算子です。本インスタンスの方が新しいか同じ時刻を表していれば true を返します。
230 
231  @param[in] rhs 比較する Time です。
232 
233  @return 本インスタンスの方が新しいか同じ時刻を表していれば true を、そうでなければ false を返します。
234  */
235  bool operator>=(const Time& rhs) const
236  {
237  return (m_Tick >= rhs.m_Tick);
238  }
239 
240 
241  /*!
242  @cond PRIVATE
243  @brief 現在から指定時間先の時刻を取得します。
244 
245  @param[in] timeout 時間の差分です。
246 
247  @return 現在から timeout 先の時刻です。
248  */
249  static Time ConvertTimeoutToDeadline(const TimeSpan& timeout)
250  {
251  return (GetTime() += timeout);
252  }
253  //! @endcond
254 
255 
256  /*!
257  @cond PRIVATE
258  @brief インスタンスが保持している生の Tick 値を得ます。
259 
260  @return インスタンスが保持する Tick 値。
261  @see SetTick
262  */
263  uint64_t GetTick(void) const
264  {
265  return m_Tick;
266  }
267  //! @endcond
268 
269 
270  /*!
271  @cond PRIVATE
272  @brief 生の Tick 値をインスタンスに設定します。
273 
274  @param[in] tick 生の Tick 値です。
275  @see GetTick
276  */
277  void SetTick(uint64_t tick)
278  {
279  m_Tick = tick;
280  }
281  //! @endcond
282 
283  /*!
284  @brief デバッグに有用な情報をプリントします。
285 
286  @param[in] flag トレースフラグの論理和。詳細は@ref TraceFlag 型を参照してください。
287  */
288  void Trace(uint64_t flag) const;
289 
290  static const Time c_Max; //< 時刻の最大値
291  static const Time c_Min; //< 時刻の最小値
292 
293 private:
294  static Time Create(uint64_t tick);
295 
296  uint64_t m_Tick;
297 };
298 }
299 }
300 } // end of namespace nn::pia::common