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