1#pragma once
2
3#include <basis/seadTypes.h>
4#include <time/seadCalendarSpan.h>
5
6namespace sead
7{
8class DateSpan
9{
10public:
11 explicit DateSpan(s64 span);
12 DateSpan(const CalendarSpan::Day& d, const CalendarSpan::Hour& h, const CalendarSpan::Minute& m,
13 const CalendarSpan::Second& s);
14 DateSpan(const CalendarSpan& span);
15
16 s64 set(const CalendarSpan& span);
17 s64 set(const CalendarSpan::Day& d, const CalendarSpan::Hour& h, const CalendarSpan::Minute& m,
18 const CalendarSpan::Second& s);
19
20 s64 getSpan() const { return mSpan; }
21
22 void getCalendarSpan(CalendarSpan* out_span) const;
23
24 s64 getDays() const
25 {
26 CalendarSpan span;
27 getCalendarSpan(out_span: &span);
28 return span.getDays();
29 }
30
31 s64 getHours() const
32 {
33 CalendarSpan span;
34 getCalendarSpan(out_span: &span);
35 return span.getHours();
36 }
37
38 s64 getMinutes() const
39 {
40 CalendarSpan span;
41 getCalendarSpan(out_span: &span);
42 return span.getMinutes();
43 }
44
45 s64 getSeconds() const
46 {
47 CalendarSpan span;
48 getCalendarSpan(out_span: &span);
49 return span.getSeconds();
50 }
51
52 const DateSpan& operator+=(DateSpan other)
53 {
54 mSpan += other.mSpan;
55 return *this;
56 }
57
58 const DateSpan& operator-=(DateSpan other)
59 {
60 mSpan -= other.mSpan;
61 return *this;
62 }
63
64 const DateSpan& operator*=(f32 x)
65 {
66 mSpan *= x;
67 return *this;
68 }
69
70 const DateSpan& operator/=(f32 x)
71 {
72 mSpan /= x;
73 return *this;
74 }
75
76private:
77 s64 setTimeImpl_(s32 d, s32 h, s32 m, s32 s);
78
79 /// In seconds.
80 s64 mSpan;
81};
82} // namespace sead
83