2015-06-09 20:02:02 -04:00
|
|
|
import vector
|
|
|
|
|
import mem
|
2015-03-11 01:58:10 -04:00
|
|
|
|
2015-06-08 21:47:02 -04:00
|
|
|
fun string(in:char*):string {
|
|
|
|
|
var out:string = in
|
|
|
|
|
return out
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-05 00:34:24 -04:00
|
|
|
obj string (Object) {
|
2015-05-09 06:24:56 -04:00
|
|
|
var data: vector::vector<char>;
|
|
|
|
|
fun construct(): string* {
|
2015-03-11 01:58:10 -04:00
|
|
|
data.construct();
|
|
|
|
|
return this;
|
|
|
|
|
}
|
2015-05-09 06:24:56 -04:00
|
|
|
fun construct(str: char*): string* {
|
2015-03-11 01:58:10 -04:00
|
|
|
data.construct();
|
|
|
|
|
while(*str) {
|
|
|
|
|
data.addEnd(*str);
|
|
|
|
|
str += 1;
|
|
|
|
|
}
|
2015-06-01 01:43:23 -04:00
|
|
|
// no null terminator
|
2015-03-11 01:58:10 -04:00
|
|
|
return this;
|
|
|
|
|
}
|
2015-06-01 01:43:23 -04:00
|
|
|
fun construct(vec: vector::vector<char>): string* {
|
|
|
|
|
data.copy_construct(&vec);
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun copy_construct(old: string*): void {
|
|
|
|
|
data.copy_construct(&old->data)
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-07 19:54:08 -04:00
|
|
|
fun copy_construct(old: char**): void {
|
|
|
|
|
construct(*old)
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-01 01:43:23 -04:00
|
|
|
fun destruct():void {
|
|
|
|
|
data.destruct()
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-08 21:47:02 -04:00
|
|
|
fun operator[](index: int): char { return data[index]; }
|
2015-06-14 18:13:52 -04:00
|
|
|
fun slice(first: int, second: int): string {
|
|
|
|
|
var new.construct(data.slice(first,second)): string
|
|
|
|
|
return new
|
|
|
|
|
}
|
2015-06-08 21:47:02 -04:00
|
|
|
fun length():int { return data.size; }
|
|
|
|
|
|
2015-06-01 01:43:23 -04:00
|
|
|
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
|
|
|
|
|
}
|
2015-03-11 01:58:10 -04:00
|
|
|
|
2015-05-09 06:24:56 -04:00
|
|
|
fun toCharArray(): char* {
|
2015-06-01 01:43:23 -04:00
|
|
|
var out: char* = mem::new<char>(data.size+1);
|
2015-05-09 06:24:56 -04:00
|
|
|
for (var i: int = 0; i < data.size; i++;)
|
2015-03-11 01:58:10 -04:00
|
|
|
out[i] = data.get(i);
|
2015-06-01 01:43:23 -04:00
|
|
|
// null terminator
|
|
|
|
|
out[data.size] = 0
|
2015-03-11 01:58:10 -04:00
|
|
|
return out;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|