@@ -0,0 +1,3351 @@
+package com.conveyal.r5.trove;%0A%0Aimport java.util.*;%0A%0A/**%0A * This List implementation wraps another existing List, and only allows extending it and retrieving values.%0A */%0Apublic class AugmentedList%3CT%3E implements List%3CT%3E %7B%0A%0A    List%3CT%3E base;%0A%0A    List%3CT%3E extension;%0A%0A    public AugmentedList(List%3CT%3E base) %7B%0A        this.base = base;%0A        this.extension = new ArrayList%3C%3E();%0A    %7D%0A%0A    @Override%0A    public T get (int index) %7B%0A        if (index %3C base.size()) %7B%0A            return base.get(index);%0A        %7D else %7B%0A            return extension.get(index - base.size());%0A        %7D%0A    %7D%0A%0A    @Override%0A    public T set (int index, T value) %7B%0A        if (index %3C base.size()) %7B%0A            throw new RuntimeException(%22Modifying the base graph is not allowed.%22);%0A        %7D else %7B%0A            return extension.set(index - base.size(), value);%0A        %7D%0A    %7D%0A%0A    @Override%0A    public int size() %7B%0A        return base.size() + extension.size();%0A    %7D%0A%0A    /* Nominally implement the List interface. All these methods will remain unimplemented until we need them. */%0A%0A    @Override%0A    public void add(int index, T element) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public T remove(int index) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public int indexOf(Object o) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public int lastIndexOf(Object o) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public ListIterator%3CT%3E listIterator() %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public ListIterator%3CT%3E listIterator(int index) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public List%3CT%3E subList(int fromIndex, int toIndex) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean isEmpty() %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean contains(Object o) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public Iterator%3CT%3E iterator() %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public Object%5B%5D toArray() %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public %3CT1%3E T1%5B%5D toArray(T1%5B%5D a) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean add(T t) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean remove(Object o) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean containsAll(Collection%3C?%3E c) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean addAll(Collection%3C? extends T%3E c) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean addAll(int index, Collection%3C? extends T%3E c) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean removeAll(Collection%3C?%3E c) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public boolean retainAll(Collection%3C?%3E c) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    @Override%0A    public void clear() %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A%0A%7D%0A

Make an augmented list type for List<Object>