import io:*; import mem:*; import vector:*; import vector_literals:* obj AbleToBeDestroyed (Object) { var data:int // needed to put it in the vector becuase serilization uses pairs, which defines an empty constructor fun construct(): *AbleToBeDestroyed return this; fun construct(dat:int): *AbleToBeDestroyed { data = dat print("Constructed: ") println(data) return this } 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(); for (var i: int = 0; i < intVec.size; i++;) print(intVec[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.for_each(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(); vector(1,2,3,4,5,6,7,8,9,10,11,12).for_each(fun(i:int) { print(i); }) println() // with references println("with references") vector(1,2,3,4,5,6,7,8,9,10,11,12).for_each(fun(i: ref int) { print(i); }) println() var desVec: *vector = new>()->construct(); var testDestruct.construct(0): AbleToBeDestroyed; desVec->addEnd(testDestruct); println("delete vector") delete(desVec); var newOne = vector("hayyy") println(newOne[0]) var noParam = vector() noParam.add(4.7) println(noParam[0]) var assignTest = vector("first") println(assignTest[0]) var toAssign = vector("first") toAssign.add("second") assignTest = toAssign println(assignTest[0]) println(assignTest[1]) var sliceTest = vector(1) sliceTest.add(2) sliceTest.add(3) sliceTest.add(4) print("full: ") sliceTest.for_each(fun(it:int):void print(it);) println() print("middle: ") sliceTest.slice(1,-2).for_each(fun(it:int):void print(it);) println() print("all but first: ") sliceTest.slice(1,-1).for_each(fun(it:int):void print(it);) println() print("all but last: ") sliceTest.slice(0,-2).for_each(fun(it:int):void print(it);) println() print("just some: ") sliceTest.slice(1,2).for_each(fun(it:int):void print(it);) println() println("find test") var multipleFindTest = vector(1,2,3) println(multipleFindTest.find(1)) println(multipleFindTest.find(2)) println(multipleFindTest.find(3)) println("contains test") println(multipleFindTest.contains(0)) println(multipleFindTest.contains(1)) println(multipleFindTest.contains(2)) println(multipleFindTest.contains(3)) println(multipleFindTest.contains(4)) println("add_unique test") multipleFindTest.add_unique(1) multipleFindTest.add_unique(4) multipleFindTest.add_unique(4) multipleFindTest.for_each( fun(i:int) { print(" "); print(i); } ) println() println("set, []=, and delete test") var setTest = vector(4,5,6) setTest.add(7) setTest.set(1,8) setTest[2] = 9 setTest.for_each(fun(it: int) println(it);) println("delete") setTest.remove(2) setTest.for_each(fun(it: int) println(it);) println("delete v2") var firstRem.construct(100): AbleToBeDestroyed; var secondRem.construct(200): AbleToBeDestroyed; var thirdRem.construct(300): AbleToBeDestroyed; var remTest = vector(firstRem, secondRem, thirdRem); remTest.remove(1) println("done") return 0; }