source: trunk/ab5.0/ablib/src/com/currency.ab@ 709

Last change on this file since 709 was 709, checked in by イグトランス (egtra), 15 years ago

最新のコンパイラに通るように修正。参照クラスのセマンティクスに合うように修正(Setter系プロパティの削除など)。

File size: 5.5 KB
Line 
1' com/currency.ab
2
3#require <com/variant.ab>
4
5Namespace ActiveBasic
6Namespace COM
7
8Class Currency
9 Implements System.ICloneable, System.IEquatable<Currency>', System.IComparable<Currency>
10Public
11 Sub Currency()
12 cy = 0
13 End Sub
14/*
15 Sub Currency(x As CY)
16 cy = x
17 End Sub
18*/
19 Sub Currency(x As Double)
20 VarCyFromR8(x, cy)
21 End Sub
22/*
23 Sub Currency(x As Int64)
24 VarCyFromI8(x, cy)
25 End Sub
26*/
27 Static Function FromCy(cy As CY) As Currency
28 FromCy = New Currency
29 FromCy.cy = cy
30 End Function
31
32 Function Operator +() As Currency
33 Return FromCy(cy)
34 End Function
35
36 Function Operator -() As Currency
37 Dim ret = New Currency
38 Windows.ThrowIfFailed(VarCyNeg(This.cy, ret.cy))
39 Return ret
40 End Function
41
42 Function Operator *(y As Currency) As Currency
43 Dim ret = New Currency
44 Windows.ThrowIfFailed(VarCyMul(This.cy, y.cy, ret.cy))
45 Return ret
46 End Function
47
48 Function Operator *(y As Long) As Currency
49 Dim ret = New Currency
50 Windows.ThrowIfFailed(VarCyMulI4(This.cy, y, ret.cy))
51 Return ret
52 End Function
53
54 Function Operator *(y As Int64) As Currency
55 Dim ret = New Currency
56 Windows.ThrowIfFailed(VarCyMulI8(This.cy, y, ret.cy))
57 Return ret
58 End Function
59
60 Function Operator /(y As Variant) As Double
61 Dim vx = New Variant(This)
62 Dim ret = vx / y
63 Return ret.ValR8
64 End Function
65
66 Function Operator /(y As Currency) As Double
67 Dim vx = New Variant(This)
68 Dim vy = New Variant(y)
69 Dim ret = vx / vy
70 Return ret.ValR8
71 End Function
72
73 Function Operator +(y As Currency) As Currency
74 Dim ret = New Currency
75 Windows.ThrowIfFailed(VarCyAdd(This.cy, y.cy, ret.cy))
76 Return ret
77 End Function
78
79 Function Operator -(y As Currency) As Currency
80 Dim ret = New Currency
81 Windows.ThrowIfFailed(VarCySub(This.cy, y.cy, ret.cy))
82 Return ret
83 End Function
84
85 Static Function Compare(x As Currency, y As Currency) As HRESULT
86 Return VarCyCmp(x.cy, y.cy)
87 End Function
88
89 Static Function Compare(x As Currency, y As Double) As HRESULT
90 Return VarCyCmpR8(x.cy, y)
91 End Function
92
93 Static Function Compare(x As Double, y As Currency) As HRESULT
94 Dim ret = VarCyCmpR8(y.cy, x)
95 Select Case ret
96 Case VARCMP_LT
97 Return VARCMP_GT
98 Case VARCMP_GT
99 Return VARCMP_LT
100 Case Else
101 Return ret
102 End Select
103 End Function
104
105 Function Operator ==(y As Currency) As Boolean
106 Dim c = Compare(This, y)
107 Return c = VARCMP_EQ
108 End Function
109
110 Function Operator ==(y As Double) As Boolean
111 Dim c = Compare(This, y)
112 Return c = VARCMP_EQ
113 End Function
114
115 Function Operator <>(y As Currency) As Boolean
116 Dim c = Compare(This, y)
117 Return c <> VARCMP_EQ
118 End Function
119
120 Function Operator <>(y As Double) As Boolean
121 Dim c = Compare(This, y)
122 Return c <> VARCMP_EQ
123 End Function
124
125 Function Operator <(y As Currency) As Boolean
126 Dim c = Compare(This, y)
127 Return c = VARCMP_LT
128 End Function
129
130 Function Operator <(y As Double) As Boolean
131 Dim c = Compare(This, y)
132 Return c = VARCMP_LT
133 End Function
134
135 Function Operator >(y As Currency) As Boolean
136 Dim c = Compare(This, y)
137 Return c = VARCMP_GT
138 End Function
139
140 Function Operator >(y As Double) As Boolean
141 Dim c = Compare(This, y)
142 Return c = VARCMP_GT
143 End Function
144
145 Function Operator <=(y As Currency) As Boolean
146 Dim c = Compare(This, y)
147 Return c = VARCMP_LT Or c = VARCMP_EQ
148 End Function
149
150 Function Operator <=(y As Double) As Boolean
151 Dim c = Compare(This, y)
152 Return c = VARCMP_LT Or c = VARCMP_EQ
153 End Function
154
155 Function Operator >=(y As Currency) As Boolean
156 Dim c = Compare(This, y)
157 Return c = VARCMP_GT Or c = VARCMP_EQ
158 End Function
159
160 Function Operator >=(y As Double) As Boolean
161 Dim c = Compare(This, y)
162 Return c = VARCMP_GT Or c = VARCMP_EQ
163 End Function
164
165 Function Abs() As Currency
166 Abs = New Currency
167 Windows.ThrowIfFailed(VarCyAbs(This.cy, Abs.cy))
168 End Function
169
170 Function Fix() As Currency
171 Fix = New Currency
172 Windows.ThrowIfFailed(VarCyFix(This.cy, Fix.cy))
173 End Function
174
175 Function Int() As Currency
176 Int = New Currency
177 Windows.ThrowIfFailed(VarCyInt(This.cy, Int.cy))
178 End Function
179
180 Function Round(c = 0 As Long) As Currency
181 Round = New Currency
182 Windows.ThrowIfFailed(VarCyRound(This.cy, c, Round.cy))
183 End Function
184
185 Function Cy() As CY
186 Cy = cy
187 End Function
188
189 Function ToDouble() As Double
190 VarR8FromCy(cy, ToDouble)
191 End Function
192
193 Function ToInt64() As Int64
194 VarI8FromCy(cy, ToInt64)
195 End Function
196
197 Function ToVariant() As Variant
198 Return New Variant(This)
199 End Function
200
201 Override Function ToString() As String
202 Using bstr = New BString
203 Dim bs As BSTR
204 VarBstrFromCy(cy, LOCALE_USER_DEFAULT, LOCALE_USE_NLS, bs)
205 bstr.Attach(bs)
206 ToString = bstr.ToString()
207 End Using
208 End Function
209
210 Override Function GetHashCode() As Long
211 Return (HIDWORD(cy) Xor LODWORD(cy)) As Long
212 End Function
213
214 Override Function Equals(y As Object) As Boolean
215 If This.GetType().Equals(y.GetType()) Then
216 Equals = Equals(y As Currency)
217 Else
218 Equals = False
219 End If
220 End Function
221
222 Function Equals(y As Currency) As Boolean
223 Dim c = Compare(This, y)
224 Return c = VARCMP_EQ
225 End Function
226
227 Function CompareTo(y As Currency) As Long
228 Dim c = Compare(This, y)
229 If c = VARCMP_GT Then
230 CompareTo = 1
231 ElseIf c = VARCMP_LT Then
232 CompareTo = -1
233 Else
234 CompareTo = 0
235 End If
236 End Function
237
238 Function Clone() As Currency
239 Clone = This
240 End Function
241Private
242 cy As CY
243End Class
244
245End Namespace 'COM
246End Namespace 'ActiveBasic
Note: See TracBrowser for help on using the repository browser.