// Copyright (c) 2013, 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.

/// Lists that efficiently handle fixed sized data
/// (for example, unsigned 8 byte integers) and SIMD numeric types.
///
/// To use this library in your code:
///
///     import 'dart:typed_data';
library dart.typed_data;

import "dart:_internal" show UnmodifiableListBase;

part "unmodifiable_typed_data.dart";

/**
 * A sequence of bytes underlying a typed data object.
 *
 * Used to process large quantities of binary or numerical data
 * more efficiently using a typed view.
 */
abstract class ByteBuffer {
  /**
   * Returns the length of this byte buffer, in bytes.
   */
  int get lengthInBytes;

  /**
   * Creates a [Uint8List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Uint8List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes] and contains [length] bytes.
   * If [length] is omitted, the range extends to the end of the buffer.
   *
   * The start index and length must describe a valid range of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `length` must not be negative, and
   * * `offsetInBytes + length` must not be greater than [lengthInBytes].
   */
  Uint8List asUint8List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Int8List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Int8List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes] and contains [length] bytes.
   * If [length] is omitted, the range extends to the end of the buffer.
   *
   * The start index and length must describe a valid range of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `length` must not be negative, and
   * * `offsetInBytes + length` must not be greater than [lengthInBytes].
   */
  Int8List asInt8List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Uint8ClampedList] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Uint8ClampedList` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes] and contains [length] bytes.
   * If [length] is omitted, the range extends to the end of the buffer.
   *
   * The start index and length must describe a valid range of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `length` must not be negative, and
   * * `offsetInBytes + length` must not be greater than [lengthInBytes].
   */
  Uint8ClampedList asUint8ClampedList([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Uint16List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Uint16List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 16-bit aligned,
   * and contains [length] 16-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not even, the last byte can't be part of the view.
   *
   * The start index and length must describe a valid 16-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by two,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 2` must not be greater than [lengthInBytes].
   */
  Uint16List asUint16List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Int16List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Int16List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 16-bit aligned,
   * and contains [length] 16-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not even, the last byte can't be part of the view.
   *
   * The start index and length must describe a valid 16-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by two,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 2` must not be greater than [lengthInBytes].
   */
  Int16List asInt16List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Uint32List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Uint32List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 32-bit aligned,
   * and contains [length] 32-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by four, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 32-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by four,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 4` must not be greater than [lengthInBytes].
   */
  Uint32List asUint32List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Int32List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Int32List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 32-bit aligned,
   * and contains [length] 32-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by four, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 32-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by four,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 4` must not be greater than [lengthInBytes].
   */
  Int32List asInt32List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Uint64List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Uint64List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 64-bit aligned,
   * and contains [length] 64-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by eight, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 64-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by eight,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 8` must not be greater than [lengthInBytes].
   */
  Uint64List asUint64List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Int64List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Int64List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 64-bit aligned,
   * and contains [length] 64-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by eight, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 64-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by eight,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 8` must not be greater than [lengthInBytes].
   */
  Int64List asInt64List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Int32x4List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Int32x4List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 128-bit aligned,
   * and contains [length] 128-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by 16, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 128-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by sixteen,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 16` must not be greater than [lengthInBytes].
   */
  Int32x4List asInt32x4List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Float32List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Float32List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 32-bit aligned,
   * and contains [length] 32-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by four, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 32-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by four,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 4` must not be greater than [lengthInBytes].
   */
  Float32List asFloat32List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Float64List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Float64List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 64-bit aligned,
   * and contains [length] 64-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by eight, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 64-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by eight,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 8` must not be greater than [lengthInBytes].
   */
  Float64List asFloat64List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Float32x4List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Float32x4List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 128-bit aligned,
   * and contains [length] 128-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by 16, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 128-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by sixteen,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 16` must not be greater than [lengthInBytes].
   */
  Float32x4List asFloat32x4List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [Float64x2List] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `Float64x2List` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes], which must be 128-bit aligned,
   * and contains [length] 128-bit integers.
   * If [length] is omitted, the range extends as far towards the end of
   * the buffer as possible -
   * if [lengthInBytes] is not divisible by 16, the last bytes can't be part
   * of the view.
   *
   * The start index and length must describe a valid 128-bit aligned range
   * of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `offsetInBytes` must be divisible by sixteen,
   * * `length` must not be negative, and
   * * `offsetInBytes + length * 16` must not be greater than [lengthInBytes].
   */
  Float64x2List asFloat64x2List([int offsetInBytes = 0, int length]);

  /**
   * Creates a [ByteData] _view_ of a region of this byte buffer.
   *
   * The view is backed by the bytes of this byte buffer.
   * Any changes made to the `ByteData` will also change the buffer,
   * and vice versa.
   *
   * The viewed region start at [offsetInBytes] and contains [length] bytes.
   * If [length] is omitted, the range extends to the end of the buffer.
   *
   * The start index and length must describe a valid range of the buffer:
   *
   * * `offsetInBytes` must not be negative,
   * * `length` must not be negative, and
   * * `offsetInBytes + length` must not be greater than [lengthInBytes].
   */
  ByteData asByteData([int offsetInBytes = 0, int length]);
}

/**
 * A typed view of a sequence of bytes.
 */
abstract class TypedData {
  /**
   * Returns the number of bytes in the representation of each element in this
   * list.
   */
  int get elementSizeInBytes;

  /**
   * Returns the offset in bytes into the underlying byte buffer of this view.
   */
  int get offsetInBytes;

  /**
   * Returns the length of this view, in bytes.
   */
  int get lengthInBytes;

  /**
   * Returns the byte buffer associated with this object.
   */
  ByteBuffer get buffer;
}

abstract class _TypedIntList extends TypedData {
  /**
   * Returns the concatenation of this list and [other].
   *
   * If other is also a typed-data integer list, the returned list will
   * be a type-data integer list capable of containing all the elements of
   * this list and of [other].
   * Otherwise the returned list will be a normal growable `List<int>`.
   */
  List<int> operator +(List<int> other);
}

abstract class _TypedFloatList extends TypedData {
  /**
   * Returns the concatenation of this list and [other].
   *
   * If other is also a typed-data floating point number list,
   * the returned list will be a type-data float list capable of containing
   * all the elements of this list and of [other].
   * Otherwise the returned list will be a normal growable `List<double>`.
   */
  List<double> operator +(List<double> other);
}

// TODO(lrn): Remove class for Dart 2.0.
@Deprecated("Use Endian instead")
abstract class Endianness {
  Endianness._(); // prevent construction.
  /** Deprecated, use [Endian.big] instead. */
  static const Endian BIG_ENDIAN = Endian.big;
  /** Deprecated, use [Endian.little] instead. */
  static const Endian LITTLE_ENDIAN = Endian.little;
  /** Deprecated, use [Endian.host] instead. */
  static Endian get HOST_ENDIAN => Endian.host;
}

/**
 * Describes endianness to be used when accessing or updating a
 * sequence of bytes.
 */
class Endian implements Endianness {
  final bool _littleEndian;
  const Endian._(this._littleEndian);

  static const Endian big = const Endian._(false);
  static const Endian little = const Endian._(true);
  static final Endian host =
      (new ByteData.view(new Uint16List.fromList([1]).buffer)).getInt8(0) == 1
          ? little
          : big;
}

/**
 * A fixed-length, random-access sequence of bytes that also provides random
 * and unaligned access to the fixed-width integers and floating point
 * numbers represented by those bytes.
 *
 * `ByteData` may be used to pack and unpack data from external sources
 * (such as networks or files systems), and to process large quantities
 * of numerical data more efficiently than would be possible
 * with ordinary [List] implementations.
 * `ByteData` can save space, by eliminating the need for object headers,
 * and time, by eliminating the need for data copies.
 * Finally, `ByteData` may be used to intentionally reinterpret the bytes
 * representing one arithmetic type as another.
 * For example this code fragment determine what 32-bit signed integer
 * is represented by the bytes of a 32-bit floating point number:
 *
 *     var buffer = new Uint8List(8).buffer;
 *     var bdata = new ByteData.view(buffer);
 *     bdata.setFloat32(0, 3.04);
 *     int huh = bdata.getInt32(0);
 */
abstract class ByteData implements TypedData {
  /**
   * Creates a [ByteData] of the specified length (in elements), all of
   * whose bytes are initially zero.
   */
  external factory ByteData(int length);

  /**
   * Creates an [ByteData] _view_ of the specified region in [buffer].
   *
   * Changes in the [ByteData] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   */
  factory ByteData.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asByteData(offsetInBytes, length);
  }

  /**
   * Returns the (possibly negative) integer represented by the byte at the
   * specified [byteOffset] in this object, in two's complement binary
   * representation.
   *
   * The return value will be between -128 and 127, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * greater than or equal to the length of this object.
   */
  int getInt8(int byteOffset);

  /**
   * Sets the byte at the specified [byteOffset] in this object to the
   * two's complement binary representation of the specified [value], which
   * must fit in a single byte.
   *
   * In other words, [value] must be between -128 and 127, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * greater than or equal to the length of this object.
   */
  void setInt8(int byteOffset, int value);

  /**
   * Returns the positive integer represented by the byte at the specified
   * [byteOffset] in this object, in unsigned binary form.
   *
   * The return value will be between 0 and 255, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * greater than or equal to the length of this object.
   */
  int getUint8(int byteOffset);

  /**
   * Sets the byte at the specified [byteOffset] in this object to the
   * unsigned binary representation of the specified [value], which must fit
   * in a single byte.
   *
   * In other words, [value] must be between 0 and 255, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative,
   * or greater than or equal to the length of this object.
   */
  void setUint8(int byteOffset, int value);

  /**
   * Returns the (possibly negative) integer represented by the two bytes at
   * the specified [byteOffset] in this object, in two's complement binary
   * form.
   *
   * The return value will be between -2<sup>15</sup> and 2<sup>15</sup> - 1,
   * inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 2` is greater than the length of this object.
   */
  int getInt16(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the two bytes starting at the specified [byteOffset] in this
   * object to the two's complement binary representation of the specified
   * [value], which must fit in two bytes.
   *
   * In other words, [value] must lie
   * between -2<sup>15</sup> and 2<sup>15</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 2` is greater than the length of this object.
   */
  void setInt16(int byteOffset, int value, [Endian endian = Endian.big]);

  /**
   * Returns the positive integer represented by the two bytes starting
   * at the specified [byteOffset] in this object, in unsigned binary
   * form.
   *
   * The return value will be between 0 and  2<sup>16</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 2` is greater than the length of this object.
   */
  int getUint16(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the two bytes starting at the specified [byteOffset] in this object
   * to the unsigned binary representation of the specified [value],
   * which must fit in two bytes.
   *
   * In other words, [value] must be between
   * 0 and 2<sup>16</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 2` is greater than the length of this object.
   */
  void setUint16(int byteOffset, int value, [Endian endian = Endian.big]);

  /**
   * Returns the (possibly negative) integer represented by the four bytes at
   * the specified [byteOffset] in this object, in two's complement binary
   * form.
   *
   * The return value will be between -2<sup>31</sup> and 2<sup>31</sup> - 1,
   * inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 4` is greater than the length of this object.
   */
  int getInt32(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the four bytes starting at the specified [byteOffset] in this
   * object to the two's complement binary representation of the specified
   * [value], which must fit in four bytes.
   *
   * In other words, [value] must lie
   * between -2<sup>31</sup> and 2<sup>31</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 4` is greater than the length of this object.
   */
  void setInt32(int byteOffset, int value, [Endian endian = Endian.big]);

  /**
   * Returns the positive integer represented by the four bytes starting
   * at the specified [byteOffset] in this object, in unsigned binary
   * form.
   *
   * The return value will be between 0 and  2<sup>32</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 4` is greater than the length of this object.
   */
  int getUint32(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the four bytes starting at the specified [byteOffset] in this object
   * to the unsigned binary representation of the specified [value],
   * which must fit in four bytes.
   *
   * In other words, [value] must be between
   * 0 and 2<sup>32</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 4` is greater than the length of this object.
   */
  void setUint32(int byteOffset, int value, [Endian endian = Endian.big]);

  /**
   * Returns the (possibly negative) integer represented by the eight bytes at
   * the specified [byteOffset] in this object, in two's complement binary
   * form.
   *
   * The return value will be between -2<sup>63</sup> and 2<sup>63</sup> - 1,
   * inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 8` is greater than the length of this object.
   */
  int getInt64(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the eight bytes starting at the specified [byteOffset] in this
   * object to the two's complement binary representation of the specified
   * [value], which must fit in eight bytes.
   *
   * In other words, [value] must lie
   * between -2<sup>63</sup> and 2<sup>63</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 8` is greater than the length of this object.
   */
  void setInt64(int byteOffset, int value, [Endian endian = Endian.big]);

  /**
   * Returns the positive integer represented by the eight bytes starting
   * at the specified [byteOffset] in this object, in unsigned binary
   * form.
   *
   * The return value will be between 0 and  2<sup>64</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 8` is greater than the length of this object.
   */
  int getUint64(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the eight bytes starting at the specified [byteOffset] in this object
   * to the unsigned binary representation of the specified [value],
   * which must fit in eight bytes.
   *
   * In other words, [value] must be between
   * 0 and 2<sup>64</sup> - 1, inclusive.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 8` is greater than the length of this object.
   */
  void setUint64(int byteOffset, int value, [Endian endian = Endian.big]);

  /**
   * Returns the floating point number represented by the four bytes at
   * the specified [byteOffset] in this object, in IEEE 754
   * single-precision binary floating-point format (binary32).
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 4` is greater than the length of this object.
   */
  double getFloat32(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the four bytes starting at the specified [byteOffset] in this
   * object to the IEEE 754 single-precision binary floating-point
   * (binary32) representation of the specified [value].
   *
   * **Note that this method can lose precision.** The input [value] is
   * a 64-bit floating point value, which will be converted to 32-bit
   * floating point value by IEEE 754 rounding rules before it is stored.
   * If [value] cannot be represented exactly as a binary32, it will be
   * converted to the nearest binary32 value.  If two binary32 values are
   * equally close, the one whose least significant bit is zero will be used.
   * Note that finite (but large) values can be converted to infinity, and
   * small non-zero values can be converted to zero.
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 4` is greater than the length of this object.
   */
  void setFloat32(int byteOffset, double value, [Endian endian = Endian.big]);

  /**
   * Returns the floating point number represented by the eight bytes at
   * the specified [byteOffset] in this object, in IEEE 754
   * double-precision binary floating-point format (binary64).
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 8` is greater than the length of this object.
   */
  double getFloat64(int byteOffset, [Endian endian = Endian.big]);

  /**
   * Sets the eight bytes starting at the specified [byteOffset] in this
   * object to the IEEE 754 double-precision binary floating-point
   * (binary64) representation of the specified [value].
   *
   * Throws [RangeError] if [byteOffset] is negative, or
   * `byteOffset + 8` is greater than the length of this object.
   */
  void setFloat64(int byteOffset, double value, [Endian endian = Endian.big]);
}

/**
 * A fixed-length list of 8-bit signed integers.
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low eight bits,
 * interpreted as a signed 8-bit two's complement integer with values in the
 * range -128 to +127.
 */
abstract class Int8List implements List<int>, _TypedIntList {
  /**
   * Creates an [Int8List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Int8List(int length);

  /**
   * Creates a [Int8List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Int8List.fromList(List<int> elements);

  /**
   * Creates an [Int8List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Int8List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   */
  factory Int8List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asInt8List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 1;
}

/**
 * A fixed-length list of 8-bit unsigned integers.
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low eight bits,
 * interpreted as an unsigned 8-bit integer with values in the
 * range 0 to 255.
 */
abstract class Uint8List implements List<int>, _TypedIntList {
  /**
   * Creates a [Uint8List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Uint8List(int length);

  /**
   * Creates a [Uint8List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Uint8List.fromList(List<int> elements);

  /**
   * Creates a [Uint8List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Uint8List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   */
  factory Uint8List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asUint8List(offsetInBytes, length);
  }

  /**
   * Returns a concatenation of this list and [other].
   *
   * If [other] is also a typed-data list, then the return list will be a
   * typed data list capable of holding both unsigned 8-bit integers and
   * the elements of [other], otherwise it'll be a normal list of integers.
   */
  List<int> operator +(List<int> other);

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 1;
}

/**
 * A fixed-length list of 8-bit unsigned integers.
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are clamped to an unsigned eight bit value.
 * That is, all values below zero are stored as zero
 * and all values above 255 are stored as 255.
 */
abstract class Uint8ClampedList implements List<int>, _TypedIntList {
  /**
   * Creates a [Uint8ClampedList] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Uint8ClampedList(int length);

  /**
   * Creates a [Uint8ClampedList] of the same size as the [elements]
   * list and copies over the values clamping when needed.
   *
   * Values are clamped to fit in the list when they are copied,
   * the same way storing values clamps them.
   */
  external factory Uint8ClampedList.fromList(List<int> elements);

  /**
   * Creates a [Uint8ClampedList] _view_ of the specified region in the
   * specified byte [buffer].
   *
   * Changes in the [Uint8List] will be visible in the byte buffer
   * and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   */
  factory Uint8ClampedList.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asUint8ClampedList(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 1;
}

/**
 * A fixed-length list of 16-bit signed integers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low 16 bits,
 * interpreted as a signed 16-bit two's complement integer with values in the
 * range -32768 to +32767.
 */
abstract class Int16List implements List<int>, _TypedIntList {
  /**
   * Creates an [Int16List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Int16List(int length);

  /**
   * Creates a [Int16List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Int16List.fromList(List<int> elements);

  /**
   * Creates an [Int16List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Int16List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Int16List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asInt16List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 2;
}

/**
 * A fixed-length list of 16-bit unsigned integers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low 16 bits,
 * interpreted as an unsigned 16-bit integer with values in the
 * range 0 to 65535.
 */
abstract class Uint16List implements List<int>, _TypedIntList {
  /**
   * Creates a [Uint16List] of the specified length (in elements), all
   * of whose elements are initially zero.
   */
  external factory Uint16List(int length);

  /**
   * Creates a [Uint16List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Uint16List.fromList(List<int> elements);

  /**
   * Creates a [Uint16List] _view_ of the specified region in
   * the specified byte buffer.
   *
   * Changes in the [Uint16List] will be visible in the byte buffer
   * and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Uint16List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asUint16List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 2;
}

/**
 * A fixed-length list of 32-bit signed integers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low 32 bits,
 * interpreted as a signed 32-bit two's complement integer with values in the
 * range -2147483648 to 2147483647.
 */
abstract class Int32List implements List<int>, _TypedIntList {
  /**
   * Creates an [Int32List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Int32List(int length);

  /**
   * Creates a [Int32List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Int32List.fromList(List<int> elements);

  /**
   * Creates an [Int32List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Int32List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Int32List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asInt32List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 4;
}

/**
 * A fixed-length list of 32-bit unsigned integers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low 32 bits,
 * interpreted as an unsigned 32-bit integer with values in the
 * range 0 to 4294967295.
 */
abstract class Uint32List implements List<int>, _TypedIntList {
  /**
   * Creates a [Uint32List] of the specified length (in elements), all
   * of whose elements are initially zero.
   */
  external factory Uint32List(int length);

  /**
   * Creates a [Uint32List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Uint32List.fromList(List<int> elements);

  /**
   * Creates a [Uint32List] _view_ of the specified region in
   * the specified byte buffer.
   *
   * Changes in the [Uint32List] will be visible in the byte buffer
   * and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Uint32List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asUint32List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 4;
}

/**
 * A fixed-length list of 64-bit signed integers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low 64 bits,
 * interpreted as a signed 64-bit two's complement integer with values in the
 * range -9223372036854775808 to +9223372036854775807.
 */
abstract class Int64List implements List<int>, _TypedIntList {
  /**
   * Creates an [Int64List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Int64List(int length);

  /**
   * Creates a [Int64List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Int64List.fromList(List<int> elements);

  /**
   * Creates an [Int64List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Int64List] will be visible in the byte buffer
   * and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Int64List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asInt64List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 8;
}

/**
 * A fixed-length list of 64-bit unsigned integers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation can be considerably
 * more space- and time-efficient than the default [List] implementation.
 *
 * Integers stored in the list are truncated to their low 64 bits,
 * interpreted as an unsigned 64-bit integer with values in the
 * range 0 to 18446744073709551615.
 */
abstract class Uint64List implements List<int>, _TypedIntList {
  /**
   * Creates a [Uint64List] of the specified length (in elements), all
   * of whose elements are initially zero.
   */
  external factory Uint64List(int length);

  /**
   * Creates a [Uint64List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Uint64List.fromList(List<int> elements);

  /**
   * Creates an [Uint64List] _view_ of the specified region in
   * the specified byte buffer.
   *
   * Changes in the [Uint64List] will be visible in the byte buffer
   * and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Uint64List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asUint64List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 8;
}

/**
 * A fixed-length list of IEEE 754 single-precision binary floating-point
 * numbers that is viewable as a [TypedData].
 *
 * For long lists, this
 * implementation can be considerably more space- and time-efficient than
 * the default [List] implementation.
 *
 * Double values stored in the list are converted to the nearest
 * single-precision value. Values read are converted to a double
 * value with the same value.
 */
abstract class Float32List implements List<double>, _TypedFloatList {
  /**
   * Creates a [Float32List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Float32List(int length);

  /**
   * Creates a [Float32List] with the same length as the [elements] list
   * and copies over the elements.
   *
   * Values are truncated to fit in the list when they are copied,
   * the same way storing values truncates them.
   */
  external factory Float32List.fromList(List<double> elements);

  /**
   * Creates a [Float32List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Float32List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Float32List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asFloat32List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 4;
}

/**
 * A fixed-length list of IEEE 754 double-precision binary floating-point
 * numbers  that is viewable as a [TypedData].
 *
 * For long lists, this
 * implementation can be considerably more space- and time-efficient than
 * the default [List] implementation.
 */
abstract class Float64List implements List<double>, _TypedFloatList {
  /**
   * Creates a [Float64List] of the specified length (in elements), all of
   * whose elements are initially zero.
   */
  external factory Float64List(int length);

  /**
   * Creates a [Float64List] with the same length as the [elements] list
   * and copies over the elements.
   */
  external factory Float64List.fromList(List<double> elements);

  /**
   * Creates a [Float64List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Float64List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Float64List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asFloat64List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 8;
}

/**
 * A fixed-length list of Float32x4 numbers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation will be considerably more
 * space- and time-efficient than the default [List] implementation.
 */
abstract class Float32x4List implements List<Float32x4>, TypedData {
  /**
   * Creates a [Float32x4List] of the specified length (in elements),
   * all of whose elements are initially zero.
   */
  external factory Float32x4List(int length);

  /**
   * Creates a [Float32x4List] with the same length as the [elements] list
   * and copies over the elements.
   */
  external factory Float32x4List.fromList(List<Float32x4> elements);

  /**
   * Creates a [Float32x4List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Float32x4List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Float32x4List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asFloat32x4List(offsetInBytes, length);
  }

  /**
   * Returns the concatenation of this list and [other].
   *
   * If [other] is also a [Float32x4List], the result is a new [Float32x4List],
   * otherwise the result is a normal growable `List<Float32x4>`.
   */
  List<Float32x4> operator +(List<Float32x4> other);

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 16;
}

/**
 * A fixed-length list of Int32x4 numbers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation will be considerably more
 * space- and time-efficient than the default [List] implementation.
 */
abstract class Int32x4List implements List<Int32x4>, TypedData {
  /**
   * Creates a [Int32x4List] of the specified length (in elements),
   * all of whose elements are initially zero.
   */
  external factory Int32x4List(int length);

  /**
   * Creates a [Int32x4List] with the same length as the [elements] list
   * and copies over the elements.
   */
  external factory Int32x4List.fromList(List<Int32x4> elements);

  /**
   * Creates a [Int32x4List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Int32x4List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Int32x4List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asInt32x4List(offsetInBytes, length);
  }

  /**
   * Returns the concatenation of this list and [other].
   *
   * If [other] is also a [Int32x4List], the result is a new [Int32x4List],
   * otherwise the result is a normal growable `List<Int32x4>`.
   */
  List<Int32x4> operator +(List<Int32x4> other);

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 16;
}

/**
 * A fixed-length list of Float64x2 numbers that is viewable as a
 * [TypedData].
 *
 * For long lists, this implementation will be considerably more
 * space- and time-efficient than the default [List] implementation.
 */
abstract class Float64x2List implements List<Float64x2>, TypedData {
  /**
   * Creates a [Float64x2List] of the specified length (in elements),
   * all of whose elements have all lanes set to zero.
   */
  external factory Float64x2List(int length);

  /**
   * Creates a [Float64x2List] with the same length as the [elements] list
   * and copies over the elements.
   */
  external factory Float64x2List.fromList(List<Float64x2> elements);

  /**
   * Returns the concatenation of this list and [other].
   *
   * If [other] is also a [Float64x2List], the result is a new [Float64x2List],
   * otherwise the result is a normal growable `List<Float64x2>`.
   */
  List<Float64x2> operator +(List<Float64x2> other);

  /**
   * Creates a [Float64x2List] _view_ of the specified region in [buffer].
   *
   * Changes in the [Float64x2List] will be visible in the byte
   * buffer and vice versa.
   * If the [offsetInBytes] index of the region is not specified,
   * it defaults to zero (the first byte in the byte buffer).
   * If the length is not specified, it defaults to `null`,
   * which indicates that the view extends to the end of the byte buffer.
   *
   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
   * the length of [buffer].
   *
   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
   * [bytesPerElement].
   */
  factory Float64x2List.view(ByteBuffer buffer,
      [int offsetInBytes = 0, int length]) {
    return buffer.asFloat64x2List(offsetInBytes, length);
  }

  @Deprecated("Use bytesPerElement instead")
  static const int BYTES_PER_ELEMENT = bytesPerElement;
  static const int bytesPerElement = 16;
}

/**
 * Float32x4 immutable value type and operations.
 *
 * Float32x4 stores 4 32-bit floating point values in "lanes".
 * The lanes are "x", "y", "z", and "w" respectively.
 */
abstract class Float32x4 {
  external factory Float32x4(double x, double y, double z, double w);
  external factory Float32x4.splat(double v);
  external factory Float32x4.zero();
  external factory Float32x4.fromInt32x4Bits(Int32x4 x);

  /// Sets the x and y lanes to their respective values in [v] and sets the z
  /// and w lanes to 0.0.
  external factory Float32x4.fromFloat64x2(Float64x2 v);

  /// Addition operator.
  Float32x4 operator +(Float32x4 other);

  /// Negate operator.
  Float32x4 operator -();

  /// Subtraction operator.
  Float32x4 operator -(Float32x4 other);

  /// Multiplication operator.
  Float32x4 operator *(Float32x4 other);

  /// Division operator.
  Float32x4 operator /(Float32x4 other);

  /// Relational less than.
  Int32x4 lessThan(Float32x4 other);

  /// Relational less than or equal.
  Int32x4 lessThanOrEqual(Float32x4 other);

  /// Relational greater than.
  Int32x4 greaterThan(Float32x4 other);

  /// Relational greater than or equal.
  Int32x4 greaterThanOrEqual(Float32x4 other);

  /// Relational equal.
  Int32x4 equal(Float32x4 other);

  /// Relational not-equal.
  Int32x4 notEqual(Float32x4 other);

  /// Returns a copy of [this] each lane being scaled by [s].
  /// Equivalent to this * new Float32x4.splat(s)
  Float32x4 scale(double s);

  /// Returns the lane-wise absolute value of this [Float32x4].
  Float32x4 abs();

  /// Lane-wise clamp [this] to be in the range [lowerLimit]-[upperLimit].
  Float32x4 clamp(Float32x4 lowerLimit, Float32x4 upperLimit);

  /// Extracted x value.
  double get x;

  /// Extracted y value.
  double get y;

  /// Extracted z value.
  double get z;

  /// Extracted w value.
  double get w;

  /// Extract the sign bits from each lane return them in the first 4 bits.
  /// "x" lane is bit 0.
  /// "y" lane is bit 1.
  /// "z" lane is bit 2.
  /// "w" lane is bit 3.
  int get signMask;

  /// Mask passed to [shuffle] or [shuffleMix].
  static const int xxxx = 0x0;
  static const int xxxy = 0x40;
  static const int xxxz = 0x80;
  static const int xxxw = 0xC0;
  static const int xxyx = 0x10;
  static const int xxyy = 0x50;
  static const int xxyz = 0x90;
  static const int xxyw = 0xD0;
  static const int xxzx = 0x20;
  static const int xxzy = 0x60;
  static const int xxzz = 0xA0;
  static const int xxzw = 0xE0;
  static const int xxwx = 0x30;
  static const int xxwy = 0x70;
  static const int xxwz = 0xB0;
  static const int xxww = 0xF0;
  static const int xyxx = 0x4;
  static const int xyxy = 0x44;
  static const int xyxz = 0x84;
  static const int xyxw = 0xC4;
  static const int xyyx = 0x14;
  static const int xyyy = 0x54;
  static const int xyyz = 0x94;
  static const int xyyw = 0xD4;
  static const int xyzx = 0x24;
  static const int xyzy = 0x64;
  static const int xyzz = 0xA4;
  static const int xyzw = 0xE4;
  static const int xywx = 0x34;
  static const int xywy = 0x74;
  static const int xywz = 0xB4;
  static const int xyww = 0xF4;
  static const int xzxx = 0x8;
  static const int xzxy = 0x48;
  static const int xzxz = 0x88;
  static const int xzxw = 0xC8;
  static const int xzyx = 0x18;
  static const int xzyy = 0x58;
  static const int xzyz = 0x98;
  static const int xzyw = 0xD8;
  static const int xzzx = 0x28;
  static const int xzzy = 0x68;
  static const int xzzz = 0xA8;
  static const int xzzw = 0xE8;
  static const int xzwx = 0x38;
  static const int xzwy = 0x78;
  static const int xzwz = 0xB8;
  static const int xzww = 0xF8;
  static const int xwxx = 0xC;
  static const int xwxy = 0x4C;
  static const int xwxz = 0x8C;
  static const int xwxw = 0xCC;
  static const int xwyx = 0x1C;
  static const int xwyy = 0x5C;
  static const int xwyz = 0x9C;
  static const int xwyw = 0xDC;
  static const int xwzx = 0x2C;
  static const int xwzy = 0x6C;
  static const int xwzz = 0xAC;
  static const int xwzw = 0xEC;
  static const int xwwx = 0x3C;
  static const int xwwy = 0x7C;
  static const int xwwz = 0xBC;
  static const int xwww = 0xFC;
  static const int yxxx = 0x1;
  static const int yxxy = 0x41;
  static const int yxxz = 0x81;
  static const int yxxw = 0xC1;
  static const int yxyx = 0x11;
  static const int yxyy = 0x51;
  static const int yxyz = 0x91;
  static const int yxyw = 0xD1;
  static const int yxzx = 0x21;
  static const int yxzy = 0x61;
  static const int yxzz = 0xA1;
  static const int yxzw = 0xE1;
  static const int yxwx = 0x31;
  static const int yxwy = 0x71;
  static const int yxwz = 0xB1;
  static const int yxww = 0xF1;
  static const int yyxx = 0x5;
  static const int yyxy = 0x45;
  static const int yyxz = 0x85;
  static const int yyxw = 0xC5;
  static const int yyyx = 0x15;
  static const int yyyy = 0x55;
  static const int yyyz = 0x95;
  static const int yyyw = 0xD5;
  static const int yyzx = 0x25;
  static const int yyzy = 0x65;
  static const int yyzz = 0xA5;
  static const int yyzw = 0xE5;
  static const int yywx = 0x35;
  static const int yywy = 0x75;
  static const int yywz = 0xB5;
  static const int yyww = 0xF5;
  static const int yzxx = 0x9;
  static const int yzxy = 0x49;
  static const int yzxz = 0x89;
  static const int yzxw = 0xC9;
  static const int yzyx = 0x19;
  static const int yzyy = 0x59;
  static const int yzyz = 0x99;
  static const int yzyw = 0xD9;
  static const int yzzx = 0x29;
  static const int yzzy = 0x69;
  static const int yzzz = 0xA9;
  static const int yzzw = 0xE9;
  static const int yzwx = 0x39;
  static const int yzwy = 0x79;
  static const int yzwz = 0xB9;
  static const int yzww = 0xF9;
  static const int ywxx = 0xD;
  static const int ywxy = 0x4D;
  static const int ywxz = 0x8D;
  static const int ywxw = 0xCD;
  static const int ywyx = 0x1D;
  static const int ywyy = 0x5D;
  static const int ywyz = 0x9D;
  static const int ywyw = 0xDD;
  static const int ywzx = 0x2D;
  static const int ywzy = 0x6D;
  static const int ywzz = 0xAD;
  static const int ywzw = 0xED;
  static const int ywwx = 0x3D;
  static const int ywwy = 0x7D;
  static const int ywwz = 0xBD;
  static const int ywww = 0xFD;
  static const int zxxx = 0x2;
  static const int zxxy = 0x42;
  static const int zxxz = 0x82;
  static const int zxxw = 0xC2;
  static const int zxyx = 0x12;
  static const int zxyy = 0x52;
  static const int zxyz = 0x92;
  static const int zxyw = 0xD2;
  static const int zxzx = 0x22;
  static const int zxzy = 0x62;
  static const int zxzz = 0xA2;
  static const int zxzw = 0xE2;
  static const int zxwx = 0x32;
  static const int zxwy = 0x72;
  static const int zxwz = 0xB2;
  static const int zxww = 0xF2;
  static const int zyxx = 0x6;
  static const int zyxy = 0x46;
  static const int zyxz = 0x86;
  static const int zyxw = 0xC6;
  static const int zyyx = 0x16;
  static const int zyyy = 0x56;
  static const int zyyz = 0x96;
  static const int zyyw = 0xD6;
  static const int zyzx = 0x26;
  static const int zyzy = 0x66;
  static const int zyzz = 0xA6;
  static const int zyzw = 0xE6;
  static const int zywx = 0x36;
  static const int zywy = 0x76;
  static const int zywz = 0xB6;
  static const int zyww = 0xF6;
  static const int zzxx = 0xA;
  static const int zzxy = 0x4A;
  static const int zzxz = 0x8A;
  static const int zzxw = 0xCA;
  static const int zzyx = 0x1A;
  static const int zzyy = 0x5A;
  static const int zzyz = 0x9A;
  static const int zzyw = 0xDA;
  static const int zzzx = 0x2A;
  static const int zzzy = 0x6A;
  static const int zzzz = 0xAA;
  static const int zzzw = 0xEA;
  static const int zzwx = 0x3A;
  static const int zzwy = 0x7A;
  static const int zzwz = 0xBA;
  static const int zzww = 0xFA;
  static const int zwxx = 0xE;
  static const int zwxy = 0x4E;
  static const int zwxz = 0x8E;
  static const int zwxw = 0xCE;
  static const int zwyx = 0x1E;
  static const int zwyy = 0x5E;
  static const int zwyz = 0x9E;
  static const int zwyw = 0xDE;
  static const int zwzx = 0x2E;
  static const int zwzy = 0x6E;
  static const int zwzz = 0xAE;
  static const int zwzw = 0xEE;
  static const int zwwx = 0x3E;
  static const int zwwy = 0x7E;
  static const int zwwz = 0xBE;
  static const int zwww = 0xFE;
  static const int wxxx = 0x3;
  static const int wxxy = 0x43;
  static const int wxxz = 0x83;
  static const int wxxw = 0xC3;
  static const int wxyx = 0x13;
  static const int wxyy = 0x53;
  static const int wxyz = 0x93;
  static const int wxyw = 0xD3;
  static const int wxzx = 0x23;
  static const int wxzy = 0x63;
  static const int wxzz = 0xA3;
  static const int wxzw = 0xE3;
  static const int wxwx = 0x33;
  static const int wxwy = 0x73;
  static const int wxwz = 0xB3;
  static const int wxww = 0xF3;
  static const int wyxx = 0x7;
  static const int wyxy = 0x47;
  static const int wyxz = 0x87;
  static const int wyxw = 0xC7;
  static const int wyyx = 0x17;
  static const int wyyy = 0x57;
  static const int wyyz = 0x97;
  static const int wyyw = 0xD7;
  static const int wyzx = 0x27;
  static const int wyzy = 0x67;
  static const int wyzz = 0xA7;
  static const int wyzw = 0xE7;
  static const int wywx = 0x37;
  static const int wywy = 0x77;
  static const int wywz = 0xB7;
  static const int wyww = 0xF7;
  static const int wzxx = 0xB;
  static const int wzxy = 0x4B;
  static const int wzxz = 0x8B;
  static const int wzxw = 0xCB;
  static const int wzyx = 0x1B;
  static const int wzyy = 0x5B;
  static const int wzyz = 0x9B;
  static const int wzyw = 0xDB;
  static const int wzzx = 0x2B;
  static const int wzzy = 0x6B;
  static const int wzzz = 0xAB;
  static const int wzzw = 0xEB;
  static const int wzwx = 0x3B;
  static const int wzwy = 0x7B;
  static const int wzwz = 0xBB;
  static const int wzww = 0xFB;
  static const int wwxx = 0xF;
  static const int wwxy = 0x4F;
  static const int wwxz = 0x8F;
  static const int wwxw = 0xCF;
  static const int wwyx = 0x1F;
  static const int wwyy = 0x5F;
  static const int wwyz = 0x9F;
  static const int wwyw = 0xDF;
  static const int wwzx = 0x2F;
  static const int wwzy = 0x6F;
  static const int wwzz = 0xAF;
  static const int wwzw = 0xEF;
  static const int wwwx = 0x3F;
  static const int wwwy = 0x7F;
  static const int wwwz = 0xBF;
  static const int wwww = 0xFF;
  @Deprecated("Use xxxx instead")
  static const int XXXX = xxxx;
  @Deprecated("Use xxxy instead")
  static const int XXXY = xxxy;
  @Deprecated("Use xxxz instead")
  static const int XXXZ = xxxz;
  @Deprecated("Use xxxw instead")
  static const int XXXW = xxxw;
  @Deprecated("Use xxyx instead")
  static const int XXYX = xxyx;
  @Deprecated("Use xxyy instead")
  static const int XXYY = xxyy;
  @Deprecated("Use xxyz instead")
  static const int XXYZ = xxyz;
  @Deprecated("Use xxyw instead")
  static const int XXYW = xxyw;
  @Deprecated("Use xxzx instead")
  static const int XXZX = xxzx;
  @Deprecated("Use xxzy instead")
  static const int XXZY = xxzy;
  @Deprecated("Use xxzz instead")
  static const int XXZZ = xxzz;
  @Deprecated("Use xxzw instead")
  static const int XXZW = xxzw;
  @Deprecated("Use xxwx instead")
  static const int XXWX = xxwx;
  @Deprecated("Use xxwy instead")
  static const int XXWY = xxwy;
  @Deprecated("Use xxwz instead")
  static const int XXWZ = xxwz;
  @Deprecated("Use xxww instead")
  static const int XXWW = xxww;
  @Deprecated("Use xyxx instead")
  static const int XYXX = xyxx;
  @Deprecated("Use xyxy instead")
  static const int XYXY = xyxy;
  @Deprecated("Use xyxz instead")
  static const int XYXZ = xyxz;
  @Deprecated("Use xyxw instead")
  static const int XYXW = xyxw;
  @Deprecated("Use xyyx instead")
  static const int XYYX = xyyx;
  @Deprecated("Use xyyy instead")
  static const int XYYY = xyyy;
  @Deprecated("Use xyyz instead")
  static const int XYYZ = xyyz;
  @Deprecated("Use xyyw instead")
  static const int XYYW = xyyw;
  @Deprecated("Use xyzx instead")
  static const int XYZX = xyzx;
  @Deprecated("Use xyzy instead")
  static const int XYZY = xyzy;
  @Deprecated("Use xyzz instead")
  static const int XYZZ = xyzz;
  @Deprecated("Use xyzw instead")
  static const int XYZW = xyzw;
  @Deprecated("Use xywx instead")
  static const int XYWX = xywx;
  @Deprecated("Use xywy instead")
  static const int XYWY = xywy;
  @Deprecated("Use xywz instead")
  static const int XYWZ = xywz;
  @Deprecated("Use xyww instead")
  static const int XYWW = xyww;
  @Deprecated("Use xzxx instead")
  static const int XZXX = xzxx;
  @Deprecated("Use xzxy instead")
  static const int XZXY = xzxy;
  @Deprecated("Use xzxz instead")
  static const int XZXZ = xzxz;
  @Deprecated("Use xzxw instead")
  static const int XZXW = xzxw;
  @Deprecated("Use xzyx instead")
  static const int XZYX = xzyx;
  @Deprecated("Use xzyy instead")
  static const int XZYY = xzyy;
  @Deprecated("Use xzyz instead")
  static const int XZYZ = xzyz;
  @Deprecated("Use xzyw instead")
  static const int XZYW = xzyw;
  @Deprecated("Use xzzx instead")
  static const int XZZX = xzzx;
  @Deprecated("Use xzzy instead")
  static const int XZZY = xzzy;
  @Deprecated("Use xzzz instead")
  static const int XZZZ = xzzz;
  @Deprecated("Use xzzw instead")
  static const int XZZW = xzzw;
  @Deprecated("Use xzwx instead")
  static const int XZWX = xzwx;
  @Deprecated("Use xzwy instead")
  static const int XZWY = xzwy;
  @Deprecated("Use xzwz instead")
  static const int XZWZ = xzwz;
  @Deprecated("Use xzww instead")
  static const int XZWW = xzww;
  @Deprecated("Use xwxx instead")
  static const int XWXX = xwxx;
  @Deprecated("Use xwxy instead")
  static const int XWXY = xwxy;
  @Deprecated("Use xwxz instead")
  static const int XWXZ = xwxz;
  @Deprecated("Use xwxw instead")
  static const int XWXW = xwxw;
  @Deprecated("Use xwyx instead")
  static const int XWYX = xwyx;
  @Deprecated("Use xwyy instead")
  static const int XWYY = xwyy;
  @Deprecated("Use xwyz instead")
  static const int XWYZ = xwyz;
  @Deprecated("Use xwyw instead")
  static const int XWYW = xwyw;
  @Deprecated("Use xwzx instead")
  static const int XWZX = xwzx;
  @Deprecated("Use xwzy instead")
  static const int XWZY = xwzy;
  @Deprecated("Use xwzz instead")
  static const int XWZZ = xwzz;
  @Deprecated("Use xwzw instead")
  static const int XWZW = xwzw;
  @Deprecated("Use xwwx instead")
  static const int XWWX = xwwx;
  @Deprecated("Use xwwy instead")
  static const int XWWY = xwwy;
  @Deprecated("Use xwwz instead")
  static const int XWWZ = xwwz;
  @Deprecated("Use xwww instead")
  static const int XWWW = xwww;
  @Deprecated("Use yxxx instead")
  static const int YXXX = yxxx;
  @Deprecated("Use yxxy instead")
  static const int YXXY = yxxy;
  @Deprecated("Use yxxz instead")
  static const int YXXZ = yxxz;
  @Deprecated("Use yxxw instead")
  static const int YXXW = yxxw;
  @Deprecated("Use yxyx instead")
  static const int YXYX = yxyx;
  @Deprecated("Use yxyy instead")
  static const int YXYY = yxyy;
  @Deprecated("Use yxyz instead")
  static const int YXYZ = yxyz;
  @Deprecated("Use yxyw instead")
  static const int YXYW = yxyw;
  @Deprecated("Use yxzx instead")
  static const int YXZX = yxzx;
  @Deprecated("Use yxzy instead")
  static const int YXZY = yxzy;
  @Deprecated("Use yxzz instead")
  static const int YXZZ = yxzz;
  @Deprecated("Use yxzw instead")
  static const int YXZW = yxzw;
  @Deprecated("Use yxwx instead")
  static const int YXWX = yxwx;
  @Deprecated("Use yxwy instead")
  static const int YXWY = yxwy;
  @Deprecated("Use yxwz instead")
  static const int YXWZ = yxwz;
  @Deprecated("Use yxww instead")
  static const int YXWW = yxww;
  @Deprecated("Use yyxx instead")
  static const int YYXX = yyxx;
  @Deprecated("Use yyxy instead")
  static const int YYXY = yyxy;
  @Deprecated("Use yyxz instead")
  static const int YYXZ = yyxz;
  @Deprecated("Use yyxw instead")
  static const int YYXW = yyxw;
  @Deprecated("Use yyyx instead")
  static const int YYYX = yyyx;
  @Deprecated("Use yyyy instead")
  static const int YYYY = yyyy;
  @Deprecated("Use yyyz instead")
  static const int YYYZ = yyyz;
  @Deprecated("Use yyyw instead")
  static const int YYYW = yyyw;
  @Deprecated("Use yyzx instead")
  static const int YYZX = yyzx;
  @Deprecated("Use yyzy instead")
  static const int YYZY = yyzy;
  @Deprecated("Use yyzz instead")
  static const int YYZZ = yyzz;
  @Deprecated("Use yyzw instead")
  static const int YYZW = yyzw;
  @Deprecated("Use yywx instead")
  static const int YYWX = yywx;
  @Deprecated("Use yywy instead")
  static const int YYWY = yywy;
  @Deprecated("Use yywz instead")
  static const int YYWZ = yywz;
  @Deprecated("Use yyww instead")
  static const int YYWW = yyww;
  @Deprecated("Use yzxx instead")
  static const int YZXX = yzxx;
  @Deprecated("Use yzxy instead")
  static const int YZXY = yzxy;
  @Deprecated("Use yzxz instead")
  static const int YZXZ = yzxz;
  @Deprecated("Use yzxw instead")
  static const int YZXW = yzxw;
  @Deprecated("Use yzyx instead")
  static const int YZYX = yzyx;
  @Deprecated("Use yzyy instead")
  static const int YZYY = yzyy;
  @Deprecated("Use yzyz instead")
  static const int YZYZ = yzyz;
  @Deprecated("Use yzyw instead")
  static const int YZYW = yzyw;
  @Deprecated("Use yzzx instead")
  static const int YZZX = yzzx;
  @Deprecated("Use yzzy instead")
  static const int YZZY = yzzy;
  @Deprecated("Use yzzz instead")
  static const int YZZZ = yzzz;
  @Deprecated("Use yzzw instead")
  static const int YZZW = yzzw;
  @Deprecated("Use yzwx instead")
  static const int YZWX = yzwx;
  @Deprecated("Use yzwy instead")
  static const int YZWY = yzwy;
  @Deprecated("Use yzwz instead")
  static const int YZWZ = yzwz;
  @Deprecated("Use yzww instead")
  static const int YZWW = yzww;
  @Deprecated("Use ywxx instead")
  static const int YWXX = ywxx;
  @Deprecated("Use ywxy instead")
  static const int YWXY = ywxy;
  @Deprecated("Use ywxz instead")
  static const int YWXZ = ywxz;
  @Deprecated("Use ywxw instead")
  static const int YWXW = ywxw;
  @Deprecated("Use ywyx instead")
  static const int YWYX = ywyx;
  @Deprecated("Use ywyy instead")
  static const int YWYY = ywyy;
  @Deprecated("Use ywyz instead")
  static const int YWYZ = ywyz;
  @Deprecated("Use ywyw instead")
  static const int YWYW = ywyw;
  @Deprecated("Use ywzx instead")
  static const int YWZX = ywzx;
  @Deprecated("Use ywzy instead")
  static const int YWZY = ywzy;
  @Deprecated("Use ywzz instead")
  static const int YWZZ = ywzz;
  @Deprecated("Use ywzw instead")
  static const int YWZW = ywzw;
  @Deprecated("Use ywwx instead")
  static const int YWWX = ywwx;
  @Deprecated("Use ywwy instead")
  static const int YWWY = ywwy;
  @Deprecated("Use ywwz instead")
  static const int YWWZ = ywwz;
  @Deprecated("Use ywww instead")
  static const int YWWW = ywww;
  @Deprecated("Use zxxx instead")
  static const int ZXXX = zxxx;
  @Deprecated("Use zxxy instead")
  static const int ZXXY = zxxy;
  @Deprecated("Use zxxz instead")
  static const int ZXXZ = zxxz;
  @Deprecated("Use zxxw instead")
  static const int ZXXW = zxxw;
  @Deprecated("Use zxyx instead")
  static const int ZXYX = zxyx;
  @Deprecated("Use zxyy instead")
  static const int ZXYY = zxyy;
  @Deprecated("Use zxyz instead")
  static const int ZXYZ = zxyz;
  @Deprecated("Use zxyw instead")
  static const int ZXYW = zxyw;
  @Deprecated("Use zxzx instead")
  static const int ZXZX = zxzx;
  @Deprecated("Use zxzy instead")
  static const int ZXZY = zxzy;
  @Deprecated("Use zxzz instead")
  static const int ZXZZ = zxzz;
  @Deprecated("Use zxzw instead")
  static const int ZXZW = zxzw;
  @Deprecated("Use zxwx instead")
  static const int ZXWX = zxwx;
  @Deprecated("Use zxwy instead")
  static const int ZXWY = zxwy;
  @Deprecated("Use zxwz instead")
  static const int ZXWZ = zxwz;
  @Deprecated("Use zxww instead")
  static const int ZXWW = zxww;
  @Deprecated("Use zyxx instead")
  static const int ZYXX = zyxx;
  @Deprecated("Use zyxy instead")
  static const int ZYXY = zyxy;
  @Deprecated("Use zyxz instead")
  static const int ZYXZ = zyxz;
  @Deprecated("Use zyxw instead")
  static const int ZYXW = zyxw;
  @Deprecated("Use zyyx instead")
  static const int ZYYX = zyyx;
  @Deprecated("Use zyyy instead")
  static const int ZYYY = zyyy;
  @Deprecated("Use zyyz instead")
  static const int ZYYZ = zyyz;
  @Deprecated("Use zyyw instead")
  static const int ZYYW = zyyw;
  @Deprecated("Use zyzx instead")
  static const int ZYZX = zyzx;
  @Deprecated("Use zyzy instead")
  static const int ZYZY = zyzy;
  @Deprecated("Use zyzz instead")
  static const int ZYZZ = zyzz;
  @Deprecated("Use zyzw instead")
  static const int ZYZW = zyzw;
  @Deprecated("Use zywx instead")
  static const int ZYWX = zywx;
  @Deprecated("Use zywy instead")
  static const int ZYWY = zywy;
  @Deprecated("Use zywz instead")
  static const int ZYWZ = zywz;
  @Deprecated("Use zyww instead")
  static const int ZYWW = zyww;
  @Deprecated("Use zzxx instead")
  static const int ZZXX = zzxx;
  @Deprecated("Use zzxy instead")
  static const int ZZXY = zzxy;
  @Deprecated("Use zzxz instead")
  static const int ZZXZ = zzxz;
  @Deprecated("Use zzxw instead")
  static const int ZZXW = zzxw;
  @Deprecated("Use zzyx instead")
  static const int ZZYX = zzyx;
  @Deprecated("Use zzyy instead")
  static const int ZZYY = zzyy;
  @Deprecated("Use zzyz instead")
  static const int ZZYZ = zzyz;
  @Deprecated("Use zzyw instead")
  static const int ZZYW = zzyw;
  @Deprecated("Use zzzx instead")
  static const int ZZZX = zzzx;
  @Deprecated("Use zzzy instead")
  static const int ZZZY = zzzy;
  @Deprecated("Use zzzz instead")
  static const int ZZZZ = zzzz;
  @Deprecated("Use zzzw instead")
  static const int ZZZW = zzzw;
  @Deprecated("Use zzwx instead")
  static const int ZZWX = zzwx;
  @Deprecated("Use zzwy instead")
  static const int ZZWY = zzwy;
  @Deprecated("Use zzwz instead")
  static const int ZZWZ = zzwz;
  @Deprecated("Use zzww instead")
  static const int ZZWW = zzww;
  @Deprecated("Use zwxx instead")
  static const int ZWXX = zwxx;
  @Deprecated("Use zwxy instead")
  static const int ZWXY = zwxy;
  @Deprecated("Use zwxz instead")
  static const int ZWXZ = zwxz;
  @Deprecated("Use zwxw instead")
  static const int ZWXW = zwxw;
  @Deprecated("Use zwyx instead")
  static const int ZWYX = zwyx;
  @Deprecated("Use zwyy instead")
  static const int ZWYY = zwyy;
  @Deprecated("Use zwyz instead")
  static const int ZWYZ = zwyz;
  @Deprecated("Use zwyw instead")
  static const int ZWYW = zwyw;
  @Deprecated("Use zwzx instead")
  static const int ZWZX = zwzx;
  @Deprecated("Use zwzy instead")
  static const int ZWZY = zwzy;
  @Deprecated("Use zwzz instead")
  static const int ZWZZ = zwzz;
  @Deprecated("Use zwzw instead")
  static const int ZWZW = zwzw;
  @Deprecated("Use zwwx instead")
  static const int ZWWX = zwwx;
  @Deprecated("Use zwwy instead")
  static const int ZWWY = zwwy;
  @Deprecated("Use zwwz instead")
  static const int ZWWZ = zwwz;
  @Deprecated("Use zwww instead")
  static const int ZWWW = zwww;
  @Deprecated("Use wxxx instead")
  static const int WXXX = wxxx;
  @Deprecated("Use wxxy instead")
  static const int WXXY = wxxy;
  @Deprecated("Use wxxz instead")
  static const int WXXZ = wxxz;
  @Deprecated("Use wxxw instead")
  static const int WXXW = wxxw;
  @Deprecated("Use wxyx instead")
  static const int WXYX = wxyx;
  @Deprecated("Use wxyy instead")
  static const int WXYY = wxyy;
  @Deprecated("Use wxyz instead")
  static const int WXYZ = wxyz;
  @Deprecated("Use wxyw instead")
  static const int WXYW = wxyw;
  @Deprecated("Use wxzx instead")
  static const int WXZX = wxzx;
  @Deprecated("Use wxzy instead")
  static const int WXZY = wxzy;
  @Deprecated("Use wxzz instead")
  static const int WXZZ = wxzz;
  @Deprecated("Use wxzw instead")
  static const int WXZW = wxzw;
  @Deprecated("Use wxwx instead")
  static const int WXWX = wxwx;
  @Deprecated("Use wxwy instead")
  static const int WXWY = wxwy;
  @Deprecated("Use wxwz instead")
  static const int WXWZ = wxwz;
  @Deprecated("Use wxww instead")
  static const int WXWW = wxww;
  @Deprecated("Use wyxx instead")
  static const int WYXX = wyxx;
  @Deprecated("Use wyxy instead")
  static const int WYXY = wyxy;
  @Deprecated("Use wyxz instead")
  static const int WYXZ = wyxz;
  @Deprecated("Use wyxw instead")
  static const int WYXW = wyxw;
  @Deprecated("Use wyyx instead")
  static const int WYYX = wyyx;
  @Deprecated("Use wyyy instead")
  static const int WYYY = wyyy;
  @Deprecated("Use wyyz instead")
  static const int WYYZ = wyyz;
  @Deprecated("Use wyyw instead")
  static const int WYYW = wyyw;
  @Deprecated("Use wyzx instead")
  static const int WYZX = wyzx;
  @Deprecated("Use wyzy instead")
  static const int WYZY = wyzy;
  @Deprecated("Use wyzz instead")
  static const int WYZZ = wyzz;
  @Deprecated("Use wyzw instead")
  static const int WYZW = wyzw;
  @Deprecated("Use wywx instead")
  static const int WYWX = wywx;
  @Deprecated("Use wywy instead")
  static const int WYWY = wywy;
  @Deprecated("Use wywz instead")
  static const int WYWZ = wywz;
  @Deprecated("Use wyww instead")
  static const int WYWW = wyww;
  @Deprecated("Use wzxx instead")
  static const int WZXX = wzxx;
  @Deprecated("Use wzxy instead")
  static const int WZXY = wzxy;
  @Deprecated("Use wzxz instead")
  static const int WZXZ = wzxz;
  @Deprecated("Use wzxw instead")
  static const int WZXW = wzxw;
  @Deprecated("Use wzyx instead")
  static const int WZYX = wzyx;
  @Deprecated("Use wzyy instead")
  static const int WZYY = wzyy;
  @Deprecated("Use wzyz instead")
  static const int WZYZ = wzyz;
  @Deprecated("Use wzyw instead")
  static const int WZYW = wzyw;
  @Deprecated("Use wzzx instead")
  static const int WZZX = wzzx;
  @Deprecated("Use wzzy instead")
  static const int WZZY = wzzy;
  @Deprecated("Use wzzz instead")
  static const int WZZZ = wzzz;
  @Deprecated("Use wzzw instead")
  static const int WZZW = wzzw;
  @Deprecated("Use wzwx instead")
  static const int WZWX = wzwx;
  @Deprecated("Use wzwy instead")
  static const int WZWY = wzwy;
  @Deprecated("Use wzwz instead")
  static const int WZWZ = wzwz;
  @Deprecated("Use wzww instead")
  static const int WZWW = wzww;
  @Deprecated("Use wwxx instead")
  static const int WWXX = wwxx;
  @Deprecated("Use wwxy instead")
  static const int WWXY = wwxy;
  @Deprecated("Use wwxz instead")
  static const int WWXZ = wwxz;
  @Deprecated("Use wwxw instead")
  static const int WWXW = wwxw;
  @Deprecated("Use wwyx instead")
  static const int WWYX = wwyx;
  @Deprecated("Use wwyy instead")
  static const int WWYY = wwyy;
  @Deprecated("Use wwyz instead")
  static const int WWYZ = wwyz;
  @Deprecated("Use wwyw instead")
  static const int WWYW = wwyw;
  @Deprecated("Use wwzx instead")
  static const int WWZX = wwzx;
  @Deprecated("Use wwzy instead")
  static const int WWZY = wwzy;
  @Deprecated("Use wwzz instead")
  static const int WWZZ = wwzz;
  @Deprecated("Use wwzw instead")
  static const int WWZW = wwzw;
  @Deprecated("Use wwwx instead")
  static const int WWWX = wwwx;
  @Deprecated("Use wwwy instead")
  static const int WWWY = wwwy;
  @Deprecated("Use wwwz instead")
  static const int WWWZ = wwwz;
  @Deprecated("Use wwww instead")
  static const int WWWW = wwww;

  /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
  Float32x4 shuffle(int mask);

  /// Shuffle the lane values in [this] and [other]. The returned
  /// Float32x4 will have XY lanes from [this] and ZW lanes from [other].
  /// Uses the same [mask] as [shuffle].
  Float32x4 shuffleMix(Float32x4 other, int mask);

  /// Returns a new [Float32x4] copied from [this] with a new x value.
  Float32x4 withX(double x);

  /// Returns a new [Float32x4] copied from [this] with a new y value.
  Float32x4 withY(double y);

  /// Returns a new [Float32x4] copied from [this] with a new z value.
  Float32x4 withZ(double z);

  /// Returns a new [Float32x4] copied from [this] with a new w value.
  Float32x4 withW(double w);

  /// Returns the lane-wise minimum value in [this] or [other].
  Float32x4 min(Float32x4 other);

  /// Returns the lane-wise maximum value in [this] or [other].
  Float32x4 max(Float32x4 other);

  /// Returns the square root of [this].
  Float32x4 sqrt();

  /// Returns the reciprocal of [this].
  Float32x4 reciprocal();

  /// Returns the square root of the reciprocal of [this].
  Float32x4 reciprocalSqrt();
}

/**
 * Int32x4 and operations.
 *
 * Int32x4 stores 4 32-bit bit-masks in "lanes".
 * The lanes are "x", "y", "z", and "w" respectively.
 */
abstract class Int32x4 {
  external factory Int32x4(int x, int y, int z, int w);
  external factory Int32x4.bool(bool x, bool y, bool z, bool w);
  external factory Int32x4.fromFloat32x4Bits(Float32x4 x);

  /// The bit-wise or operator.
  Int32x4 operator |(Int32x4 other);

  /// The bit-wise and operator.
  Int32x4 operator &(Int32x4 other);

  /// The bit-wise xor operator.
  Int32x4 operator ^(Int32x4 other);

  /// Addition operator.
  Int32x4 operator +(Int32x4 other);

  /// Subtraction operator.
  Int32x4 operator -(Int32x4 other);

  /// Extract 32-bit mask from x lane.
  int get x;

  /// Extract 32-bit mask from y lane.
  int get y;

  /// Extract 32-bit mask from z lane.
  int get z;

  /// Extract 32-bit mask from w lane.
  int get w;

  /// Extract the top bit from each lane return them in the first 4 bits.
  /// "x" lane is bit 0.
  /// "y" lane is bit 1.
  /// "z" lane is bit 2.
  /// "w" lane is bit 3.
  int get signMask;

  /// Mask passed to [shuffle] or [shuffleMix].
  static const int xxxx = 0x0;
  static const int xxxy = 0x40;
  static const int xxxz = 0x80;
  static const int xxxw = 0xC0;
  static const int xxyx = 0x10;
  static const int xxyy = 0x50;
  static const int xxyz = 0x90;
  static const int xxyw = 0xD0;
  static const int xxzx = 0x20;
  static const int xxzy = 0x60;
  static const int xxzz = 0xA0;
  static const int xxzw = 0xE0;
  static const int xxwx = 0x30;
  static const int xxwy = 0x70;
  static const int xxwz = 0xB0;
  static const int xxww = 0xF0;
  static const int xyxx = 0x4;
  static const int xyxy = 0x44;
  static const int xyxz = 0x84;
  static const int xyxw = 0xC4;
  static const int xyyx = 0x14;
  static const int xyyy = 0x54;
  static const int xyyz = 0x94;
  static const int xyyw = 0xD4;
  static const int xyzx = 0x24;
  static const int xyzy = 0x64;
  static const int xyzz = 0xA4;
  static const int xyzw = 0xE4;
  static const int xywx = 0x34;
  static const int xywy = 0x74;
  static const int xywz = 0xB4;
  static const int xyww = 0xF4;
  static const int xzxx = 0x8;
  static const int xzxy = 0x48;
  static const int xzxz = 0x88;
  static const int xzxw = 0xC8;
  static const int xzyx = 0x18;
  static const int xzyy = 0x58;
  static const int xzyz = 0x98;
  static const int xzyw = 0xD8;
  static const int xzzx = 0x28;
  static const int xzzy = 0x68;
  static const int xzzz = 0xA8;
  static const int xzzw = 0xE8;
  static const int xzwx = 0x38;
  static const int xzwy = 0x78;
  static const int xzwz = 0xB8;
  static const int xzww = 0xF8;
  static const int xwxx = 0xC;
  static const int xwxy = 0x4C;
  static const int xwxz = 0x8C;
  static const int xwxw = 0xCC;
  static const int xwyx = 0x1C;
  static const int xwyy = 0x5C;
  static const int xwyz = 0x9C;
  static const int xwyw = 0xDC;
  static const int xwzx = 0x2C;
  static const int xwzy = 0x6C;
  static const int xwzz = 0xAC;
  static const int xwzw = 0xEC;
  static const int xwwx = 0x3C;
  static const int xwwy = 0x7C;
  static const int xwwz = 0xBC;
  static const int xwww = 0xFC;
  static const int yxxx = 0x1;
  static const int yxxy = 0x41;
  static const int yxxz = 0x81;
  static const int yxxw = 0xC1;
  static const int yxyx = 0x11;
  static const int yxyy = 0x51;
  static const int yxyz = 0x91;
  static const int yxyw = 0xD1;
  static const int yxzx = 0x21;
  static const int yxzy = 0x61;
  static const int yxzz = 0xA1;
  static const int yxzw = 0xE1;
  static const int yxwx = 0x31;
  static const int yxwy = 0x71;
  static const int yxwz = 0xB1;
  static const int yxww = 0xF1;
  static const int yyxx = 0x5;
  static const int yyxy = 0x45;
  static const int yyxz = 0x85;
  static const int yyxw = 0xC5;
  static const int yyyx = 0x15;
  static const int yyyy = 0x55;
  static const int yyyz = 0x95;
  static const int yyyw = 0xD5;
  static const int yyzx = 0x25;
  static const int yyzy = 0x65;
  static const int yyzz = 0xA5;
  static const int yyzw = 0xE5;
  static const int yywx = 0x35;
  static const int yywy = 0x75;
  static const int yywz = 0xB5;
  static const int yyww = 0xF5;
  static const int yzxx = 0x9;
  static const int yzxy = 0x49;
  static const int yzxz = 0x89;
  static const int yzxw = 0xC9;
  static const int yzyx = 0x19;
  static const int yzyy = 0x59;
  static const int yzyz = 0x99;
  static const int yzyw = 0xD9;
  static const int yzzx = 0x29;
  static const int yzzy = 0x69;
  static const int yzzz = 0xA9;
  static const int yzzw = 0xE9;
  static const int yzwx = 0x39;
  static const int yzwy = 0x79;
  static const int yzwz = 0xB9;
  static const int yzww = 0xF9;
  static const int ywxx = 0xD;
  static const int ywxy = 0x4D;
  static const int ywxz = 0x8D;
  static const int ywxw = 0xCD;
  static const int ywyx = 0x1D;
  static const int ywyy = 0x5D;
  static const int ywyz = 0x9D;
  static const int ywyw = 0xDD;
  static const int ywzx = 0x2D;
  static const int ywzy = 0x6D;
  static const int ywzz = 0xAD;
  static const int ywzw = 0xED;
  static const int ywwx = 0x3D;
  static const int ywwy = 0x7D;
  static const int ywwz = 0xBD;
  static const int ywww = 0xFD;
  static const int zxxx = 0x2;
  static const int zxxy = 0x42;
  static const int zxxz = 0x82;
  static const int zxxw = 0xC2;
  static const int zxyx = 0x12;
  static const int zxyy = 0x52;
  static const int zxyz = 0x92;
  static const int zxyw = 0xD2;
  static const int zxzx = 0x22;
  static const int zxzy = 0x62;
  static const int zxzz = 0xA2;
  static const int zxzw = 0xE2;
  static const int zxwx = 0x32;
  static const int zxwy = 0x72;
  static const int zxwz = 0xB2;
  static const int zxww = 0xF2;
  static const int zyxx = 0x6;
  static const int zyxy = 0x46;
  static const int zyxz = 0x86;
  static const int zyxw = 0xC6;
  static const int zyyx = 0x16;
  static const int zyyy = 0x56;
  static const int zyyz = 0x96;
  static const int zyyw = 0xD6;
  static const int zyzx = 0x26;
  static const int zyzy = 0x66;
  static const int zyzz = 0xA6;
  static const int zyzw = 0xE6;
  static const int zywx = 0x36;
  static const int zywy = 0x76;
  static const int zywz = 0xB6;
  static const int zyww = 0xF6;
  static const int zzxx = 0xA;
  static const int zzxy = 0x4A;
  static const int zzxz = 0x8A;
  static const int zzxw = 0xCA;
  static const int zzyx = 0x1A;
  static const int zzyy = 0x5A;
  static const int zzyz = 0x9A;
  static const int zzyw = 0xDA;
  static const int zzzx = 0x2A;
  static const int zzzy = 0x6A;
  static const int zzzz = 0xAA;
  static const int zzzw = 0xEA;
  static const int zzwx = 0x3A;
  static const int zzwy = 0x7A;
  static const int zzwz = 0xBA;
  static const int zzww = 0xFA;
  static const int zwxx = 0xE;
  static const int zwxy = 0x4E;
  static const int zwxz = 0x8E;
  static const int zwxw = 0xCE;
  static const int zwyx = 0x1E;
  static const int zwyy = 0x5E;
  static const int zwyz = 0x9E;
  static const int zwyw = 0xDE;
  static const int zwzx = 0x2E;
  static const int zwzy = 0x6E;
  static const int zwzz = 0xAE;
  static const int zwzw = 0xEE;
  static const int zwwx = 0x3E;
  static const int zwwy = 0x7E;
  static const int zwwz = 0xBE;
  static const int zwww = 0xFE;
  static const int wxxx = 0x3;
  static const int wxxy = 0x43;
  static const int wxxz = 0x83;
  static const int wxxw = 0xC3;
  static const int wxyx = 0x13;
  static const int wxyy = 0x53;
  static const int wxyz = 0x93;
  static const int wxyw = 0xD3;
  static const int wxzx = 0x23;
  static const int wxzy = 0x63;
  static const int wxzz = 0xA3;
  static const int wxzw = 0xE3;
  static const int wxwx = 0x33;
  static const int wxwy = 0x73;
  static const int wxwz = 0xB3;
  static const int wxww = 0xF3;
  static const int wyxx = 0x7;
  static const int wyxy = 0x47;
  static const int wyxz = 0x87;
  static const int wyxw = 0xC7;
  static const int wyyx = 0x17;
  static const int wyyy = 0x57;
  static const int wyyz = 0x97;
  static const int wyyw = 0xD7;
  static const int wyzx = 0x27;
  static const int wyzy = 0x67;
  static const int wyzz = 0xA7;
  static const int wyzw = 0xE7;
  static const int wywx = 0x37;
  static const int wywy = 0x77;
  static const int wywz = 0xB7;
  static const int wyww = 0xF7;
  static const int wzxx = 0xB;
  static const int wzxy = 0x4B;
  static const int wzxz = 0x8B;
  static const int wzxw = 0xCB;
  static const int wzyx = 0x1B;
  static const int wzyy = 0x5B;
  static const int wzyz = 0x9B;
  static const int wzyw = 0xDB;
  static const int wzzx = 0x2B;
  static const int wzzy = 0x6B;
  static const int wzzz = 0xAB;
  static const int wzzw = 0xEB;
  static const int wzwx = 0x3B;
  static const int wzwy = 0x7B;
  static const int wzwz = 0xBB;
  static const int wzww = 0xFB;
  static const int wwxx = 0xF;
  static const int wwxy = 0x4F;
  static const int wwxz = 0x8F;
  static const int wwxw = 0xCF;
  static const int wwyx = 0x1F;
  static const int wwyy = 0x5F;
  static const int wwyz = 0x9F;
  static const int wwyw = 0xDF;
  static const int wwzx = 0x2F;
  static const int wwzy = 0x6F;
  static const int wwzz = 0xAF;
  static const int wwzw = 0xEF;
  static const int wwwx = 0x3F;
  static const int wwwy = 0x7F;
  static const int wwwz = 0xBF;
  static const int wwww = 0xFF;
  @Deprecated("Use xxxx instead")
  static const int XXXX = xxxx;
  @Deprecated("Use xxxy instead")
  static const int XXXY = xxxy;
  @Deprecated("Use xxxz instead")
  static const int XXXZ = xxxz;
  @Deprecated("Use xxxw instead")
  static const int XXXW = xxxw;
  @Deprecated("Use xxyx instead")
  static const int XXYX = xxyx;
  @Deprecated("Use xxyy instead")
  static const int XXYY = xxyy;
  @Deprecated("Use xxyz instead")
  static const int XXYZ = xxyz;
  @Deprecated("Use xxyw instead")
  static const int XXYW = xxyw;
  @Deprecated("Use xxzx instead")
  static const int XXZX = xxzx;
  @Deprecated("Use xxzy instead")
  static const int XXZY = xxzy;
  @Deprecated("Use xxzz instead")
  static const int XXZZ = xxzz;
  @Deprecated("Use xxzw instead")
  static const int XXZW = xxzw;
  @Deprecated("Use xxwx instead")
  static const int XXWX = xxwx;
  @Deprecated("Use xxwy instead")
  static const int XXWY = xxwy;
  @Deprecated("Use xxwz instead")
  static const int XXWZ = xxwz;
  @Deprecated("Use xxww instead")
  static const int XXWW = xxww;
  @Deprecated("Use xyxx instead")
  static const int XYXX = xyxx;
  @Deprecated("Use xyxy instead")
  static const int XYXY = xyxy;
  @Deprecated("Use xyxz instead")
  static const int XYXZ = xyxz;
  @Deprecated("Use xyxw instead")
  static const int XYXW = xyxw;
  @Deprecated("Use xyyx instead")
  static const int XYYX = xyyx;
  @Deprecated("Use xyyy instead")
  static const int XYYY = xyyy;
  @Deprecated("Use xyyz instead")
  static const int XYYZ = xyyz;
  @Deprecated("Use xyyw instead")
  static const int XYYW = xyyw;
  @Deprecated("Use xyzx instead")
  static const int XYZX = xyzx;
  @Deprecated("Use xyzy instead")
  static const int XYZY = xyzy;
  @Deprecated("Use xyzz instead")
  static const int XYZZ = xyzz;
  @Deprecated("Use xyzw instead")
  static const int XYZW = xyzw;
  @Deprecated("Use xywx instead")
  static const int XYWX = xywx;
  @Deprecated("Use xywy instead")
  static const int XYWY = xywy;
  @Deprecated("Use xywz instead")
  static const int XYWZ = xywz;
  @Deprecated("Use xyww instead")
  static const int XYWW = xyww;
  @Deprecated("Use xzxx instead")
  static const int XZXX = xzxx;
  @Deprecated("Use xzxy instead")
  static const int XZXY = xzxy;
  @Deprecated("Use xzxz instead")
  static const int XZXZ = xzxz;
  @Deprecated("Use xzxw instead")
  static const int XZXW = xzxw;
  @Deprecated("Use xzyx instead")
  static const int XZYX = xzyx;
  @Deprecated("Use xzyy instead")
  static const int XZYY = xzyy;
  @Deprecated("Use xzyz instead")
  static const int XZYZ = xzyz;
  @Deprecated("Use xzyw instead")
  static const int XZYW = xzyw;
  @Deprecated("Use xzzx instead")
  static const int XZZX = xzzx;
  @Deprecated("Use xzzy instead")
  static const int XZZY = xzzy;
  @Deprecated("Use xzzz instead")
  static const int XZZZ = xzzz;
  @Deprecated("Use xzzw instead")
  static const int XZZW = xzzw;
  @Deprecated("Use xzwx instead")
  static const int XZWX = xzwx;
  @Deprecated("Use xzwy instead")
  static const int XZWY = xzwy;
  @Deprecated("Use xzwz instead")
  static const int XZWZ = xzwz;
  @Deprecated("Use xzww instead")
  static const int XZWW = xzww;
  @Deprecated("Use xwxx instead")
  static const int XWXX = xwxx;
  @Deprecated("Use xwxy instead")
  static const int XWXY = xwxy;
  @Deprecated("Use xwxz instead")
  static const int XWXZ = xwxz;
  @Deprecated("Use xwxw instead")
  static const int XWXW = xwxw;
  @Deprecated("Use xwyx instead")
  static const int XWYX = xwyx;
  @Deprecated("Use xwyy instead")
  static const int XWYY = xwyy;
  @Deprecated("Use xwyz instead")
  static const int XWYZ = xwyz;
  @Deprecated("Use xwyw instead")
  static const int XWYW = xwyw;
  @Deprecated("Use xwzx instead")
  static const int XWZX = xwzx;
  @Deprecated("Use xwzy instead")
  static const int XWZY = xwzy;
  @Deprecated("Use xwzz instead")
  static const int XWZZ = xwzz;
  @Deprecated("Use xwzw instead")
  static const int XWZW = xwzw;
  @Deprecated("Use xwwx instead")
  static const int XWWX = xwwx;
  @Deprecated("Use xwwy instead")
  static const int XWWY = xwwy;
  @Deprecated("Use xwwz instead")
  static const int XWWZ = xwwz;
  @Deprecated("Use xwww instead")
  static const int XWWW = xwww;
  @Deprecated("Use yxxx instead")
  static const int YXXX = yxxx;
  @Deprecated("Use yxxy instead")
  static const int YXXY = yxxy;
  @Deprecated("Use yxxz instead")
  static const int YXXZ = yxxz;
  @Deprecated("Use yxxw instead")
  static const int YXXW = yxxw;
  @Deprecated("Use yxyx instead")
  static const int YXYX = yxyx;
  @Deprecated("Use yxyy instead")
  static const int YXYY = yxyy;
  @Deprecated("Use yxyz instead")
  static const int YXYZ = yxyz;
  @Deprecated("Use yxyw instead")
  static const int YXYW = yxyw;
  @Deprecated("Use yxzx instead")
  static const int YXZX = yxzx;
  @Deprecated("Use yxzy instead")
  static const int YXZY = yxzy;
  @Deprecated("Use yxzz instead")
  static const int YXZZ = yxzz;
  @Deprecated("Use yxzw instead")
  static const int YXZW = yxzw;
  @Deprecated("Use yxwx instead")
  static const int YXWX = yxwx;
  @Deprecated("Use yxwy instead")
  static const int YXWY = yxwy;
  @Deprecated("Use yxwz instead")
  static const int YXWZ = yxwz;
  @Deprecated("Use yxww instead")
  static const int YXWW = yxww;
  @Deprecated("Use yyxx instead")
  static const int YYXX = yyxx;
  @Deprecated("Use yyxy instead")
  static const int YYXY = yyxy;
  @Deprecated("Use yyxz instead")
  static const int YYXZ = yyxz;
  @Deprecated("Use yyxw instead")
  static const int YYXW = yyxw;
  @Deprecated("Use yyyx instead")
  static const int YYYX = yyyx;
  @Deprecated("Use yyyy instead")
  static const int YYYY = yyyy;
  @Deprecated("Use yyyz instead")
  static const int YYYZ = yyyz;
  @Deprecated("Use yyyw instead")
  static const int YYYW = yyyw;
  @Deprecated("Use yyzx instead")
  static const int YYZX = yyzx;
  @Deprecated("Use yyzy instead")
  static const int YYZY = yyzy;
  @Deprecated("Use yyzz instead")
  static const int YYZZ = yyzz;
  @Deprecated("Use yyzw instead")
  static const int YYZW = yyzw;
  @Deprecated("Use yywx instead")
  static const int YYWX = yywx;
  @Deprecated("Use yywy instead")
  static const int YYWY = yywy;
  @Deprecated("Use yywz instead")
  static const int YYWZ = yywz;
  @Deprecated("Use yyww instead")
  static const int YYWW = yyww;
  @Deprecated("Use yzxx instead")
  static const int YZXX = yzxx;
  @Deprecated("Use yzxy instead")
  static const int YZXY = yzxy;
  @Deprecated("Use yzxz instead")
  static const int YZXZ = yzxz;
  @Deprecated("Use yzxw instead")
  static const int YZXW = yzxw;
  @Deprecated("Use yzyx instead")
  static const int YZYX = yzyx;
  @Deprecated("Use yzyy instead")
  static const int YZYY = yzyy;
  @Deprecated("Use yzyz instead")
  static const int YZYZ = yzyz;
  @Deprecated("Use yzyw instead")
  static const int YZYW = yzyw;
  @Deprecated("Use yzzx instead")
  static const int YZZX = yzzx;
  @Deprecated("Use yzzy instead")
  static const int YZZY = yzzy;
  @Deprecated("Use yzzz instead")
  static const int YZZZ = yzzz;
  @Deprecated("Use yzzw instead")
  static const int YZZW = yzzw;
  @Deprecated("Use yzwx instead")
  static const int YZWX = yzwx;
  @Deprecated("Use yzwy instead")
  static const int YZWY = yzwy;
  @Deprecated("Use yzwz instead")
  static const int YZWZ = yzwz;
  @Deprecated("Use yzww instead")
  static const int YZWW = yzww;
  @Deprecated("Use ywxx instead")
  static const int YWXX = ywxx;
  @Deprecated("Use ywxy instead")
  static const int YWXY = ywxy;
  @Deprecated("Use ywxz instead")
  static const int YWXZ = ywxz;
  @Deprecated("Use ywxw instead")
  static const int YWXW = ywxw;
  @Deprecated("Use ywyx instead")
  static const int YWYX = ywyx;
  @Deprecated("Use ywyy instead")
  static const int YWYY = ywyy;
  @Deprecated("Use ywyz instead")
  static const int YWYZ = ywyz;
  @Deprecated("Use ywyw instead")
  static const int YWYW = ywyw;
  @Deprecated("Use ywzx instead")
  static const int YWZX = ywzx;
  @Deprecated("Use ywzy instead")
  static const int YWZY = ywzy;
  @Deprecated("Use ywzz instead")
  static const int YWZZ = ywzz;
  @Deprecated("Use ywzw instead")
  static const int YWZW = ywzw;
  @Deprecated("Use ywwx instead")
  static const int YWWX = ywwx;
  @Deprecated("Use ywwy instead")
  static const int YWWY = ywwy;
  @Deprecated("Use ywwz instead")
  static const int YWWZ = ywwz;
  @Deprecated("Use ywww instead")
  static const int YWWW = ywww;
  @Deprecated("Use zxxx instead")
  static const int ZXXX = zxxx;
  @Deprecated("Use zxxy instead")
  static const int ZXXY = zxxy;
  @Deprecated("Use zxxz instead")
  static const int ZXXZ = zxxz;
  @Deprecated("Use zxxw instead")
  static const int ZXXW = zxxw;
  @Deprecated("Use zxyx instead")
  static const int ZXYX = zxyx;
  @Deprecated("Use zxyy instead")
  static const int ZXYY = zxyy;
  @Deprecated("Use zxyz instead")
  static const int ZXYZ = zxyz;
  @Deprecated("Use zxyw instead")
  static const int ZXYW = zxyw;
  @Deprecated("Use zxzx instead")
  static const int ZXZX = zxzx;
  @Deprecated("Use zxzy instead")
  static const int ZXZY = zxzy;
  @Deprecated("Use zxzz instead")
  static const int ZXZZ = zxzz;
  @Deprecated("Use zxzw instead")
  static const int ZXZW = zxzw;
  @Deprecated("Use zxwx instead")
  static const int ZXWX = zxwx;
  @Deprecated("Use zxwy instead")
  static const int ZXWY = zxwy;
  @Deprecated("Use zxwz instead")
  static const int ZXWZ = zxwz;
  @Deprecated("Use zxww instead")
  static const int ZXWW = zxww;
  @Deprecated("Use zyxx instead")
  static const int ZYXX = zyxx;
  @Deprecated("Use zyxy instead")
  static const int ZYXY = zyxy;
  @Deprecated("Use zyxz instead")
  static const int ZYXZ = zyxz;
  @Deprecated("Use zyxw instead")
  static const int ZYXW = zyxw;
  @Deprecated("Use zyyx instead")
  static const int ZYYX = zyyx;
  @Deprecated("Use zyyy instead")
  static const int ZYYY = zyyy;
  @Deprecated("Use zyyz instead")
  static const int ZYYZ = zyyz;
  @Deprecated("Use zyyw instead")
  static const int ZYYW = zyyw;
  @Deprecated("Use zyzx instead")
  static const int ZYZX = zyzx;
  @Deprecated("Use zyzy instead")
  static const int ZYZY = zyzy;
  @Deprecated("Use zyzz instead")
  static const int ZYZZ = zyzz;
  @Deprecated("Use zyzw instead")
  static const int ZYZW = zyzw;
  @Deprecated("Use zywx instead")
  static const int ZYWX = zywx;
  @Deprecated("Use zywy instead")
  static const int ZYWY = zywy;
  @Deprecated("Use zywz instead")
  static const int ZYWZ = zywz;
  @Deprecated("Use zyww instead")
  static const int ZYWW = zyww;
  @Deprecated("Use zzxx instead")
  static const int ZZXX = zzxx;
  @Deprecated("Use zzxy instead")
  static const int ZZXY = zzxy;
  @Deprecated("Use zzxz instead")
  static const int ZZXZ = zzxz;
  @Deprecated("Use zzxw instead")
  static const int ZZXW = zzxw;
  @Deprecated("Use zzyx instead")
  static const int ZZYX = zzyx;
  @Deprecated("Use zzyy instead")
  static const int ZZYY = zzyy;
  @Deprecated("Use zzyz instead")
  static const int ZZYZ = zzyz;
  @Deprecated("Use zzyw instead")
  static const int ZZYW = zzyw;
  @Deprecated("Use zzzx instead")
  static const int ZZZX = zzzx;
  @Deprecated("Use zzzy instead")
  static const int ZZZY = zzzy;
  @Deprecated("Use zzzz instead")
  static const int ZZZZ = zzzz;
  @Deprecated("Use zzzw instead")
  static const int ZZZW = zzzw;
  @Deprecated("Use zzwx instead")
  static const int ZZWX = zzwx;
  @Deprecated("Use zzwy instead")
  static const int ZZWY = zzwy;
  @Deprecated("Use zzwz instead")
  static const int ZZWZ = zzwz;
  @Deprecated("Use zzww instead")
  static const int ZZWW = zzww;
  @Deprecated("Use zwxx instead")
  static const int ZWXX = zwxx;
  @Deprecated("Use zwxy instead")
  static const int ZWXY = zwxy;
  @Deprecated("Use zwxz instead")
  static const int ZWXZ = zwxz;
  @Deprecated("Use zwxw instead")
  static const int ZWXW = zwxw;
  @Deprecated("Use zwyx instead")
  static const int ZWYX = zwyx;
  @Deprecated("Use zwyy instead")
  static const int ZWYY = zwyy;
  @Deprecated("Use zwyz instead")
  static const int ZWYZ = zwyz;
  @Deprecated("Use zwyw instead")
  static const int ZWYW = zwyw;
  @Deprecated("Use zwzx instead")
  static const int ZWZX = zwzx;
  @Deprecated("Use zwzy instead")
  static const int ZWZY = zwzy;
  @Deprecated("Use zwzz instead")
  static const int ZWZZ = zwzz;
  @Deprecated("Use zwzw instead")
  static const int ZWZW = zwzw;
  @Deprecated("Use zwwx instead")
  static const int ZWWX = zwwx;
  @Deprecated("Use zwwy instead")
  static const int ZWWY = zwwy;
  @Deprecated("Use zwwz instead")
  static const int ZWWZ = zwwz;
  @Deprecated("Use zwww instead")
  static const int ZWWW = zwww;
  @Deprecated("Use wxxx instead")
  static const int WXXX = wxxx;
  @Deprecated("Use wxxy instead")
  static const int WXXY = wxxy;
  @Deprecated("Use wxxz instead")
  static const int WXXZ = wxxz;
  @Deprecated("Use wxxw instead")
  static const int WXXW = wxxw;
  @Deprecated("Use wxyx instead")
  static const int WXYX = wxyx;
  @Deprecated("Use wxyy instead")
  static const int WXYY = wxyy;
  @Deprecated("Use wxyz instead")
  static const int WXYZ = wxyz;
  @Deprecated("Use wxyw instead")
  static const int WXYW = wxyw;
  @Deprecated("Use wxzx instead")
  static const int WXZX = wxzx;
  @Deprecated("Use wxzy instead")
  static const int WXZY = wxzy;
  @Deprecated("Use wxzz instead")
  static const int WXZZ = wxzz;
  @Deprecated("Use wxzw instead")
  static const int WXZW = wxzw;
  @Deprecated("Use wxwx instead")
  static const int WXWX = wxwx;
  @Deprecated("Use wxwy instead")
  static const int WXWY = wxwy;
  @Deprecated("Use wxwz instead")
  static const int WXWZ = wxwz;
  @Deprecated("Use wxww instead")
  static const int WXWW = wxww;
  @Deprecated("Use wyxx instead")
  static const int WYXX = wyxx;
  @Deprecated("Use wyxy instead")
  static const int WYXY = wyxy;
  @Deprecated("Use wyxz instead")
  static const int WYXZ = wyxz;
  @Deprecated("Use wyxw instead")
  static const int WYXW = wyxw;
  @Deprecated("Use wyyx instead")
  static const int WYYX = wyyx;
  @Deprecated("Use wyyy instead")
  static const int WYYY = wyyy;
  @Deprecated("Use wyyz instead")
  static const int WYYZ = wyyz;
  @Deprecated("Use wyyw instead")
  static const int WYYW = wyyw;
  @Deprecated("Use wyzx instead")
  static const int WYZX = wyzx;
  @Deprecated("Use wyzy instead")
  static const int WYZY = wyzy;
  @Deprecated("Use wyzz instead")
  static const int WYZZ = wyzz;
  @Deprecated("Use wyzw instead")
  static const int WYZW = wyzw;
  @Deprecated("Use wywx instead")
  static const int WYWX = wywx;
  @Deprecated("Use wywy instead")
  static const int WYWY = wywy;
  @Deprecated("Use wywz instead")
  static const int WYWZ = wywz;
  @Deprecated("Use wyww instead")
  static const int WYWW = wyww;
  @Deprecated("Use wzxx instead")
  static const int WZXX = wzxx;
  @Deprecated("Use wzxy instead")
  static const int WZXY = wzxy;
  @Deprecated("Use wzxz instead")
  static const int WZXZ = wzxz;
  @Deprecated("Use wzxw instead")
  static const int WZXW = wzxw;
  @Deprecated("Use wzyx instead")
  static const int WZYX = wzyx;
  @Deprecated("Use wzyy instead")
  static const int WZYY = wzyy;
  @Deprecated("Use wzyz instead")
  static const int WZYZ = wzyz;
  @Deprecated("Use wzyw instead")
  static const int WZYW = wzyw;
  @Deprecated("Use wzzx instead")
  static const int WZZX = wzzx;
  @Deprecated("Use wzzy instead")
  static const int WZZY = wzzy;
  @Deprecated("Use wzzz instead")
  static const int WZZZ = wzzz;
  @Deprecated("Use wzzw instead")
  static const int WZZW = wzzw;
  @Deprecated("Use wzwx instead")
  static const int WZWX = wzwx;
  @Deprecated("Use wzwy instead")
  static const int WZWY = wzwy;
  @Deprecated("Use wzwz instead")
  static const int WZWZ = wzwz;
  @Deprecated("Use wzww instead")
  static const int WZWW = wzww;
  @Deprecated("Use wwxx instead")
  static const int WWXX = wwxx;
  @Deprecated("Use wwxy instead")
  static const int WWXY = wwxy;
  @Deprecated("Use wwxz instead")
  static const int WWXZ = wwxz;
  @Deprecated("Use wwxw instead")
  static const int WWXW = wwxw;
  @Deprecated("Use wwyx instead")
  static const int WWYX = wwyx;
  @Deprecated("Use wwyy instead")
  static const int WWYY = wwyy;
  @Deprecated("Use wwyz instead")
  static const int WWYZ = wwyz;
  @Deprecated("Use wwyw instead")
  static const int WWYW = wwyw;
  @Deprecated("Use wwzx instead")
  static const int WWZX = wwzx;
  @Deprecated("Use wwzy instead")
  static const int WWZY = wwzy;
  @Deprecated("Use wwzz instead")
  static const int WWZZ = wwzz;
  @Deprecated("Use wwzw instead")
  static const int WWZW = wwzw;
  @Deprecated("Use wwwx instead")
  static const int WWWX = wwwx;
  @Deprecated("Use wwwy instead")
  static const int WWWY = wwwy;
  @Deprecated("Use wwwz instead")
  static const int WWWZ = wwwz;
  @Deprecated("Use wwww instead")
  static const int WWWW = wwww;

  /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
  Int32x4 shuffle(int mask);

  /// Shuffle the lane values in [this] and [other]. The returned
  /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
  /// Uses the same [mask] as [shuffle].
  Int32x4 shuffleMix(Int32x4 other, int mask);

  /// Returns a new [Int32x4] copied from [this] with a new x value.
  Int32x4 withX(int x);

  /// Returns a new [Int32x4] copied from [this] with a new y value.
  Int32x4 withY(int y);

  /// Returns a new [Int32x4] copied from [this] with a new z value.
  Int32x4 withZ(int z);

  /// Returns a new [Int32x4] copied from [this] with a new w value.
  Int32x4 withW(int w);

  /// Extracted x value. Returns false for 0, true for any other value.
  bool get flagX;

  /// Extracted y value. Returns false for 0, true for any other value.
  bool get flagY;

  /// Extracted z value. Returns false for 0, true for any other value.
  bool get flagZ;

  /// Extracted w value. Returns false for 0, true for any other value.
  bool get flagW;

  /// Returns a new [Int32x4] copied from [this] with a new x value.
  Int32x4 withFlagX(bool x);

  /// Returns a new [Int32x4] copied from [this] with a new y value.
  Int32x4 withFlagY(bool y);

  /// Returns a new [Int32x4] copied from [this] with a new z value.
  Int32x4 withFlagZ(bool z);

  /// Returns a new [Int32x4] copied from [this] with a new w value.
  Int32x4 withFlagW(bool w);

  /// Merge [trueValue] and [falseValue] based on [this]' bit mask:
  /// Select bit from [trueValue] when bit in [this] is on.
  /// Select bit from [falseValue] when bit in [this] is off.
  Float32x4 select(Float32x4 trueValue, Float32x4 falseValue);
}

/**
 * Float64x2 immutable value type and operations.
 *
 * Float64x2 stores 2 64-bit floating point values in "lanes".
 * The lanes are "x" and "y" respectively.
 */
abstract class Float64x2 {
  external factory Float64x2(double x, double y);
  external factory Float64x2.splat(double v);
  external factory Float64x2.zero();

  /// Uses the "x" and "y" lanes from [v].
  external factory Float64x2.fromFloat32x4(Float32x4 v);

  /// Addition operator.
  Float64x2 operator +(Float64x2 other);

  /// Negate operator.
  Float64x2 operator -();

  /// Subtraction operator.
  Float64x2 operator -(Float64x2 other);

  /// Multiplication operator.
  Float64x2 operator *(Float64x2 other);

  /// Division operator.
  Float64x2 operator /(Float64x2 other);

  /// Returns a copy of [this] each lane being scaled by [s].
  /// Equivalent to this * new Float64x2.splat(s)
  Float64x2 scale(double s);

  /// Returns the lane-wise absolute value of this [Float64x2].
  Float64x2 abs();

  /// Lane-wise clamp [this] to be in the range [lowerLimit]-[upperLimit].
  Float64x2 clamp(Float64x2 lowerLimit, Float64x2 upperLimit);

  /// Extracted x value.
  double get x;

  /// Extracted y value.
  double get y;

  /// Extract the sign bits from each lane return them in the first 2 bits.
  /// "x" lane is bit 0.
  /// "y" lane is bit 1.
  int get signMask;

  /// Returns a new [Float64x2] copied from [this] with a new x value.
  Float64x2 withX(double x);

  /// Returns a new [Float64x2] copied from [this] with a new y value.
  Float64x2 withY(double y);

  /// Returns the lane-wise minimum value in [this] or [other].
  Float64x2 min(Float64x2 other);

  /// Returns the lane-wise maximum value in [this] or [other].
  Float64x2 max(Float64x2 other);

  /// Returns the lane-wise square root of [this].
  Float64x2 sqrt();
}
