import mem:*; import util:*; import io:*; typedef vector (Destructable) { var data: T*; var size: int; var available: int; fun construct(): vector* { size = 0; available = 8; data = new(8); return this; } fun destruct(): void { delete(data); } fun resize(newSize: int): bool { var newData: T* = new(newSize); if (!newData) return false; for (var i: int = 0; i < lesser(size, newSize); i++;) newData[i] = data[i]; delete(data, 0); data = newData; available = newSize; return true; } fun at(index: int): T { return get(index); } fun get(index: int): T { if (index < 0 || index >= size) { println("Vector access out of bounds! Retuning 0th element as sanest option"); print("Vector tried to access element: "); println(index); return data[0]; } return data[index]; } fun getBackingMemory(): T* { return data; } fun set(index: int, dataIn: T): void { if (index < 0 || index >= size) return; data[index] = dataIn; } fun addEnd(dataIn: T): void { size++; if (size >= available) resize(size*2); data[size-1] = dataIn; } };