import io:*; import mem:*; import vector:*; obj AbleToBeDestroyed (Object) { var data:int fun construct(dat:int):void { data = dat print("Constructed: ") println(data) } fun copy_construct(other:AbleToBeDestroyed*):void { data = other->data+1 print("Copied: ") print(other->data) print(" to ") println(data) } fun operator=(other:AbleToBeDestroyed):void { print("Assigned: ") print(other.data) print(" to ") print(data) print(" is now ") data = other.data+1 println(data) } fun destruct(): void { print("Destroyed: ") println(data) } }; fun main(): int { var intVec.construct(): vector; intVec.addEnd(1); intVec.addEnd(3); intVec.addEnd(3); intVec.addEnd(7); println(intVec.size); for (var i: int = 0; i < intVec.size; i++;) print(intVec.at(i)); println(); // in place lambda map intVec.in_place(fun(it:int):int { return it*2; }) for (var i: int = 0; i < intVec.size; i++;) print(intVec.at(i)); println(); intVec.do(fun(it:int):void print(it+7);) println(); var subd = intVec.map(fun(it:int):int { return it-1; }) for (var i: int = 0; i < subd.size; i++;) print(subd.at(i)); println(); var newType = intVec.map(fun(it:int):double { return it+1.7; }) for (var i: int = 0; i < newType.size; i++;) print(newType.at(i)); println(); var desVec: vector* = new>()->construct(); var testDestruct.construct(0): AbleToBeDestroyed; desVec->addEnd(testDestruct); println("delete vector") delete(desVec); println("done") return 0; }