This commit is contained in:
Nathan Braswell
2016-01-11 23:41:22 -05:00

View File

@@ -128,4 +128,67 @@ fun safe_recursive_clone<T>(first: *T, cloningFunc: fun(*T, fun(*T):*T, fun(*T):
return rec_it(first) return rec_it(first)
} }
obj shared_ptr<T> (Object){
var data: *T;
var refCount: int;
fun construct(): *shared_ptr<T> {
data = 0;
refCount = 1;
return this;
}
fun construct(newPtr: *T): *shared_ptr<T> {
data = newPtr;
refCount = 1;
return this;
}
fun construct(newPtr: ref shared_ptr<T>): *shared_ptr<T> {
data = newPtr.data;
refCount = newPtr.refCount;
refCount++;
return this;
}
fun destruct(): void {
if(refCount == 1){
delete(data,1);
refCount--;
}
}
fun operator*(): ref T {
return *data;
}
fun operator->(): *T {
return data;
}
fun operator=(newPtr: ref shared_ptr<T>): ref shared_ptr<T> {
if(this != &newPtr){
if(refCount == 1){
delete(data,1);
refCount--;
}
//use copy constructor here???
data = newPtr.data;
refCount = newPtr.refCount;
refCount++;
}//end self-assignment check
return *this;
}
fun operator=(newPtr: ref *T): ref shared_ptr<T> {
data = newPtr;
refCount = 1;
delete(newPtr,1);
return *this;
}
}; //end shared_ptr class