62 lines
1.3 KiB
Plaintext
62 lines
1.3 KiB
Plaintext
import vector;
|
|
import mem;
|
|
|
|
obj string (Object) {
|
|
var data: vector::vector<char>;
|
|
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<char>): 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=(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<char>(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;
|
|
}
|
|
};
|
|
|