Commit graph

87 commits

Author SHA1 Message Date
Nindaleth
34dbc5699e fix several typos in documentation and comments (#12553) 2019-10-30 09:08:45 +01:00
Jjp137
3ad48069d3 Fix word wrapping 2019-10-22 17:59:12 -07:00
Jjp137
93461aee34 Fix many broken links
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.
2019-10-22 17:59:12 -07:00
Miran
734da9e1df fixes #11764, faster hashing of (u)int (#12407) 2019-10-15 16:31:07 +02:00
Miran
2255d8795b
[other] prettify collections (#11695) 2019-07-09 22:45:23 +02:00
Arne Döring
c7e1c665a1 [refactoring] refactor the compiler and stdlib to deprecation warnings (#11419) 2019-06-11 16:49:56 +02:00
LemonBoy
7d217a71d3 Render deprecated pragmas (#8886)
* Render deprecated pragmas
* fix the expected html
* clean up the documentation regarding deprecations
* fix typo
* fix system.nim
* fix random
2019-06-03 10:15:20 +02:00
Jjp137
9ee2ecf0a6 sets: minor documentation fixes [ci skip] (#11377)
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.
2019-06-02 08:29:31 +02:00
Miran
737fff5902 Initialized collections (#11094)
* 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
2019-04-29 08:13:52 +02:00
Araq
f2f9386101 make sets.nim useful for selective 'from import's 2019-04-05 14:57:59 +02:00
Andreas Rumpf
aed8766e84 stdlib: use system.default if it exists 2019-03-05 10:03:24 +01:00
Miran
fb863a147a use initHashSet and toHashSet, fixes #10730 (#10736) 2019-02-25 16:53:05 +01:00
Miran
39e1cd2bf6 Better docs for sets and intsets (#10362)
* better docs: sets

* better docs: intsets
2019-01-22 10:18:12 +01:00
Miran
214f48eae9
Remove long deprecated stuff (#10332) 2019-01-18 07:18:32 +01:00
Araq
647066e378 make the stdlib work with the changed docgen 2019-01-11 22:17:43 +01:00
Araq
3f6168b337 removes deprecated T/P types 2018-11-16 13:27:56 +01:00
Oscar Nihlgård
eade49d7a7 Fix OrderedSet.excl (#9287) 2018-10-11 08:40:09 +02:00
Araq
dbd21d670c make more things compile without isNil 2018-08-22 15:12:02 +02:00
Araq
64517445ea even more strict isNil handling for strings/seqs in order to detect bugs 2018-08-22 12:35:46 +02:00
skilchen
8fe8bed9c3 add sets.pop procedure (analogue to python) (#8383) 2018-07-21 19:51:14 +02:00
Lolo Iccl
af591544c5 Modify hash for HashSet to use xor to mix hash of items. 2018-05-09 17:41:41 +02:00
Lolo Iccl
5c7b66e07a Modify previous commit and add tests 2018-05-09 17:41:41 +02:00
Lolo Iccl
ee8313da3f Modify previous commit
Modify previous commit to use data[h].hcode in
proc hash for HashSet and for OrderedSet.
2018-05-09 17:41:41 +02:00
Lolo Iccl
80f17f9405 Add proc hash for HashSet and for OrderedSet
close #7772
2018-05-09 17:41:41 +02:00
Roman Ovseitsev
17d0e29d40 Fix documentation link for set type (#7465) 2018-04-03 10:39:17 +02:00
Fabian Keller
6df6ec27ec Improved collection-to-string behavior (#6825) 2017-12-14 14:02:13 +01:00
andri lim
42666a5d6d fix ordered set equality (#6791) 2017-11-24 14:43:49 +01:00
GULPF
cc24b6d4cb Sets enhancements, fixes #2467 (#6158) 2017-09-20 13:44:44 +02:00
superfunc
d1f6ddfd64 Add counterpart to containsOrIncl for excl (#6360) 2017-09-15 10:49:32 +02:00
GrundleTrundle
13ba0b557e Added clear() function for OrderedSet and HashSet. (#5545) 2017-03-16 08:06:24 +01:00
Yuriy Glukhov
54cbe0b743 More workarounds for #5098 2016-12-07 20:15:31 +02:00
Andreas Rumpf
8876ed23f1 expr and stmt are now deprecated 2016-07-30 16:34:42 +02:00
Andreas Rumpf
60b187513e stdlib and compiler don't use .immediate anymore 2016-07-29 23:51:01 +02:00
Matthew Baulch
a6c66139fa Update sets examples so they work again. 2016-07-06 20:30:57 +10:00
Andreas Rumpf
5f83e869fa attempt to fix a critical memory leak in Nim's collections 2016-06-15 17:15:27 +02:00
Rostyslav Dzinko
bbf12aab4f Removed unused import of 'os' module from module 'sets' 2016-03-04 11:34:27 +02:00
Samantha Doran
d732279203 Don't expect all keys in hashsets to have $ defined 2016-03-01 11:23:47 -05:00
Erik Johansson Andersson
f8d98700ac nimrod -> nim 2016-02-05 19:11:43 +01:00
Araq
8be9e46403 udpated the compiler and tester to use getOrDefault 2015-10-13 14:10:33 +02:00
Araq
d8b0edc323 Merge branch 'mget' of https://github.com/def-/Nim into def--mget
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
2015-10-13 00:22:27 +02:00
pdw
192ba3bbc0 lib/pure/a-c - Dropped 'T' from types 2015-06-04 13:17:11 +02:00
Oleh Prypin
32109a7867 Don't run non-test code when defined(testing) 2015-04-21 14:37:29 +03:00
def
22b4e4c2f2 Use more Natural and Positive numbers in proc parameters
- Didn't go through all modules, only the main ones I thought of
- Building the compiler and tests still work
2015-04-06 02:24:17 +02:00
ReneSac
e41a3e9661 Fix warning about sets.testModule() not used. 2015-04-04 15:28:38 -03:00
def
63f9385327 Rename mget to []
- 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
2015-03-31 00:32:39 +02:00
Charles Blake
5068a5aa01 assignment -> shallowCopy for efficiency. 2015-02-13 14:10:09 -05:00
Charles Blake
d129e8f6c6 Update doc comments to mention rightSize. 2015-02-13 08:28:58 -05:00
Charles Blake
1f3ce26421 Address Andreas' complaint about code duplication. 2015-02-07 13:13:03 -05:00
Charles Blake
42f8f1cd1f Fix unnecessarily slow set building from openArray.
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.)
2015-02-07 09:37:17 -05:00
Charles Blake
65ce08f38c Add hcode. Re-factor rawGet. Fix infinite loop.
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.
2015-02-06 09:24:20 -05:00