2015-06-14 11:13:30 -04:00
|
|
|
import mem
|
2014-06-30 01:57:50 -07:00
|
|
|
|
2015-05-09 06:24:56 -04:00
|
|
|
fun greater<T>(a: T, b: T): T {
|
2014-06-30 01:57:50 -07:00
|
|
|
if (a > b)
|
|
|
|
|
return a;
|
|
|
|
|
return b;
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-09 06:24:56 -04:00
|
|
|
fun lesser<T>(a: T, b: T): T {
|
2014-06-30 01:57:50 -07:00
|
|
|
if (a > b)
|
|
|
|
|
return b;
|
|
|
|
|
return a;
|
|
|
|
|
}
|
2015-06-14 11:13:30 -04:00
|
|
|
|
|
|
|
|
fun make_pair<T,U>(first: T, second: U): pair<T,U> {
|
|
|
|
|
var it.construct(first, second): pair<T,U>
|
|
|
|
|
return it
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-30 02:40:46 -04:00
|
|
|
obj pair<T,U> (Object) {
|
2015-06-14 11:13:30 -04:00
|
|
|
var first: T
|
|
|
|
|
var second: U
|
|
|
|
|
|
2015-07-04 17:02:51 -04:00
|
|
|
fun construct(firstIn: T, secondIn: U): *pair<T,U> {
|
2015-06-14 11:13:30 -04:00
|
|
|
mem::maybe_copy_construct(&first, &firstIn)
|
|
|
|
|
mem::maybe_copy_construct(&second, &secondIn)
|
|
|
|
|
return this
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-04 17:02:51 -04:00
|
|
|
fun construct(): *pair<T,U> {
|
2015-06-14 11:13:30 -04:00
|
|
|
mem::maybe_construct(&first)
|
|
|
|
|
mem::maybe_construct(&second)
|
|
|
|
|
return this
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-04 17:02:51 -04:00
|
|
|
fun copy_construct(old: *pair<T,U>):void {
|
2015-06-14 11:13:30 -04:00
|
|
|
mem::maybe_copy_construct(&first, &old->first)
|
|
|
|
|
mem::maybe_copy_construct(&second, &old->second)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun destruct():void {
|
|
|
|
|
mem::maybe_destruct(&first)
|
|
|
|
|
mem::maybe_destruct(&second)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-28 20:25:27 -04:00
|
|
|
fun range(end:int): range {
|
|
|
|
|
var toRet.construct(0, end, 1): range
|
|
|
|
|
return toRet
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun range(begin: int, end:int): range {
|
|
|
|
|
var toRet.construct(begin, end, 1): range
|
|
|
|
|
return toRet
|
|
|
|
|
}
|
|
|
|
|
fun range(begin: int, end:int, step: int): range {
|
|
|
|
|
var toRet.construct(begin, end, step): range
|
|
|
|
|
return toRet
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj range {
|
|
|
|
|
var begin: int
|
|
|
|
|
var end: int
|
|
|
|
|
var step: int
|
2015-07-04 17:02:51 -04:00
|
|
|
fun construct(beginIn: int, endIn: int, stepIn: int) : *range {
|
2015-06-28 20:25:27 -04:00
|
|
|
begin = beginIn
|
|
|
|
|
end = endIn
|
|
|
|
|
step = stepIn
|
|
|
|
|
}
|
|
|
|
|
fun for_each(func: fun(int):void):void {
|
|
|
|
|
for (var i = begin; i < end; i+= step;)
|
|
|
|
|
func(i)
|
|
|
|
|
}
|
|
|
|
|
fun any_true(func: fun(int):bool):bool {
|
|
|
|
|
for (var i = begin; i < end; i+= step;)
|
|
|
|
|
if (func(i))
|
|
|
|
|
return true
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|