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