map: fix a bug with an incorrect size after delete()

pull/3157/head
Alexander Medvednikov 2019-12-19 21:11:42 +03:00
parent 519f2990f2
commit 26f5d34e64
1 changed files with 7 additions and 4 deletions

View File

@ -55,6 +55,9 @@ fn new_node(key string, val voidptr, element_size int) &mapnode {
fn (m mut map) insert(n mut mapnode, key string, val voidptr) { fn (m mut map) insert(n mut mapnode, key string, val voidptr) {
if n.key == key { if n.key == key {
C.memcpy(n.val, val, m.element_size) C.memcpy(n.val, val, m.element_size)
if n.is_empty {
m.size++
}
return return
} }
if n.key > key { if n.key > key {
@ -237,20 +240,20 @@ pub fn (m map) print() {
fn (n mut mapnode) free() { fn (n mut mapnode) free() {
if n.val != 0 { if n.val != 0 {
free(n.val) free(n.val)
} }
if n.left != 0 { if n.left != 0 {
n.left.free() n.left.free()
} }
if n.right != 0 { if n.right != 0 {
n.right.free() n.right.free()
} }
free(n) free(n)
} }
pub fn (m mut map) free() { pub fn (m mut map) free() {
if m.root == 0 { if m.root == 0 {
return return
} }
m.root.free() m.root.free()
// C.free(m.table) // C.free(m.table)
// C.free(m.keys_table) // C.free(m.keys_table)