map: remove temporary fields _keys, key_i

pull/1576/head
Nick Treleaven 2019-08-11 18:43:21 +01:00 committed by Alexander Medvednikov
parent 7957ec3186
commit ea30ba4555
1 changed files with 15 additions and 15 deletions

View File

@ -9,8 +9,6 @@ import strings
struct map { struct map {
element_size int element_size int
root *Node root *Node
_keys []string // used by `keys()` TODO remove this from map struct,
key_i int // store in a separate var
pub: pub:
size int size int
} }
@ -154,27 +152,29 @@ fn (m map) bs(query string, start, end int, out voidptr) {
} }
*/ */
fn (m mut map) preorder_keys(node &Node) { fn preorder_keys(node &Node, keys mut []string, key_i int) int {
mut i := key_i
if !node.is_empty { if !node.is_empty {
m._keys[m.key_i] = node.key mut a := *keys
m.key_i++ a[i] = node.key
} i++
}
if !isnil(node.left) { if !isnil(node.left) {
m.preorder_keys(node.left) i = preorder_keys(node.left, mut keys, i)
} }
if !isnil(node.right) { if !isnil(node.right) {
m.preorder_keys(node.right) i = preorder_keys(node.right, mut keys, i)
} }
return i
} }
pub fn (m mut map) keys() []string { pub fn (m mut map) keys() []string {
m._keys = [''; m.size] mut keys := [''; m.size]
m.key_i = 0
if isnil(m.root) { if isnil(m.root) {
return m._keys return keys
} }
m.preorder_keys(m.root) preorder_keys(m.root, mut keys, 0)
return m._keys return keys
} }
fn (m map) get(key string, out voidptr) bool { fn (m map) get(key string, out voidptr) bool {