package st.gravel.support.jvm; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; import st.gravel.support.compiler.ast.ClassDiff; import st.gravel.support.compiler.jvm.BlockInnerClass; public class OrderedCollectionExtensions { public static final Factory factory = new Factory(); public static class Factory extends SmalltalkFactory { public Object basicNew() { return new ArrayList(); } } public static Object r_class(Object receiver) { return factory; } public static ArrayList new_(Object receiver, int size) { return new ArrayList(size); } public static ArrayList withSize_(Object receiver, int size) { ArrayList arrayList = new ArrayList(size); for (int i = 0; i < size; i++) { arrayList.add(null); } return arrayList; } public static Object removeIndex_(ArrayList receiver, int index) { return receiver.remove(index - 1); } public static Object at_(ArrayList receiver, int index) { return receiver.get(index - 1); } public static Object at_put_(ArrayList receiver, int index, Object value) { receiver.set(index - 1, value); return value; } public static Object insert_before_(ArrayList receiver, Object element, int index) { receiver.add(index - 1, element); return element; } public static <R, E> List<R> collect_(List<E> receiver, Block1<R, E> aBlock) { ArrayList<R> result = new ArrayList<R>(); for (E element : receiver) { result.add(aBlock.value_(element)); } return result; } public static <R, E> R[] collectAsArray_(ArrayList<E> receiver, Block1<R, E> aBlock) { R[] result = (R[]) Array.newInstance(aBlock.getResultClass(), receiver.size()); int size = receiver.size(); for (int i = 0; i < size; i++) { result[i] = aBlock.value_(receiver.get(i)); } return result; } public static <E> List<E> copyWithAll_(List<E> receiver, List<E> other) { ArrayList<E> arrayList = new ArrayList<>(receiver); arrayList.addAll(other); return arrayList; } public static boolean equals_(List receiver, List other) { throw new UnsupportedOperationException("Not Implemented Yet"); } public static Object do_(ArrayList receiver, Object aBlock) { Block1 bl = (Block1) aBlock; for (Object element : receiver) { bl.value_(element); } return receiver; } public static <E> boolean anySatisfy_(List<E> receiver, Predicate1<E> predicate) { for (E element : receiver) { if (predicate.value_(element)) return true; } return false; } public static <E> List<E> addAll_(List<E> receiver, E[] elements) { for (E elem : elements) { receiver.add(elem); } return receiver; } public static <E> E detect_ifNone_(List<E> receiver, Predicate1<E> predicate1, Block0<E> ifNoneBlock) { for (E elem : receiver) { if (predicate1.value_(elem)) return elem; } return ifNoneBlock.value(); } public static int[] toIntArray(List<Integer> receiver) { int[] result = new int[receiver.size()]; for (int i = 0; i < receiver.size(); i++) { result[i] = receiver.get(i); } return result; } public static <E> List<E> select_(List<E> receiver, Predicate1<E> predicate1) { ArrayList<E> result = new ArrayList<E>(); for (E element : receiver) { if (predicate1.value_(element)) result.add(element); } return result; } }