|  | // Copyright (c) 2011, 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. | 
|  |  | 
|  | part of html_common; | 
|  |  | 
|  | class Lists { | 
|  | /** | 
|  | * Returns the index in the array [a] of the given [element], starting | 
|  | * the search at index [startIndex] to [endIndex] (exclusive). | 
|  | * Returns -1 if [element] is not found. | 
|  | */ | 
|  | static int indexOf(List a, Object element, int startIndex, int endIndex) { | 
|  | if (startIndex >= a.length) { | 
|  | return -1; | 
|  | } | 
|  | if (startIndex < 0) { | 
|  | startIndex = 0; | 
|  | } | 
|  | for (int i = startIndex; i < endIndex; i++) { | 
|  | if (a[i] == element) { | 
|  | return i; | 
|  | } | 
|  | } | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the last index in the array [a] of the given [element], starting | 
|  | * the search at index [startIndex] to 0. | 
|  | * Returns -1 if [element] is not found. | 
|  | */ | 
|  | static int lastIndexOf(List a, Object element, int startIndex) { | 
|  | if (startIndex < 0) { | 
|  | return -1; | 
|  | } | 
|  | if (startIndex >= a.length) { | 
|  | startIndex = a.length - 1; | 
|  | } | 
|  | for (int i = startIndex; i >= 0; i--) { | 
|  | if (a[i] == element) { | 
|  | return i; | 
|  | } | 
|  | } | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns a sub list copy of this list, from [start] to | 
|  | * [end] ([end] not inclusive). | 
|  | * Returns an empty list if [length] is 0. | 
|  | * It is an error if indices are not valid for the list, or | 
|  | * if [end] is before [start]. | 
|  | */ | 
|  | static List getRange(List a, int start, int end, List accumulator) { | 
|  | if (start < 0) throw new RangeError.value(start); | 
|  | if (end < start) throw new RangeError.value(end); | 
|  | if (end > a.length) throw new RangeError.value(end); | 
|  | for (int i = start; i < end; i++) { | 
|  | accumulator.add(a[i]); | 
|  | } | 
|  | return accumulator; | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * For accessing underlying node lists, for dart:js interop. | 
|  | */ | 
|  | abstract class NodeListWrapper { | 
|  | List<Node> get rawList; | 
|  | } |