summary refs log tree commit diff stats
path: root/lib/pure/collections
Commit message (Collapse)AuthorAgeFilesLines
* fixed minor bugs; cleaned up testsAraq2015-02-121-1/+1
|
* Address Andreas' complaint about code duplication.Charles Blake2015-02-071-2/+3
|
* Fix unnecessarily slow set building from openArray.Charles Blake2015-02-071-3/+17
| | | | | | | | | | | | | | | | | | | The estimation of the initialSize as simply array len + 10 was too small for for all but the smallest sets. It would not elide/skip one final enlarge(). That last one is actually always the most expensive enlarge(). Indeed, in a series where one to start from tiny and build up the table..that last one is about 50% of all the enlarging time in general. So, this simple and reasonable optimization (compared to just starting at 64) was only helping about half as much as it could. Introduce a rightSize() proc to be the inverse to mustRehash(). Export it to clients since pre-sizing is externally useful in set construction and the current mustRehash rules are opaque and beyond the control of clients. Also add test module logic to check that rightSize() and mustRehash() are inverses in the appropriate sense..not really in a block/assertion throwing unit test since this is a peformance nice-to-have issue rather than about basic correctness. (Also, fix a too vs. two typo in doc comment.)
* Add hcode. Re-factor rawGet. Fix infinite loop.Charles Blake2015-02-061-41/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace state enum with a cached hash code which has the same memory overhead and locality as the enum, but can really speed things up with non-integer-like keys (keys for which either hash() or == take more than couple cycles, or where the key data is "indirect" and might incur another cache miss). To function as both empty/filled state and a hash code cache, it only needs to be ensured that hash codes are non-zero for any real key. That is done at the one place in the whole file hash() is called. Keep convention clear via isFilled() & isEmpty(). An isDeleted state will no longer be necessary as per below excl/inf loop fix. Since some use sites know hc and some do not, re-factor rawGet into two forms - one with known hash code and one with an unknown HC that returns it. Both forms still return <0 on missing, but returns the much more informative "-1 - index". That return can be quickly inverted by -1 - result to recover the index where insert should happen, provided no modifications are made to the table in the meantime. This protocol retains the prior <0 interface and also makes it easy to avoid unnecessary duplicate search work in procs like containsOrInclImpl (which formerly searched in the initial get and AGAIN in rawInsert). Strip the searching part out of rawInsert to "make it even more raw". swap(s.data, n) a bit earlier so rawGet and rawGetKnownHC can have similar parameter lists and integrate well with rawInsert/code sharing between Set and OrderedSet impls. This PR also fixes infinite looping upon too many deletes. [ The deleted state (aka "tombstone") approach is vulnerable to the table filling up with deleted items which forces giant scans for missing keys which could be anywhere. In the version prior to this PR, table wraparound wasn't even detected yielding infinite loops. ] This PR changes excl() from marking slots as deleted to Knuth algo 6.4R, "local/incremental moveback rehashing" - adapted from Knuth's h->h-1 to the cache-friendlier h->h+1 probe sequence and adapted from "gotos" to a new doWhile template. This method restores the table to a state that would have resulted from pure inserts (in some order). Update nextTry accordingly. Since linear probing can degrade a little faster, 50% rather than 66% may be a better default growth threshold, but users should be able to adjust threshold anyway. Old unit tests all pass. More extensive testing in this module is probably warranted before taking similar enhancements over to collections.tables.
* Merge pull request #2027 from dumndummer/patch-1Andreas Rumpf2015-02-041-4/+4
|\ | | | | Update sequtils.nim
| * Changed name 'pred' to 'op' in mapIt templatedumndummer2015-02-021-2/+2
| |
| * Update sequtils.nimdumndummer2015-01-281-2/+2
| | | | | | Renamed param name 'pred' to 'op' in mapIt template to better correspond with map proc in system module
* | Fix SinglyLinkedRing in lists moduledef2015-02-011-4/+22
| | | | | | | | | | | | | | - SinglyLinkedRing's prepend was broken - needed a tail so that prepend can work properly - now append works as well, so I added it too - simple testcase added as well
* | Merge pull request #2020 from def-/mitemsreactormonk2015-02-012-0/+25
|\ \ | | | | | | mitems and mpairs
| * | Add mitems and mpairs where it makes sensedef2015-01-282-0/+25
| | |
* | | nimsuggest improvementsAraq2015-01-301-1/+1
| |/ |/|
* | documented new C++ supportAraq2015-01-285-10/+11
|/
* Update sets.nimdumndummer2015-01-271-1/+1
| | | corrected misspelled word in doc comment
* Happy new year!Guillaume Gelin2015-01-062-2/+2
|
* better CSS; better docs for teh tables moduleAraq2014-12-211-9/+18
|
* fixed typos so docgen works againAraq2014-12-201-1/+1
|
* implemented 'koch pdf'Araq2014-12-191-1/+0
|
* fixes #1496Araq2014-12-182-0/+39
|
* fixes #619Araq2014-11-151-0/+4
|
* Fix some deprecation warnings caused by renamesdef2014-11-131-7/+7
|
* recursive tuple types are now invalid (breaking change)Araq2014-10-021-0/+2
|
* prettified re.nim; make some tests greenAraq2014-08-311-21/+22
|
* fixes #1444Araq2014-08-311-1/+1
|
* Nimrod renamed to NimAraq2014-08-281-1/+1
|
* more modules updatedAraq2014-08-281-13/+13
|
* big renameAraq2014-08-281-12/+12
|
* big renameAraq2014-08-282-156/+156
|
* big renameAraq2014-08-282-7/+7
|
* big renameAraq2014-08-279-225/+227
|
* renamefestAraq2014-08-232-4/+4
|
* fixes #1413Araq2014-08-131-1/+19
|
* Merge pull request #1403 from def-/newseqwithAndreas Rumpf2014-08-121-0/+24
|\ | | | | Add newSeqWith
| * Move newSeqWith to sequtilsdef2014-08-111-0/+24
| |
* | Adds definition of card term to sets module.Grzegorz Adam Hankiewicz2014-07-271-0/+6
| |
* | Adds more docstrings to the sets module.Grzegorz Adam Hankiewicz2014-07-271-61/+374
| |
* | Adds TSet.init(), wraps initSet around it.Grzegorz Adam Hankiewicz2014-07-261-6/+46
| |
* | Adds TOrderedSet.init(), wraps initOrderedSet around it.Grzegorz Adam Hankiewicz2014-07-261-8/+49
| |
* | Adds test cases for remaining TSet procs.Grzegorz Adam Hankiewicz2014-07-261-0/+9
| |
* | Moves TSet procs to their code block.Grzegorz Adam Hankiewicz2014-07-261-21/+21
| |
* | Adds TOrderedSet.isValid().Grzegorz Adam Hankiewicz2014-07-261-0/+58
| |
* | Adds TSet.isValid().Grzegorz Adam Hankiewicz2014-07-261-0/+101
| |
* | Added stylistic consistancy.Clay Sweetser2014-07-241-1/+1
| |
* | Merge branch 'ptables_fix' of git://github.com/flyx/Nimrod into flyx-ptables_fixClay Sweetser2014-07-241-2/+5
|\ \
| * | Fixed `==` for PTables, added test.Felix Krause2014-06-271-2/+5
| | |
* | | Merge branch 'devel' of https://github.com/Araq/Nimrod into develAraq2014-07-221-1/+2
|\ \ \ | | |/ | |/|
| * | Merge pull request #1377 from sjakobi/patch-1Andreas Rumpf2014-07-191-1/+1
| |\ \ | | | | | | | | sequtils: Correct documentation for keepIf proc
| | * | sequtils: Correct documentation for keepIf procSimon Jakobi2014-07-181-1/+1
| | | |
| * | | sequtils: Complete mapIt documentation exampleSimon Jakobi2014-07-191-0/+1
| |/ /
* / / '[]' for crit bit trees doesn't need the 'var' parameterAraq2014-07-221-1/+1
|/ /
* | More effificent TSet differencedef2014-07-141-3/+4
| |