1 | // Copyright 2014 The Flutter Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | import '_bitfield_io.dart' |
6 | if (dart.library.js_util) '_bitfield_web.dart' as bitfield; |
7 | |
8 | /// The largest SMI value. |
9 | /// |
10 | /// See <https://www.dartlang.org/articles/numeric-computation/#smis-and-mints> |
11 | /// |
12 | /// When compiling to JavaScript, this value is not supported since it is |
13 | /// larger than the maximum safe 32bit integer. |
14 | const int kMaxUnsignedSMI = bitfield.kMaxUnsignedSMI; |
15 | |
16 | /// A BitField over an enum (or other class whose values implement "index"). |
17 | /// Only the first 62 values of the enum can be used as indices. |
18 | /// |
19 | /// When compiling to JavaScript, this class is not supported. |
20 | abstract class BitField<T extends dynamic> { |
21 | /// Creates a bit field of all zeros. |
22 | /// |
23 | /// The given length must be at most 62. |
24 | factory BitField(int length) = bitfield.BitField<T>; |
25 | |
26 | /// Creates a bit field filled with a particular value. |
27 | /// |
28 | /// If the value argument is true, the bits are filled with ones. Otherwise, |
29 | /// the bits are filled with zeros. |
30 | /// |
31 | /// The given length must be at most 62. |
32 | factory BitField.filled(int length, bool value) = bitfield.BitField<T>.filled; |
33 | |
34 | /// Returns whether the bit with the given index is set to one. |
35 | bool operator [](T index); |
36 | |
37 | /// Sets the bit with the given index to the given value. |
38 | /// |
39 | /// If value is true, the bit with the given index is set to one. Otherwise, |
40 | /// the bit is set to zero. |
41 | void operator []=(T index, bool value); |
42 | |
43 | /// Sets all the bits to the given value. |
44 | /// |
45 | /// If the value is true, the bits are all set to one. Otherwise, the bits are |
46 | /// all set to zero. Defaults to setting all the bits to zero. |
47 | void reset([ bool value = false ]); |
48 | } |
49 | |