namespace Invercargill { public abstract class Collection : Enumerable { public abstract void add(T item); public abstract void remove_first_where(PredicateDelegate predicate); public abstract void remove_where(PredicateDelegate predicate); public virtual void add_all(Enumerable items) { items.iterate(i => add(i)); } } public abstract class IndexedCollection : Collection { public new abstract T @get(int index) throws IndexError; public new abstract void @set(int index, T item) throws IndexError; public abstract void remove(int index) throws IndexError; public abstract int index_of(PredicateDelegate predicate); } }