2015-08-21 11:03:10 -04:00
|
|
|
import vector
|
|
|
|
|
import mem
|
2015-08-24 20:40:18 -04:00
|
|
|
import util
|
|
|
|
|
|
|
|
|
|
fun serialize<T(Serializable)>(it: T): vector::vector<char> {
|
|
|
|
|
return it.serialize()
|
|
|
|
|
}
|
2015-08-21 11:03:10 -04:00
|
|
|
|
|
|
|
|
fun serialize<T>(it: T): vector::vector<char> {
|
2016-04-19 06:04:22 -04:00
|
|
|
var char_data = (&it) cast *char
|
2015-08-21 11:03:10 -04:00
|
|
|
var toRet = vector::vector<char>()
|
2016-04-28 19:22:23 -04:00
|
|
|
for (var i = 0; i < #sizeof<T>; i++;)
|
2015-08-21 11:03:10 -04:00
|
|
|
toRet.add(char_data[i])
|
|
|
|
|
return toRet
|
|
|
|
|
}
|
|
|
|
|
|
2015-08-24 20:40:18 -04:00
|
|
|
// dead simple wrapper for ease of use
|
2015-08-26 03:45:34 -04:00
|
|
|
fun unserialize<T>(it: ref vector::vector<char>): T {
|
2015-08-24 20:40:18 -04:00
|
|
|
return unserialize<T>(it, 0).first
|
|
|
|
|
}
|
2015-08-26 03:45:34 -04:00
|
|
|
fun unserialize<T>(it: ref vector::vector<char>, pos: int): util::pair<T,int> {
|
2016-04-28 19:22:23 -04:00
|
|
|
return util::make_pair(*(it.getBackingMemory()+pos) cast *T, pos + #sizeof<T>)
|
2015-08-24 20:40:18 -04:00
|
|
|
}
|
2015-08-26 03:45:34 -04:00
|
|
|
fun unserialize<T(Serializable)>(it: ref vector::vector<char>, pos: int): util::pair<T,int> {
|
2015-08-24 20:40:18 -04:00
|
|
|
var toRet: T
|
|
|
|
|
pos = toRet.unserialize(it, pos)
|
|
|
|
|
return util::make_pair(toRet, pos)
|
2015-08-21 11:03:10 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|