import vector import mem fun string(in:char*):string { var out:string = in return out } obj string (Object) { var data: vector::vector; fun construct(): string* { data.construct(); return this; } fun construct(str: char*): string* { data.construct(); while(*str) { data.addEnd(*str); str += 1; } // no null terminator return this; } fun construct(vec: vector::vector): string* { data.copy_construct(&vec); return this; } fun copy_construct(old: string*): void { data.copy_construct(&old->data) } fun copy_construct(old: char**): void { construct(*old) } fun destruct():void { data.destruct() } fun operator[](index: int): char { return data[index]; } fun slice(first: int, second: int): string { var new.construct(data.slice(first,second)): string return new } fun length():int { return data.size; } fun operator=(str: char*): void { destruct(); construct(str) } fun operator+(str: char*): string { var newStr.construct(str):string var ret.construct(data + newStr.data):string return ret } fun operator+=(str: char*): void { var newStr.construct(str):string data += newStr.data } fun toCharArray(): char* { var out: char* = mem::new(data.size+1); for (var i: int = 0; i < data.size; i++;) out[i] = data.get(i); // null terminator out[data.size] = 0 return out; } };