13a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata/* 23a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * Copyright (C) 2017 The Android Open Source Project 33a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * 43a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * Licensed under the Apache License, Version 2.0 (the "License"); 53a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * you may not use this file except in compliance with the License. 63a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * You may obtain a copy of the License at 73a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * 83a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * http://www.apache.org/licenses/LICENSE-2.0 93a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * 103a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * Unless required by applicable law or agreed to in writing, software 113a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * distributed under the License is distributed on an "AS IS" BASIS, 123a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * See the License for the specific language governing permissions and 143a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata * limitations under the License. 153a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata */ 163a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 173a3850c37c5548373650f4b78e916da86d1a5266Enrico Granatapackage com.android.car.vehiclehal; 183a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 193a3850c37c5548373650f4b78e916da86d1a5266Enrico Granataimport android.util.SparseArray; 203a3850c37c5548373650f4b78e916da86d1a5266Enrico Granataimport java.util.Iterator; 213a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 223a3850c37c5548373650f4b78e916da86d1a5266Enrico Granataclass Utils { 233a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata private Utils() {} 243a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 253a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata static class SparseArrayIterator<T> 260f088b64c6c8e65bdfb91c87c837938eb41df91fColin Cross implements Iterable<SparseArrayIterator.SparseArrayEntry<T>>, 270f088b64c6c8e65bdfb91c87c837938eb41df91fColin Cross Iterator<SparseArrayIterator.SparseArrayEntry<T>> { 283a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata static class SparseArrayEntry<U> { 293a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata public final int key; 303a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata public final U value; 313a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 323a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata SparseArrayEntry(SparseArray<U> array, int index) { 333a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata key = array.keyAt(index); 343a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata value = array.valueAt(index); 353a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 363a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 373a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 383a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata private final SparseArray<T> mArray; 393a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata private int mIndex = 0; 403a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 413a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata SparseArrayIterator(SparseArray<T> array) { 423a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata mArray = array; 433a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 443a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 453a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata @Override 463a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata public Iterator<SparseArrayEntry<T>> iterator() { 473a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata return this; 483a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 493a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 503a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata @Override 513a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata public boolean hasNext() { 523a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata return mIndex < mArray.size(); 533a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 543a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata 553a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata @Override 563a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata public SparseArrayEntry<T> next() { 573a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata return new SparseArrayEntry<>(mArray, mIndex++); 583a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 593a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata } 603a3850c37c5548373650f4b78e916da86d1a5266Enrico Granata} 61