public class TestClass { private G[] _buffer = new G[30]; private int _count = 0; public void add(owned G item) { _buffer[_count++] = (owned) item; } public G @get(int index) { return _buffer[index]; } public G[] to_array() { return _buffer[0:_count]; } public G[] to_array_alt() { G[] temp = new G[_count]; for (int ii = 0; ii < _count; ii++) temp[ii] = _buffer[ii]; return temp; } } private void print_array0(int[] array) { stdout.printf("\tOriginal:\t"); foreach (int i in array) stdout.printf("%d ", i); stdout.printf("\n"); } private void print_array1(int[] array) { stdout.printf("\tNot Boxed:\t"); foreach (int i in array) stdout.printf("%d ", i); stdout.printf("\n"); } private void print_array2(int?[] array) { stdout.printf("\tBoxed:\t\t"); foreach (int? i in array) stdout.printf("%d ", (!)i); stdout.printf("\n"); } public int main(string[] args) { int[] original = {1, 4, 8, 2}; TestClass not_boxed = new TestClass(); TestClass boxed = new TestClass(); foreach (int i in original) { not_boxed.add(i); boxed.add(i); } print_array0(original); stdout.printf("\n"); stdout.printf("Array Slice\n"); print_array1(not_boxed.to_array()); print_array2(boxed.to_array()); stdout.printf("\n"); stdout.printf("For-loop Copy\n"); print_array1(not_boxed.to_array_alt()); print_array2(boxed.to_array_alt()); return 0; }