summary refs log tree commit diff stats
path: root/lib/pure/collections/sets.nim
Commit message (Collapse)AuthorAgeFilesLines
* fix several typos in documentation and comments (#12553)Nindaleth2019-10-301-1/+1
|
* Fix word wrappingJjp1372019-10-221-4/+4
|
* Fix many broken linksJjp1372019-10-221-2/+2
| | | | | | Note that contrary to what docgen.rst currently says, the ids have to match exactly or else most web browsers will not jump to the intended symbol.
* fixes #11764, faster hashing of (u)int (#12407)Miran2019-10-151-2/+2
|
* [other] prettify collections (#11695)Miran2019-07-091-7/+7
|
* [refactoring] refactor the compiler and stdlib to deprecation warnings (#11419)Arne Döring2019-06-111-2/+2
|
* Render deprecated pragmas (#8886)LemonBoy2019-06-031-7/+2
| | | | | | | | | * Render deprecated pragmas * fix the expected html * clean up the documentation regarding deprecations * fix typo * fix system.nim * fix random
* sets: minor documentation fixes [ci skip] (#11377)Jjp1372019-06-021-3/+3
| | | | | | | | Mainly replace a backslash, which was supposed to represent set difference, with the Unicode symbol for set difference (U+2216). The backslash did not appear in the output since it is used to escape characters in reST. Fix a few typos as well.
* Initialized collections (#11094)Miran2019-04-291-313/+160
| | | | | | | | | | | | * tables: initialized by default * sets: initialized by default * DRY: extract shared functionality * add a changelog entry * fix errors * don't test include files * make it work for sharedtables * fix discovered bugs * add exhaustive tests
* make sets.nim useful for selective 'from import'sAraq2019-04-051-57/+54
|
* stdlib: use system.default if it existsAndreas Rumpf2019-03-051-9/+6
|
* use `initHashSet` and `toHashSet`, fixes #10730 (#10736)Miran2019-02-251-86/+94
|
* Better docs for sets and intsets (#10362)Miran2019-01-221-534/+779
| | | | | | * better docs: sets * better docs: intsets
* Remove long deprecated stuff (#10332)Miran2019-01-181-7/+0
|
* make the stdlib work with the changed docgenAraq2019-01-111-1/+1
|
* removes deprecated T/P typesAraq2018-11-161-4/+0
|
* Fix OrderedSet.excl (#9287)Oscar Nihlgård2018-10-111-34/+29
|
* make more things compile without isNilAraq2018-08-221-1/+1
|
* even more strict isNil handling for strings/seqs in order to detect bugsAraq2018-08-221-1/+1
|
* add sets.pop procedure (analogue to python) (#8383)skilchen2018-07-211-0/+12
|
* Modify hash for HashSet to use `xor` to mix hash of items.Lolo Iccl2018-05-091-5/+2
|
* Modify previous commit and add testsLolo Iccl2018-05-091-2/+5
|
* Modify previous commitLolo Iccl2018-05-091-4/+8
| | | | | Modify previous commit to use data[h].hcode in proc hash for HashSet and for OrderedSet.
* Add proc hash for HashSet and for OrderedSetLolo Iccl2018-05-091-0/+10
| | | | close #7772
* Fix documentation link for set type (#7465)Roman Ovseitsev2018-04-031-1/+1
|
* Improved collection-to-string behavior (#6825)Fabian Keller2017-12-141-1/+1
|
* fix ordered set equality (#6791)andri lim2017-11-241-5/+21
|
* Sets enhancements, fixes #2467 (#6158)GULPF2017-09-201-4/+94
|
* Add counterpart to containsOrIncl for excl (#6360)superfunc2017-09-151-11/+29
|
* Added clear() function for OrderedSet and HashSet. (#5545)GrundleTrundle2017-03-161-0/+25
|
* More workarounds for #5098Yuriy Glukhov2016-12-071-1/+3
|
* expr and stmt are now deprecatedAndreas Rumpf2016-07-301-2/+2
|
* stdlib and compiler don't use .immediate anymoreAndreas Rumpf2016-07-291-2/+2
|
* Update sets examples so they work again.Matthew Baulch2016-07-061-3/+3
|
* attempt to fix a critical memory leak in Nim's collectionsAndreas Rumpf2016-06-151-0/+4
|
* Removed unused import of 'os' module from module 'sets'Rostyslav Dzinko2016-03-041-1/+1
|
* Don't expect all keys in hashsets to have $ definedSamantha Doran2016-03-011-1/+5
|
* nimrod -> nimErik Johansson Andersson2016-02-051-1/+1
|
* udpated the compiler and tester to use getOrDefaultAraq2015-10-131-2/+2
|
* Merge branch 'mget' of https://github.com/def-/Nim into def--mgetAraq2015-10-131-1/+8
|\ | | | | | | | | | | | | | | | | | | Conflicts: lib/pure/collections/critbits.nim lib/pure/collections/tables.nim lib/pure/xmltree.nim lib/system/sets.nim tests/collections/ttables.nim tests/collections/ttablesref.nim
| * Rename mget to `[]`def2015-03-311-1/+8
| | | | | | | | | | | | | | | | | | - 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
* | lib/pure/a-c - Dropped 'T' from typespdw2015-06-041-25/+25
| |
* | Don't run non-test code when defined(testing)Oleh Prypin2015-04-211-1/+2
| |
* | Use more Natural and Positive numbers in proc parametersdef2015-04-061-1/+1
| | | | | | | | | | - Didn't go through all modules, only the main ones I thought of - Building the compiler and tests still work
* | Fix warning about sets.testModule() not used.ReneSac2015-04-041-174/+175
|/
* assignment -> shallowCopy for efficiency.Charles Blake2015-02-131-1/+1
|
* Update doc comments to mention rightSize.Charles Blake2015-02-131-6/+6
|
* 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.