Serilization basics working

This commit is contained in:
Nathan Braswell
2015-08-24 20:40:18 -04:00
parent 3aad0263ce
commit b67d5e85fe
5 changed files with 91 additions and 5 deletions

View File

@@ -1,6 +1,11 @@
import vector
import conversions
import mem
import util
fun serialize<T(Serializable)>(it: T): vector::vector<char> {
return it.serialize()
}
fun serialize<T>(it: T): vector::vector<char> {
var char_data = conversions::cast_ptr<*T,*char>(&it)
@@ -10,8 +15,17 @@ fun serialize<T>(it: T): vector::vector<char> {
return toRet
}
fun unserialize<T>(it: vector::vector<char>):T {
return *conversions::cast_ptr<*char,*T>(it.getBackingMemory())
// dead simple wrapper for ease of use
fun unserialize<T>(it: vector::vector<char>): T {
return unserialize<T>(it, 0).first
}
fun unserialize<T>(it: vector::vector<char>, pos: int): util::pair<T,int> {
return util::make_pair(*conversions::cast_ptr<*char,*T>(it.getBackingMemory()+pos), pos + mem::sizeof<T>())
}
fun unserialize<T(Serializable)>(it: vector::vector<char>, pos: int): util::pair<T,int> {
var toRet: T
pos = toRet.unserialize(it, pos)
return util::make_pair(toRet, pos)
}