faster deserilitation, super basic enums
This commit is contained in:
@@ -139,12 +139,19 @@ obj grammer (Object, Serializable) {
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
// get everything constructed before the assignment
|
||||
construct()
|
||||
util::unpack(rules, pos) = serialize::unserialize<vector::vector<rule>>(it, pos)
|
||||
util::unpack(non_terminals, pos) = serialize::unserialize<set::set<symbol::symbol>>(it, pos)
|
||||
util::unpack(terminals, pos) = serialize::unserialize<vector::vector<util::pair<symbol::symbol, regex::regex>>>(it, pos)
|
||||
util::unpack(first_set_map, pos) = serialize::unserialize<map::map<symbol::symbol, set::set<symbol::symbol>>>(it, pos)
|
||||
util::unpack(parse_table, pos) = serialize::unserialize<table>(it, pos)
|
||||
/*construct()*/
|
||||
/*util::unpack(rules, pos) = serialize::unserialize<vector::vector<rule>>(it, pos)*/
|
||||
/*util::unpack(non_terminals, pos) = serialize::unserialize<set::set<symbol::symbol>>(it, pos)*/
|
||||
/*util::unpack(terminals, pos) = serialize::unserialize<vector::vector<util::pair<symbol::symbol, regex::regex>>>(it, pos)*/
|
||||
/*util::unpack(first_set_map, pos) = serialize::unserialize<map::map<symbol::symbol, set::set<symbol::symbol>>>(it, pos)*/
|
||||
/*util::unpack(parse_table, pos) = serialize::unserialize<table>(it, pos)*/
|
||||
|
||||
// do it in place. Actually looks nicer too
|
||||
pos = rules.unserialize(it, pos)
|
||||
pos = non_terminals.unserialize(it, pos)
|
||||
pos = terminals.unserialize(it, pos)
|
||||
pos = first_set_map.unserialize(it, pos)
|
||||
pos = parse_table.unserialize(it, pos)
|
||||
return pos
|
||||
}
|
||||
|
||||
@@ -346,18 +353,22 @@ obj rule (Object, Serializable) {
|
||||
return serialize::serialize(lhs) + serialize::serialize(rhs) + serialize::serialize(position) + serialize::serialize(lookahead)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
var tempLhs = symbol::invalid_symbol()
|
||||
var tempRhs = vector::vector<symbol::symbol>()
|
||||
var tempLookahead = set::set<symbol::symbol>()
|
||||
util::unpack(tempLhs, pos) = serialize::unserialize<symbol::symbol>(it, pos)
|
||||
util::unpack(tempRhs, pos) = serialize::unserialize<vector::vector<symbol::symbol>>(it, pos)
|
||||
util::unpack(position, pos) = serialize::unserialize<int>(it, pos)
|
||||
util::unpack(tempLookahead, pos) = serialize::unserialize<set::set<symbol::symbol>>(it, pos)
|
||||
/*var tempLhs = symbol::invalid_symbol()*/
|
||||
/*var tempRhs = vector::vector<symbol::symbol>()*/
|
||||
/*var tempLookahead = set::set<symbol::symbol>()*/
|
||||
/*util::unpack(tempLhs, pos) = serialize::unserialize<symbol::symbol>(it, pos)*/
|
||||
/*util::unpack(tempRhs, pos) = serialize::unserialize<vector::vector<symbol::symbol>>(it, pos)*/
|
||||
/*util::unpack(position, pos) = serialize::unserialize<int>(it, pos)*/
|
||||
/*util::unpack(tempLookahead, pos) = serialize::unserialize<set::set<symbol::symbol>>(it, pos)*/
|
||||
|
||||
lhs.copy_construct(&tempLhs)
|
||||
rhs.copy_construct(&tempRhs)
|
||||
lookahead.copy_construct(&tempLookahead)
|
||||
return pos
|
||||
/*lhs.copy_construct(&tempLhs)*/
|
||||
/*rhs.copy_construct(&tempRhs)*/
|
||||
/*lookahead.copy_construct(&tempLookahead)*/
|
||||
|
||||
pos = lhs.unserialize(it, pos)
|
||||
pos = rhs.unserialize(it, pos)
|
||||
util::unpack(position, pos) = serialize::unserialize<int>(it, pos)
|
||||
return lookahead.unserialize(it, pos)
|
||||
}
|
||||
|
||||
fun construct(): *rule {
|
||||
@@ -534,9 +545,9 @@ obj table (Object, Serializable) {
|
||||
return serialize::serialize(items)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
var temp = vector::vector<map::map<symbol::symbol, vector::vector<action>>>()
|
||||
util::unpack(temp, pos) = serialize::unserialize<vector::vector<map::map<symbol::symbol, vector::vector<action>>>>(it, pos)
|
||||
items.copy_construct(&temp)
|
||||
/*construct()*/
|
||||
/*util::unpack(items, pos) = serialize::unserialize<vector::vector<map::map<symbol::symbol, vector::vector<action>>>>(it, pos)*/
|
||||
pos = items.unserialize(it, pos)
|
||||
return pos
|
||||
}
|
||||
fun expand_to(include_state: int) {
|
||||
|
||||
@@ -38,12 +38,11 @@ obj map<T,U> (Object, Serializable) {
|
||||
return serialize::serialize(keys) + serialize::serialize(values)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
var tempKeys = vector::vector<T>()
|
||||
var tempValues = vector::vector<U>()
|
||||
util::unpack(tempKeys, pos) = serialize::unserialize<vector::vector<T>>(it, pos)
|
||||
util::unpack(tempValues, pos) = serialize::unserialize<vector::vector<U>>(it, pos)
|
||||
keys.copy_construct(&tempKeys)
|
||||
values.copy_construct(&tempValues)
|
||||
/*construct()*/
|
||||
/*util::unpack(keys, pos) = serialize::unserialize<vector::vector<T>>(it, pos)*/
|
||||
/*util::unpack(values, pos) = serialize::unserialize<vector::vector<U>>(it, pos)*/
|
||||
pos = keys.unserialize(it, pos)
|
||||
pos = values.unserialize(it, pos)
|
||||
return pos
|
||||
}
|
||||
fun operator[]=(key: T, value: U) {
|
||||
|
||||
@@ -37,10 +37,9 @@ obj set<T> (Object, Serializable) {
|
||||
return serialize::serialize(data)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
var temp = vector::vector<T>()
|
||||
util::unpack(temp, pos) = serialize::unserialize<vector::vector<T>>(it, pos)
|
||||
data.copy_construct(&temp)
|
||||
return pos
|
||||
/*construct()*/
|
||||
/*util::unpack(data, pos) = serialize::unserialize<vector::vector<T>>(it, pos)*/
|
||||
return data.unserialize(it, pos)
|
||||
}
|
||||
fun operator==(rhs: set<T>): bool {
|
||||
if (size() != rhs.size())
|
||||
|
||||
@@ -32,10 +32,9 @@ obj stack<T> (Object, Serializable) {
|
||||
return serialize::serialize(data)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
var temp = vector::vector<T>()
|
||||
util::unpack(temp, pos) = serialize::unserialize<vector::vector<T>>(it, pos)
|
||||
data.copy_construct(&temp)
|
||||
return pos
|
||||
/*construct()*/
|
||||
/*util::unpack(data, pos) = serialize::unserialize<vector::vector<T>>(it, pos)*/
|
||||
return data.unserialize(it, pos)
|
||||
}
|
||||
fun push(it: ref T) {
|
||||
data.addEnd(it)
|
||||
|
||||
@@ -77,9 +77,9 @@ obj string (Object, Serializable) {
|
||||
return serialize::serialize(data)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
construct()
|
||||
util::unpack(data, pos) = serialize::unserialize<vector::vector<char>>(it, pos)
|
||||
return pos
|
||||
/*construct()*/
|
||||
/*util::unpack(data, pos) = serialize::unserialize<vector::vector<char>>(it, pos)*/
|
||||
return data.unserialize(it, pos)
|
||||
}
|
||||
|
||||
fun operator[](index: int): ref char { return data[index]; }
|
||||
|
||||
@@ -69,13 +69,12 @@ obj symbol (Object, Serializable) {
|
||||
return serialize::serialize(data) + serialize::serialize(name) + serialize::serialize(terminal)
|
||||
}
|
||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||
var tempData = string::string()
|
||||
var tempName = string::string()
|
||||
util::unpack(tempData, pos) = serialize::unserialize<string::string>(it, pos)
|
||||
util::unpack(tempName, pos) = serialize::unserialize<string::string>(it, pos)
|
||||
/*construct()*/
|
||||
/*util::unpack(data, pos) = serialize::unserialize<string::string>(it, pos)*/
|
||||
/*util::unpack(name, pos) = serialize::unserialize<string::string>(it, pos)*/
|
||||
pos = data.unserialize(it, pos)
|
||||
pos = name.unserialize(it, pos)
|
||||
util::unpack(terminal, pos) = serialize::unserialize<bool>(it, pos)
|
||||
data.copy_construct(&tempData)
|
||||
name.copy_construct(&tempName)
|
||||
return pos
|
||||
}
|
||||
fun operator==(other: ref symbol): bool {
|
||||
|
||||
@@ -40,7 +40,7 @@ obj pair<T,U> (Object, Serializable) {
|
||||
var first: T
|
||||
var second: U
|
||||
|
||||
fun construct(firstIn: T, secondIn: U): *pair<T,U> {
|
||||
fun construct(firstIn: ref T, secondIn: ref U): *pair<T,U> {
|
||||
mem::maybe_copy_construct(&first, &firstIn)
|
||||
mem::maybe_copy_construct(&second, &secondIn)
|
||||
return this
|
||||
|
||||
Reference in New Issue
Block a user