sclass IntBuffer { int[] data; int size; *() {} *(int size) { if (size != 0) data = new int[size]; } void add(int i) { if (size >= lIntArray(data)) data = resizeIntArray(data, Math.max(1, lIntArray(data)*2)); data[size++] = i; } int[] toArray() { ret size == 0 ? null : resizeIntArray(data, size); } L toList() { ret intArrayToList(data, 0, size); } void reset { size = 0; } void clear { reset(); } int size() { ret size; } bool isEmpty() { ret size == 0; } int get(int idx) { if (idx >= size) fail("Index out of range: " + idx + "/" + size); ret data[idx]; } void set(int idx, int value) { if (idx >= size) fail("Index out of range: " + idx + "/" + size); data[idx] = value; } int popLast() { if (size == 0) fail("empty buffer"); ret data[--size]; } int last() { ret data[size-1]; } int nextToLast() { ret data[size-2]; } toString { ret squareBracket(joinWithSpace(toList())); } }