/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.internal; import java.util.AbstractList; import java.util.Iterator; import java.util.List; /** * */ public final class CompoundList<E> extends AbstractList<E> { private final List<? extends E> firstList; private final List<? extends E> secondList; public CompoundList(List<? extends E> firstList, List<? extends E> secondList) { this.firstList = firstList; this.secondList = secondList; } @Override public E get(int index) { final int firstListSize = firstList.size(); if (index < firstListSize) { return firstList.get(index); } return secondList.get(index - firstListSize); } @Override public int size() { int size = firstList.size() + secondList.size(); if (size < 0) { // overflow return Integer.MAX_VALUE; } return size; } @Override public Iterator<E> iterator() { return new CompoundIterator<>(firstList.iterator(), secondList.iterator()); } }