Files
kraken/stdlib/vector.krak
2015-05-16 12:05:23 -04:00

72 lines
1.6 KiB
Plaintext

import mem:*;
import util:*;
import io:*;
obj vector<T> (Destructable) {
var data: T*;
var size: int;
var available: int;
fun construct(): vector<T>* {
size = 0;
available = 8;
data = new<T>(8);
return this;
}
fun construct(newSize: int): vector<T>*{
size = newSize;
available = newSize;
data = new<T>(newSize);
return this;
}
fun destruct(): void {
delete<T>(data);
}
fun resize(newSize: int): bool {
var newData: T* = new<T>(newSize);
if (!newData)
return false;
for (var i: int = 0; i < lesser<int>(size, newSize); i++;)
newData[i] = data[i];
delete<T>(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);
print("Max Index of vector: ");
println(size-1);
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;
}
};