blob: 74fbeba36eb400e3d54f8e91eb82d0b881ff3550 [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/src/generated/java_core.dart';
/**
* Returns `true` if a and b contain equal elements in the same order.
*/
bool listsEqual(List a, List b) {
// TODO(rnystrom): package:collection also implements this, and analyzer
// already transitively depends on that package. Consider using it instead.
if (identical(a, b)) {
return true;
}
if (a.length != b.length) {
return false;
}
for (int i = 0; i < a.length; i++) {
if (a[i] != b[i]) {
return false;
}
}
return true;
}
/**
* Methods for operating on integers as if they were arrays of booleans. These
* arrays can be indexed by either integers or by enumeration constants.
*/
class BooleanArray {
/**
* Return the value of the element of the given [array] at the given [index].
*/
static bool get(int array, int index) {
_checkIndex(index);
return (array & (1 << index)) > 0;
}
/**
* Return the value of the element at the given index.
*/
@deprecated
static bool getEnum<E extends Enum<E>>(int array, Enum<E> index) =>
get(array, index.ordinal);
/**
* Set the value of the element of the given [array] at the given [index] to
* the given [value].
*/
static int set(int array, int index, bool value) {
_checkIndex(index);
if (value) {
return array | (1 << index);
} else {
return array & ~(1 << index);
}
}
/**
* Set the value of the element at the given index to the given value.
*/
@deprecated
static int setEnum<E extends Enum<E>>(int array, Enum<E> index, bool value) =>
set(array, index.ordinal, value);
/**
* Throw an exception if the index is not within the bounds allowed for an
* integer-encoded array of boolean values.
*/
static void _checkIndex(int index) {
if (index < 0 || index > 30) {
throw RangeError("Index not between 0 and 30: $index");
}
}
}