OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 class _Double implements double { | 5 class _Double implements double { |
6 factory _Double.fromInteger(int value) | 6 factory _Double.fromInteger(int value) |
7 native "Double_doubleFromInteger"; | 7 native "Double_doubleFromInteger"; |
8 int get hashCode { | 8 int get hashCode { |
9 try { | 9 try { |
10 return toInt(); | 10 return truncate(); |
11 } on FormatException catch (e) { | 11 } on FormatException catch (e) { |
12 return 0; | 12 return 0; |
13 } | 13 } |
14 } | 14 } |
15 double operator +(num other) { | 15 double operator +(num other) { |
16 return _add(other.toDouble()); | 16 return _add(other.toDouble()); |
17 } | 17 } |
18 double _add(double other) native "Double_add"; | 18 double _add(double other) native "Double_add"; |
19 | 19 |
20 double operator -(num other) { | 20 double operator -(num other) { |
21 return _sub(other.toDouble()); | 21 return _sub(other.toDouble()); |
22 } | 22 } |
23 double _sub(double other) native "Double_sub"; | 23 double _sub(double other) native "Double_sub"; |
24 | 24 |
25 double operator *(num other) { | 25 double operator *(num other) { |
26 return _mul(other.toDouble()); | 26 return _mul(other.toDouble()); |
27 } | 27 } |
28 double _mul(double other) native "Double_mul"; | 28 double _mul(double other) native "Double_mul"; |
29 | 29 |
30 double operator ~/(num other) { | 30 int operator ~/(num other) { |
31 return _trunc_div(other.toDouble()); | 31 return _trunc_div(other.toDouble()); |
32 } | 32 } |
33 double _trunc_div(double other) native "Double_trunc_div"; | 33 int _trunc_div(double other) native "Double_trunc_div"; |
34 | 34 |
35 double operator /(num other) { | 35 double operator /(num other) { |
36 return _div(other.toDouble()); | 36 return _div(other.toDouble()); |
37 } | 37 } |
38 double _div(double other) native "Double_div"; | 38 double _div(double other) native "Double_div"; |
39 | 39 |
40 double operator %(num other) { | 40 double operator %(num other) { |
41 return _modulo(other.toDouble()); | 41 return _modulo(other.toDouble()); |
42 } | 42 } |
43 double _modulo(double other) native "Double_modulo"; | 43 double _modulo(double other) native "Double_modulo"; |
(...skipping 30 matching lines...) Expand all Loading... |
74 } | 74 } |
75 double _addFromInteger(int other) { | 75 double _addFromInteger(int other) { |
76 return new _Double.fromInteger(other) + this; | 76 return new _Double.fromInteger(other) + this; |
77 } | 77 } |
78 double _subFromInteger(int other) { | 78 double _subFromInteger(int other) { |
79 return new _Double.fromInteger(other) - this; | 79 return new _Double.fromInteger(other) - this; |
80 } | 80 } |
81 double _mulFromInteger(int other) { | 81 double _mulFromInteger(int other) { |
82 return new _Double.fromInteger(other) * this; | 82 return new _Double.fromInteger(other) * this; |
83 } | 83 } |
84 double _truncDivFromInteger(int other) { | 84 int _truncDivFromInteger(int other) { |
85 return new _Double.fromInteger(other) ~/ this; | 85 return new _Double.fromInteger(other) ~/ this; |
86 } | 86 } |
87 double _moduloFromInteger(int other) { | 87 double _moduloFromInteger(int other) { |
88 return new _Double.fromInteger(other) % this; | 88 return new _Double.fromInteger(other) % this; |
89 } | 89 } |
90 double _remainderFromInteger(int other) { | 90 double _remainderFromInteger(int other) { |
91 return new _Double.fromInteger(other).remainder(this); | 91 return new _Double.fromInteger(other).remainder(this); |
92 } | 92 } |
93 bool _greaterThanFromInteger(int other) | 93 bool _greaterThanFromInteger(int other) |
94 native "Double_greaterThanFromInteger"; | 94 native "Double_greaterThanFromInteger"; |
95 | 95 |
96 bool get isNegative native "Double_getIsNegative"; | 96 bool get isNegative native "Double_getIsNegative"; |
97 bool get isInfinite native "Double_getIsInfinite"; | 97 bool get isInfinite native "Double_getIsInfinite"; |
98 bool get isNaN native "Double_getIsNaN"; | 98 bool get isNaN native "Double_getIsNaN"; |
99 | 99 |
100 double abs() { | 100 double abs() { |
101 // Handle negative 0.0. | 101 // Handle negative 0.0. |
102 if (this == 0.0) return 0.0; | 102 if (this == 0.0) return 0.0; |
103 return this < 0.0 ? -this : this; | 103 return this < 0.0 ? -this : this; |
104 } | 104 } |
105 | 105 |
106 double round() native "Double_round"; | 106 int round() native "Double_round"; |
107 double floor() native "Double_floor"; | 107 int floor() native "Double_floor"; |
108 double ceil () native "Double_ceil"; | 108 int ceil () native "Double_ceil"; |
109 double truncate() native "Double_truncate"; | 109 int truncate() native "Double_truncate"; |
110 | 110 |
111 num clamp(num lowerLimit, num upperLimit) { | 111 num clamp(num lowerLimit, num upperLimit) { |
112 if (lowerLimit is! num) throw new ArgumentError(lowerLimit); | 112 if (lowerLimit is! num) throw new ArgumentError(lowerLimit); |
113 if (upperLimit is! num) throw new ArgumentError(upperLimit); | 113 if (upperLimit is! num) throw new ArgumentError(upperLimit); |
114 | 114 |
115 if (lowerLimit.compareTo(upperLimit) > 0) { | 115 if (lowerLimit.compareTo(upperLimit) > 0) { |
116 throw new ArgumentError(lowerLimit); | 116 throw new ArgumentError(lowerLimit); |
117 } | 117 } |
118 if (lowerLimit.isNaN) return lowerLimit; | 118 if (lowerLimit.isNaN) return lowerLimit; |
119 if (this.compareTo(lowerLimit) < 0) return lowerLimit; | 119 if (this.compareTo(lowerLimit) < 0) return lowerLimit; |
120 if (this.compareTo(upperLimit) > 0) return upperLimit; | 120 if (this.compareTo(upperLimit) > 0) return upperLimit; |
121 return this; | 121 return this; |
122 } | 122 } |
123 | 123 |
124 int toInt() native "Double_toInt"; | |
125 double toDouble() { return this; } | 124 double toDouble() { return this; } |
126 | 125 |
127 double pow(num exponent) { | 126 double pow(num exponent) { |
128 if (exponent == 0) { | 127 if (exponent == 0) { |
129 return 1.0; // ECMA-262 15.8.2.13 | 128 return 1.0; // ECMA-262 15.8.2.13 |
130 } | 129 } |
131 if (exponent is! num) { | 130 if (exponent is! num) { |
132 throw new ArgumentError(null); | 131 throw new ArgumentError(null); |
133 } | 132 } |
134 double doubleExponent = exponent.toDouble(); | 133 double doubleExponent = exponent.toDouble(); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 return EQUAL; | 238 return EQUAL; |
240 } | 239 } |
241 } else if (isNaN) { | 240 } else if (isNaN) { |
242 return other.isNaN ? EQUAL : GREATER; | 241 return other.isNaN ? EQUAL : GREATER; |
243 } else { | 242 } else { |
244 // Other is NaN. | 243 // Other is NaN. |
245 return LESS; | 244 return LESS; |
246 } | 245 } |
247 } | 246 } |
248 } | 247 } |
OLD | NEW |