* added `==` for OrderedTable, CountTable and the *Ref types
* added missing documentation to all `==` procs
* fixed clear() for OrderedTables, which did not work because `var`
does not work well with `|`
* added tests
However, this fix won't take effect until a compiler bug (#4448) is fixed. Until then, the codebase functions identically to
how it did before this commit (calls to clear() fail to compile for Table/OrderedTable/CountTable as the argument is
immutable).
* With previous code, the compiler deduced that equalsImpl may raise
a KeyError. While this could only actually happen in a nasty
multi-threaded environment, I fixed the code so that it will never happen.
Fixes issue with CountTableRef and getOrDefault:
```{nimrod}
import tables
proc main() =
const testKey = "TESTKEY"
let t: CountTableRef[string] = newCountTable[string]()
# Before, does not compile with error message:
#test_counttable.nim(7, 43) template/generic instantiation from here
#lib/pure/collections/tables.nim(117, 21) template/generic instantiation from here
#lib/pure/collections/tableimpl.nim(32, 27) Error: undeclared field: 'hcode'
echo "Count of " & testKey & " is " & $t.getOrDefault(testKey)
t.inc(testKey,3)
echo "Count of " & testKey & " is " & $t.getOrDefault(testKey)
when isMainModule:
main()
```
Previously, `getOrDefault` for CountTableRef objects was calling the
`getOrDefaultImpl` template, which used the t.data.hcode object -
assuming a Table or similar object. Because CountTableRef didn't have
an hcode in its data tuples, this wouldn't compile. Changed to be the
same as `CountTable#getOrDefault`.
- In sets, tables, strtabs, critbits, xmltree
- This uses the new var parameter overloading
- mget variants still exist, but are deprecated in favor of `[]`
- Includes tests and fixed tests and usages of mget
- The non-var `[]` now throws an exception instead of returning binary 0
or an empty string
Fixes an error with mpairs iterator which was introduced with 5fbcf93860. This is used by nimforum thats why I found it. I also added a testcase for the mpairs iterator.
Extract maybe re-hash/re-search and insert logic into a new template.
Use this new template to do impl templates for all three put forms
(which required renaming a couple 'value' arguments to 'val').
Added OrderedTable and OrderedTableRef versions of both as well.