unserialize grammer directly to avoid extra copying
This commit is contained in:
@@ -9,8 +9,10 @@ import tree:*
|
|||||||
import serialize:*
|
import serialize:*
|
||||||
|
|
||||||
fun main():int {
|
fun main():int {
|
||||||
|
|
||||||
var gram.construct(): grammer
|
/*var gram.construct(): grammer*/
|
||||||
|
// delay construction until we either load it or copy construct it
|
||||||
|
var gram: grammer
|
||||||
|
|
||||||
var file_name = string("../krakenGrammer.kgm")
|
var file_name = string("../krakenGrammer.kgm")
|
||||||
|
|
||||||
@@ -28,7 +30,9 @@ fun main():int {
|
|||||||
if (cached_contents == file_contents) {
|
if (cached_contents == file_contents) {
|
||||||
println("loaded_and_valid, using cached version!")
|
println("loaded_and_valid, using cached version!")
|
||||||
loaded_and_valid = true
|
loaded_and_valid = true
|
||||||
unpack(gram, pos) = unserialize<grammer>(binary, pos)
|
/*unpack(gram, pos) = unserialize<grammer>(binary, pos)*/
|
||||||
|
// skip unnecessary copies this way
|
||||||
|
pos = gram.unserialize(binary, pos)
|
||||||
println("finished unserializeing!!")
|
println("finished unserializeing!!")
|
||||||
} else {
|
} else {
|
||||||
println("file contents do not match:")
|
println("file contents do not match:")
|
||||||
@@ -43,7 +47,9 @@ fun main():int {
|
|||||||
}
|
}
|
||||||
if (!loaded_and_valid) {
|
if (!loaded_and_valid) {
|
||||||
println("Not loaded_and_valid, re-generating and writing out")
|
println("Not loaded_and_valid, re-generating and writing out")
|
||||||
gram = load_grammer(file_contents)
|
/*gram = load_grammer(file_contents)*/
|
||||||
|
// since we now don't construct before hand
|
||||||
|
gram.copy_construct(&load_grammer(file_contents))
|
||||||
println("grammer loaded, calculate_first_set")
|
println("grammer loaded, calculate_first_set")
|
||||||
gram.calculate_first_set()
|
gram.calculate_first_set()
|
||||||
println("grammer loaded, calculate_state_automaton")
|
println("grammer loaded, calculate_state_automaton")
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ import serialize:*
|
|||||||
|
|
||||||
fun main():int {
|
fun main():int {
|
||||||
|
|
||||||
var a.construct(): grammer
|
/*var a.construct(): grammer*/
|
||||||
|
// delay construction until unserialization or copy_construction now
|
||||||
|
var a: grammer
|
||||||
|
|
||||||
var file_name = string("../krakenGrammer.kgm")
|
var file_name = string("../krakenGrammer.kgm")
|
||||||
/*var file_name = string("../simplifiedKrakenGrammer.kgm")*/
|
/*var file_name = string("../simplifiedKrakenGrammer.kgm")*/
|
||||||
@@ -32,7 +34,9 @@ fun main():int {
|
|||||||
if (cached_contents == file_contents) {
|
if (cached_contents == file_contents) {
|
||||||
println("loaded_and_valid, using cached version!")
|
println("loaded_and_valid, using cached version!")
|
||||||
loaded_and_valid = true
|
loaded_and_valid = true
|
||||||
unpack(a, pos) = unserialize<grammer>(binary, pos)
|
/*unpack(a, pos) = unserialize<grammer>(binary, pos)*/
|
||||||
|
// avoid extra copies
|
||||||
|
pos = a.unserialize(binary, pos)
|
||||||
println("finished unserializeing!!")
|
println("finished unserializeing!!")
|
||||||
} else {
|
} else {
|
||||||
println("file contents do not match:")
|
println("file contents do not match:")
|
||||||
@@ -47,7 +51,9 @@ fun main():int {
|
|||||||
}
|
}
|
||||||
if (!loaded_and_valid) {
|
if (!loaded_and_valid) {
|
||||||
println("Not loaded_and_valid, re-generating and writing out")
|
println("Not loaded_and_valid, re-generating and writing out")
|
||||||
a = load_grammer(file_contents)
|
/*a = load_grammer(file_contents)*/
|
||||||
|
// copy construct now
|
||||||
|
a.copy_construct(&load_grammer(file_contents))
|
||||||
println("grammer loaded, calculate_first_set")
|
println("grammer loaded, calculate_first_set")
|
||||||
a.calculate_first_set()
|
a.calculate_first_set()
|
||||||
println("grammer loaded, calculate_state_automaton")
|
println("grammer loaded, calculate_state_automaton")
|
||||||
|
|||||||
Reference in New Issue
Block a user