Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: tool/input_sdk/lib/core/int.dart

Issue 1952043002: Merge in JSNumber changes. (Closed) Base URL: https://github.com/dart-lang/dev_compiler@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/input_sdk/private/js_number.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 part of dart.core; 5 part of dart.core;
6 6
7 /** 7 /**
8 * An arbitrarily large integer. 8 * An arbitrarily large integer.
9 * 9 *
10 * **Note:** When compiling to JavaScript, integers are 10 * **Note:** When compiling to JavaScript, integers are
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 /** 81 /**
82 * Shift the bits of this integer to the left by [shiftAmount]. 82 * Shift the bits of this integer to the left by [shiftAmount].
83 * 83 *
84 * Shifting to the left makes the number larger, effectively multiplying 84 * Shifting to the left makes the number larger, effectively multiplying
85 * the number by `pow(2, shiftIndex)`. 85 * the number by `pow(2, shiftIndex)`.
86 * 86 *
87 * There is no limit on the size of the result. It may be relevant to 87 * There is no limit on the size of the result. It may be relevant to
88 * limit intermediate values by using the "and" operator with a suitable 88 * limit intermediate values by using the "and" operator with a suitable
89 * mask. 89 * mask.
90 * 90 *
91 * It is an error of [shiftAmount] is negative. 91 * It is an error if [shiftAmount] is negative.
92 */ 92 */
93 int operator <<(int shiftAmount); 93 int operator <<(int shiftAmount);
94 94
95 /** 95 /**
96 * Shift the bits of this integer to the right by [shiftAmount]. 96 * Shift the bits of this integer to the right by [shiftAmount].
97 * 97 *
98 * Shifting to the right makes the number smaller and drops the least 98 * Shifting to the right makes the number smaller and drops the least
99 * significant bits, effectively doing an integer division by 99 * significant bits, effectively doing an integer division by
100 *`pow(2, shiftIndex)`. 100 *`pow(2, shiftIndex)`.
101 * 101 *
102 * It is an error of [shiftAmount] is negative. 102 * It is an error if [shiftAmount] is negative.
103 */ 103 */
104 int operator >>(int shiftAmount); 104 int operator >>(int shiftAmount);
105 105
106 /**
107 * Returns this integer to the power of [exponent] modulo [modulus].
108 *
109 * The [exponent] must be non-negative and [modulus] must be
110 * positive.
111 */
112 int modPow(int exponent, int modulus);
113
114 /**
115 * Returns the modular multiplicative inverse of this integer
116 * modulo [modulus].
117 *
118 * The [modulus] must be positive.
119 *
120 * It is an error if no modular inverse exists.
121 */
122 int modInverse(int modulus);
123
124 /**
125 * Returns the greatest common divisor of this integer and [other].
126 *
127 * If either number is non-zero, the result is the numerically greatest
128 * integer dividing both `this` and `other`.
129 *
130 * The greatest common divisor is independent of the order,
131 * so `x.gcd(y)` is always the same as `y.gcd(x)`.
132 *
133 * For any integer `x`, `x.gcd(x)` is `x.abs()`.
134 *
135 * If both `this` and `other` is zero, the result is also zero.
136 */
137 int gcd(int other);
138
106 /** Returns true if and only if this integer is even. */ 139 /** Returns true if and only if this integer is even. */
107 bool get isEven; 140 bool get isEven;
108 141
109 /** Returns true if and only if this integer is odd. */ 142 /** Returns true if and only if this integer is odd. */
110 bool get isOdd; 143 bool get isOdd;
111 144
112 /** 145 /**
113 * Returns the minimum number of bits required to store this integer. 146 * Returns the minimum number of bits required to store this integer.
114 * 147 *
115 * The number of bits excludes the sign bit, which gives the natural length 148 * The number of bits excludes the sign bit, which gives the natural length
(...skipping 14 matching lines...) Expand all
130 * (-3).bitLength == 2; // 11111101 163 * (-3).bitLength == 2; // 11111101
131 * (-4).bitLength == 2; // 11111100 164 * (-4).bitLength == 2; // 11111100
132 */ 165 */
133 int get bitLength; 166 int get bitLength;
134 167
135 /** 168 /**
136 * Returns the least significant [width] bits of this integer as a 169 * Returns the least significant [width] bits of this integer as a
137 * non-negative number (i.e. unsigned representation). The returned value has 170 * non-negative number (i.e. unsigned representation). The returned value has
138 * zeros in all bit positions higher than [width]. 171 * zeros in all bit positions higher than [width].
139 * 172 *
140 * (-1).toUnsigned(5) == 32 // 11111111 -> 00011111 173 * (-1).toUnsigned(5) == 31 // 11111111 -> 00011111
141 * 174 *
142 * This operation can be used to simulate arithmetic from low level languages. 175 * This operation can be used to simulate arithmetic from low level languages.
143 * For example, to increment an 8 bit quantity: 176 * For example, to increment an 8 bit quantity:
144 * 177 *
145 * q = (q + 1).toUnsigned(8); 178 * q = (q + 1).toUnsigned(8);
146 * 179 *
147 * `q` will count from `0` up to `255` and then wrap around to `0`. 180 * `q` will count from `0` up to `255` and then wrap around to `0`.
148 * 181 *
149 * If the input fits in [width] bits without truncation, the result is the 182 * If the input fits in [width] bits without truncation, the result is the
150 * same as the input. The minimum width needed to avoid truncation of `x` is 183 * same as the input. The minimum width needed to avoid truncation of `x` is
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 * The returned string is parsable by [parse]. 267 * The returned string is parsable by [parse].
235 * For any `int` [:i:], it is guaranteed that 268 * For any `int` [:i:], it is guaranteed that
236 * [:i == int.parse(i.toString()):]. 269 * [:i == int.parse(i.toString()):].
237 */ 270 */
238 String toString(); 271 String toString();
239 272
240 /** 273 /**
241 * Converts [this] to a string representation in the given [radix]. 274 * Converts [this] to a string representation in the given [radix].
242 * 275 *
243 * In the string representation, lower-case letters are used for digits above 276 * In the string representation, lower-case letters are used for digits above
244 * '9'. 277 * '9', with 'a' being 10 an 'z' being 35.
245 * 278 *
246 * The [radix] argument must be an integer in the range 2 to 36. 279 * The [radix] argument must be an integer in the range 2 to 36.
247 */ 280 */
248 String toRadixString(int radix); 281 String toRadixString(int radix);
249 282
250 /** 283 /**
251 * Parse [source] as an integer literal and return its value. 284 * Parse [source] as a, possibly signed, integer literal and return its value.
252 *
253 * The [radix] must be in the range 2..36. The digits used are
254 * first the decimal digits 0..9, and then the letters 'a'..'z'.
255 * Accepts capital letters as well.
256 *
257 * If no [radix] is given then it defaults to 10, unless the string starts
258 * with "0x", "-0x" or "+0x", in which case the radix is set to 16 and the
259 * "0x" is ignored.
260 * 285 *
261 * The [source] must be a non-empty sequence of base-[radix] digits, 286 * The [source] must be a non-empty sequence of base-[radix] digits,
262 * optionally prefixed with a minus or plus sign ('-' or '+'). 287 * optionally prefixed with a minus or plus sign ('-' or '+').
263 * 288 *
264 * It must always be the case for an int [:n:] and radix [:r:] that 289 * The [radix] must be in the range 2..36. The digits used are
290 * first the decimal digits 0..9, and then the letters 'a'..'z' with
291 * values 10 through 35. Also accepts upper-case letters with the same
292 * values as the lower-case ones.
293 *
294 * If no [radix] is given then it defaults to 10. In this case, the [source]
295 * digits may also start with `0x`, in which case the number is interpreted
296 * as a hexadecimal literal, which effectively means that the `0x` is ignored
297 * and the radix is instead set to 16.
298 *
299 * For any int [:n:] and radix [:r:], it is guaranteed that
265 * [:n == int.parse(n.toRadixString(r), radix: r):]. 300 * [:n == int.parse(n.toRadixString(r), radix: r):].
266 * 301 *
267 * If the [source] is not a valid integer literal, optionally prefixed by a 302 * If the [source] is not a valid integer literal, optionally prefixed by a
268 * sign, the [onError] is called with the [source] as argument, and its return 303 * sign, the [onError] is called with the [source] as argument, and its return
269 * value is used instead. If no [onError] is provided, a [FormatException] 304 * value is used instead. If no [onError] is provided, a [FormatException]
270 * is thrown. 305 * is thrown.
271 * 306 *
307 * The [onError] handler can be chosen to return `null`. This is preferable
308 * to to throwing and then immediately catching the [FormatException].
309 * Example:
310 *
311 * var value = int.parse(text, onError: (source) => null);
312 * if (value == null) ... handle the problem
313 *
272 * The [onError] function is only invoked if [source] is a [String]. It is 314 * The [onError] function is only invoked if [source] is a [String]. It is
273 * not invoked if the [source] is, for example, `null`. 315 * not invoked if the [source] is, for example, `null`.
274 */ 316 */
275 external static int parse(String source, 317 external static int parse(String source,
276 { int radix, 318 { int radix,
277 int onError(String source) }); 319 int onError(String source) });
278 } 320 }
OLDNEW
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/input_sdk/private/js_number.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698