module collection/hash-table/nested
imports
collection/hash-table/common
signature
constructors
NestedTable : Hashtable -> TableValue
Tables : TableKey
NewTable : TableKey
strategies
nestedtable-put(|keys, value) =
let forward = try(?NewTable(); !NestedTable(<new-hashtable>); !(<id>,<id>))
in nestedtable-put(forward, id | keys, value)
end
nestedtable-put(forward | keys, value) =
nestedtable-put(forward, id | keys, value)
nestedtable-put(forward, changed | keys, value) =
debug(!"nestedtable-put: ");
forward
; debug(!"nestedtable-put: ")
; ?NestedTable(tbl)
; <nestedtable-put-aux(forward, changed | tbl, value)> keys
nestedtable-get(|keys) =
nestedtable-get(id | keys)
nestedtable-get(forward | keys) =
forward
; ?NestedTable(tbl)
; <nestedtable-get-aux(forward | tbl)> keys
// nestedtable-remove(|keys) =
// nestedtable-keys =
// nestedtable-getlist =
// nestedtable-putlist(|kv*) =
strategies // hidden
nestedtable-get-aux(forward | tbl) :
[] -> tbl
nestedtable-get-aux(forward | tbl) :
[key] -> value
where <hashtable-get(|key)> tbl => value
nestedtable-get-aux(forward | tbl1) :
[key1, key2 | keys] -> value
where <hashtable-get(|key1); forward> tbl1 => NestedTable(tbl2)
; <nestedtable-get-aux(forward | tbl2)> [key2 | keys] => value
strategies // hidden
nestedtable-put-aux(forward, changed | tbl, value) :
[] -> tbl
where debug(!"nestedtable-put-aux: "); fail
nestedtable-put-aux(forward, changed | tbl, value) :
[key] -> tbl
where debug(!"nestedtable-put-aux: ");
<hashtable-put(|key, value)> tbl
; <changed> NestedTable(tbl)
nestedtable-put-aux(forward, changed | tbl1, value) :
[key1, key2 | keys] -> value
where debug(!"nestedtable-put-aux: ");
(<hashtable-get(|key1); forward> tbl1 => NestedTable(tbl2)
<+ <forward> NewTable() => (x, NestedTable(tbl2))
; <hashtable-put(|key1, x)> tbl1
; <hashtable-push(|Tables(), key1)
; <changed> NestedTable(tbl1)> tbl1)
; <nestedtable-put-aux(forward, changed | tbl2, value)> [key2 | keys]