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

library dart._internal;

import 'dart:collection';

import 'dart:core' hide Symbol;
import 'dart:core' as core;
import 'dart:math' show Random;

part 'iterable.dart';
part 'list.dart';
part 'lists.dart';
part 'print.dart';
part 'sort.dart';
part 'symbol.dart';

// Powers of 10 up to 10^22 are representable as doubles.
// Powers of 10 above that are only approximate due to lack of precission.
// Used by double-parsing.
const POWERS_OF_TEN = const [
                        1.0,  /*  0 */
                       10.0,
                      100.0,
                     1000.0,
                    10000.0,
                   100000.0,  /*  5 */
                  1000000.0,
                 10000000.0,
                100000000.0,
               1000000000.0,
              10000000000.0,  /* 10 */
             100000000000.0,
            1000000000000.0,
           10000000000000.0,
          100000000000000.0,
         1000000000000000.0,  /*  15 */
        10000000000000000.0,
       100000000000000000.0,
      1000000000000000000.0,
     10000000000000000000.0,
    100000000000000000000.0,  /*  20 */
   1000000000000000000000.0,
  10000000000000000000000.0,
];

/**
 * An [Iterable] of the UTF-16 code units of a [String] in index order.
 */
class CodeUnits extends UnmodifiableListBase<int> {
  /** The string that this is the code units of. */
  final String _string;

  CodeUnits(this._string);

  int get length => _string.length;
  int operator[](int i) => _string.codeUnitAt(i);

  static String stringOf(CodeUnits u) => u._string;
}
