Files
kraken/stdlib/serialize.krak

31 lines
809 B
Plaintext
Raw Normal View History

2018-05-22 19:43:54 -04:00
import vec
2015-08-21 11:03:10 -04:00
import mem
2015-08-24 20:40:18 -04:00
import util
2018-05-22 19:43:54 -04:00
fun serialize<T(Serializable)>(it: T): vec::vec<char> {
2015-08-24 20:40:18 -04:00
return it.serialize()
}
2015-08-21 11:03:10 -04:00
2018-05-22 19:43:54 -04:00
fun serialize<T>(it: T): vec::vec<char> {
2016-04-19 06:04:22 -04:00
var char_data = (&it) cast *char
2018-05-22 19:43:54 -04:00
var toRet = vec::vec<char>()
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
2018-05-22 19:43:54 -04:00
fun unserialize<T>(it: ref vec::vec<char>): T {
2015-08-24 20:40:18 -04:00
return unserialize<T>(it, 0).first
}
2018-05-22 19:43:54 -04:00
fun unserialize<T>(it: ref vec::vec<char>, pos: int): util::pair<T,int> {
return util::make_pair(*(it.getBackingMemory()+pos) cast *T, pos + (#sizeof<T>) cast int)
2015-08-24 20:40:18 -04:00
}
2018-05-22 19:43:54 -04:00
fun unserialize<T(Serializable)>(it: ref vec::vec<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
}