1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4*******************************************************************************
5* Copyright (C) 2007-2012, International Business Machines Corporation and
6* others. All Rights Reserved.
7*******************************************************************************
8*/
9
10#include "utypeinfo.h"  // for 'typeid' to work
11
12#include "unicode/utypes.h"
13
14#if !UCONFIG_NO_FORMATTING
15
16#include "unicode/dtrule.h"
17
18U_NAMESPACE_BEGIN
19
20UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateTimeRule)
21
22DateTimeRule::DateTimeRule(int32_t month,
23                           int32_t dayOfMonth,
24                           int32_t millisInDay,
25                           TimeRuleType timeType)
26: fMonth(month), fDayOfMonth(dayOfMonth), fDayOfWeek(0), fWeekInMonth(0), fMillisInDay(millisInDay),
27  fDateRuleType(DateTimeRule::DOM), fTimeRuleType(timeType) {
28}
29
30DateTimeRule::DateTimeRule(int32_t month,
31                           int32_t weekInMonth,
32                           int32_t dayOfWeek,
33                           int32_t millisInDay,
34                           TimeRuleType timeType)
35: fMonth(month), fDayOfMonth(0), fDayOfWeek(dayOfWeek), fWeekInMonth(weekInMonth), fMillisInDay(millisInDay),
36  fDateRuleType(DateTimeRule::DOW), fTimeRuleType(timeType) {
37}
38
39DateTimeRule::DateTimeRule(int32_t month,
40                           int32_t dayOfMonth,
41                           int32_t dayOfWeek,
42                           UBool after,
43                           int32_t millisInDay,
44                           TimeRuleType timeType)
45: UObject(),
46  fMonth(month), fDayOfMonth(dayOfMonth), fDayOfWeek(dayOfWeek), fWeekInMonth(0), fMillisInDay(millisInDay),
47  fTimeRuleType(timeType) {
48    if (after) {
49        fDateRuleType = DateTimeRule::DOW_GEQ_DOM;
50    } else {
51        fDateRuleType = DateTimeRule::DOW_LEQ_DOM;
52    }
53}
54
55DateTimeRule::DateTimeRule(const DateTimeRule& source)
56: UObject(source),
57  fMonth(source.fMonth), fDayOfMonth(source.fDayOfMonth), fDayOfWeek(source.fDayOfWeek),
58  fWeekInMonth(source.fWeekInMonth), fMillisInDay(source.fMillisInDay),
59  fDateRuleType(source.fDateRuleType), fTimeRuleType(source.fTimeRuleType) {
60}
61
62DateTimeRule::~DateTimeRule() {
63}
64
65DateTimeRule*
66DateTimeRule::clone() const {
67    return new DateTimeRule(*this);
68}
69
70DateTimeRule&
71DateTimeRule::operator=(const DateTimeRule& right) {
72    if (this != &right) {
73        fMonth = right.fMonth;
74        fDayOfMonth = right.fDayOfMonth;
75        fDayOfWeek = right.fDayOfWeek;
76        fWeekInMonth = right.fWeekInMonth;
77        fMillisInDay = right.fMillisInDay;
78        fDateRuleType = right.fDateRuleType;
79        fTimeRuleType = right.fTimeRuleType;
80    }
81    return *this;
82}
83
84UBool
85DateTimeRule::operator==(const DateTimeRule& that) const {
86    return ((this == &that) ||
87            (typeid(*this) == typeid(that) &&
88            fMonth == that.fMonth &&
89            fDayOfMonth == that.fDayOfMonth &&
90            fDayOfWeek == that.fDayOfWeek &&
91            fWeekInMonth == that.fWeekInMonth &&
92            fMillisInDay == that.fMillisInDay &&
93            fDateRuleType == that.fDateRuleType &&
94            fTimeRuleType == that.fTimeRuleType));
95}
96
97UBool
98DateTimeRule::operator!=(const DateTimeRule& that) const {
99    return !operator==(that);
100}
101
102DateTimeRule::DateRuleType
103DateTimeRule::getDateRuleType(void) const {
104    return fDateRuleType;
105}
106
107DateTimeRule::TimeRuleType
108DateTimeRule::getTimeRuleType(void) const {
109    return fTimeRuleType;
110}
111
112int32_t
113DateTimeRule::getRuleMonth(void) const {
114    return fMonth;
115}
116
117int32_t
118DateTimeRule::getRuleDayOfMonth(void) const {
119    return fDayOfMonth;
120}
121
122int32_t
123DateTimeRule::getRuleDayOfWeek(void) const {
124    return fDayOfWeek;
125}
126
127int32_t
128DateTimeRule::getRuleWeekInMonth(void) const {
129    return fWeekInMonth;
130}
131
132int32_t
133DateTimeRule::getRuleMillisInDay(void) const {
134    return fMillisInDay;
135}
136
137U_NAMESPACE_END
138
139#endif /* #if !UCONFIG_NO_FORMATTING */
140
141//eof
142