// 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");
    }
  }
}
