TOC »
- srfi-69-weak
- Usage
- Hash Table Procedures
- make-hash-table
- alist->hash-table
- hash-table?
- hash-table-size
- hash-table-equivalence-function
- hash-table-hash-function
- hash-table-min-load
- hash-table-max-load
- hash-table-weak-keys
- hash-table-weak-values
- hash-table-has-initial?
- hash-table-initial
- hash-table-keys
- hash-table-values
- hash-table->alist
- hash-table-ref
- hash-table-ref/default
- hash-table-exists?
- hash-table-set!
- hash-table-update!
- hash-table-update!/default
- hash-table-copy
- hash-table-delete!
- hash-table-remove!
- hash-table-clean!
- hash-table-clear!
- hash-table-merge
- hash-table-merge!
- hash-table-map
- hash-table-fold
- hash-table-for-each
- hash-table-walk
- Hashing Functions
- Author
- Repository
- Bugs & Limitations
- Requirements
- License
- Version History
srfi-69-weak
An implementation of SRFI 69 with SRFI 90 extensions. For more information, see SRFI-69 and SRFI-90.
Not a drop-in replacement for the srfi-69 egg. While API compatible, the hashing functions and hash-table operations are in separate libraries, and the hash-table is incompatible. The hashing functions, however, are compatible.
Usage
- space vs time - variable reference size: 1 - 2 cons cells
(import (srfi 69 hash) (srfi 69 weak var))
(import (srfi 90))
- time vs space - fixed reference size: 2 cons cells
(import (srfi 69 hash) (srfi 69 weak fix))
Hash Table Procedures
make-hash-table
- (make-hash-table [TEST HASH SIZE] [#:test TEST] [#:hash HASH] [#:size SIZE] [#:initial INITIAL] [#:min-load MIN-LOAD] [#:max-load MAX-LOAD] [#:weak-keys WEAK-KEYS] [#:weak-values WEAK-VALUES])procedure
Returns a new HASH-TABLE with the supplied configuration.
- TEST
- (* * -> boolean) ; equivalence function.
- HASH
- (* fixnum -> fixnum) ; hash function.
- SIZE
- fixnum ; expected number of table elements.
- INITIAL
- * ; default initial value.
- MIN-LOAD
- flonum(0.0 1.0) ; minimum load factor.
- MAX-LOAD
- flonum(0.0 1.0) ; maximum load factor.
- WEAK-KEYS
- boolean ; weak references for keys.
- WEAK-VALUES
- boolean ; weak references for values.
Please note that hash tables are not guaranteed to compare equal? to each other, even if they contain exactly the same key/value pairs.
alist->hash-table
- (alist->hash-table A-LIST [#:test TEST] [#:hash HASH] [#:size SIZE] [#:initial INITIAL] [#:min-load MIN-LOAD] [#:max-load MAX-LOAD] [#:weak-keys WEAK-KEYS] [#:weak-values WEAK-VALUES])procedure
Returns a new HASH-TABLE. The HASH-TABLE is populated from the A-LIST. The keyword arguments are per make-hash-table.
If a key occurs multiple times in A-LIST, the first occurrence will be used in the hash table.
hash-table?
- hash-table? OBJECTprocedure
Is the OBJECT a hash-table?
hash-table-size
- hash-table-size HASH-TABLEprocedure
The HASH-TABLE size. The returned exact non-negative integer is the count of associations in a table that holds data strongly. However weak-keys or weak-values mean the number can only be considered an upper bound.
hash-table-equivalence-function
- hash-table-equivalence-function HASH-TABLEprocedure
The HASH-TABLE equivalence-function.
hash-table-hash-function
- hash-table-hash-function HASH-TABLEprocedure
The HASH-TABLE hash-function.
hash-table-min-load
- hash-table-min-load HASH-TABLEprocedure
The HASH-TABLE minimum load factor.
hash-table-max-load
- hash-table-max-load HASH-TABLEprocedure
The HASH-TABLE maximum load factor.
hash-table-weak-keys
- hash-table-weak-keys HASH-TABLEprocedure
Does the HASH-TABLE use weak references for keys?
hash-table-weak-values
- hash-table-weak-values HASH-TABLEprocedure
Does the HASH-TABLE use weak references for values?
hash-table-has-initial?
- hash-table-has-initial? HASH-TABLEprocedure
Does the HASH-TABLE have a default initial value?
hash-table-initial
- hash-table-initial HASH-TABLEprocedure
The HASH-TABLE default initial value.
hash-table-keys
- hash-table-keys HASH-TABLEprocedure
Returns a list of the keys in the HASH-TABLE population.
hash-table-values
- hash-table-values HASH-TABLEprocedure
Returns a list of the values in the HASH-TABLE population.
hash-table->alist
- hash-table->alist HASH-TABLEprocedure
Returns the population of the HASH-TABLE as an a-list.
hash-table-ref
- hash-table-ref HASH-TABLE KEYprocedure
Returns the VALUE for the KEY in the HASH-TABLE.
Aborts with an exception when the KEY is missing.
hash-table-ref/default
- hash-table-ref/default HASH-TABLE KEY DEFAULTprocedure
Returns the VALUE for the KEY in the HASH-TABLE, or the DEFAULT when the KEY is missing.
hash-table-exists?
- hash-table-exists? HASH-TABLE KEYprocedure
Does the KEY exist in the HASH-TABLE?
hash-table-set!
- hash-table-set! HASH-TABLE KEY VALUEprocedure
Set the VALUE for the KEY in the HASH-TABLE.
A setter for hash-table-ref is defined, so
(set! (hash-table-ref HASH-TABLE KEY) VALUE)
is equivalent to
(hash-table-set! HASH-TABLE KEY VALUE)
hash-table-update!
- hash-table-update! HASH-TABLE KEY #!optional UPDATE-FUNCTION DEFAULT-VALUE-FUNCTIONprocedure
Sets or replaces the VALUE for KEY in the HASH-TABLE.
The UPDATE-FUNCTION takes the existing VALUE for KEY and returns the new VALUE. The default is identity
The DEFAULT-VALUE-FUNCTION is called when the entry for KEY is missing. The default uses the (hash-table-initial-value), if provided. Otherwise aborts with an exception.
Returns the new VALUE.
hash-table-update!/default
- hash-table-update!/default HASH-TABLE KEY UPDATE-FUNCTION DEFAULT-VALUEprocedure
Sets or replaces the VALUE for KEY in the HASH-TABLE.
The UPDATE-FUNCTION takes the existing VALUE for KEY and returns the new VALUE.
The DEFAULT-VALUE is used when the entry for KEY is missing.
Returns the new VALUE.
hash-table-copy
- hash-table-copy HASH-TABLEprocedure
Returns a shallow copy of the HASH-TABLE.
hash-table-delete!
- hash-table-delete! HASH-TABLE KEYprocedure
Deletes the entry for KEY in the HASH-TABLE.
hash-table-remove!
- hash-table-remove! HASH-TABLE PROCprocedure
Calls PROC for all entries in HASH-TABLE with the key and value of each entry. If PROC returns true, then that entry is removed.
hash-table-clean!
- hash-table-clean! HASH-TABLEprocedure
Scavenges any broken weak entries in HASH-TABLE.
hash-table-clear!
- hash-table-clear! HASH-TABLEprocedure
Deletes all entries in HASH-TABLE.
hash-table-merge
- hash-table-merge HASH-TABLE-1 HASH-TABLE-2procedure
Returns a new HASH-TABLE with the union of HASH-TABLE-1 and HASH-TABLE-2. Keys that exist in both tables will be taken from HASH-TABLE-1.
hash-table-merge!
- hash-table-merge! HASH-TABLE-1 HASH-TABLE-2procedure
Returns HASH-TABLE-1 as the union of HASH-TABLE-1 and HASH-TABLE-2. Keys that exist in both tables will be taken from HASH-TABLE-1.
hash-table-map
- hash-table-map HASH-TABLE FUNCprocedure
Calls FUNC for all entries in HASH-TABLE with the key and value of each entry.
Returns a list of the results of each call.
hash-table-fold
- hash-table-fold HASH-TABLE FUNC INITprocedure
Calls FUNC for all entries in HASH-TABLE with the key and value of each entry, and the current folded value. The initial folded value is INIT.
Returns the final folded value.
hash-table-for-each
- hash-table-for-each HASH-TABLE PROCprocedure
Calls PROC for all entries in HASH-TABLE with the key and value of each entry.
hash-table-walk
- hash-table-walk HASH-TABLE PROCprocedure
Calls PROC for all entries in HASH-TABLE with the key and value of each entry.
Hashing Functions
All hash functions return a fixnum in the range [0 BOUND).
When given the fixnum RANDOMIZATION, these functions will use this to perturb the value; if not specified, the value will differ for each invocation of your program. This is for security reasons; an attacker who knows what a value hashes to can deliberately try to cause collisions, thereby flattening your hash table, effectively reducing it to a list. Always make sure you don't expose any hashed value to an attacker.
number-hash
- number-hash NUMBER #!optional BOUND RANDOMIZATIONprocedure
For use with = as a hash-table-equivalence-function.
object-uid-hash
- object-uid-hash OBJECT #!optional BOUND RANDOMIZATIONprocedure
Currently a synonym for equal?-hash.
symbol-hash
- symbol-hash SYMBOL #!optional BOUND RANDOMIZATIONprocedure
For use with eq? as a hash-table-equivalence-function.
keyword-hash
- keyword-hash KEYWORD #!optional BOUND RANDOMIZATIONprocedure
For use with eq? as a hash-table-equivalence-function.
string-hash
- string-hash STRING #!optional BOUND START END RANDOMIZATIONprocedure
For use with string=? as a hash-table-equivalence-function. The optional START and END arguments may be given to limit the hash calculation to a specific sub-section of STRING.
string-ci-hash
- string-hash-ci STRING #!optional BOUND START END RANDOMIZATIONprocedure
<br> <procedure>(string-ci-hash STRING [BOUND [START [END [RANDOMIZATION]]]])</procedure>
For use with string-ci=? as a hash-table-equivalence-function.
eq?-hash
- eq?-hash OBJECT #!optional BOUND RANDOMIZATIONprocedure
For use with eq? as a hash-table-equivalence-function.
eqv?-hash
- eqv?-hash OBJECT #!optional BOUND RANDOMIZATIONprocedure
For use with eqv? as a hash-table-equivalence-function.
equal?-hash
- equal?-hash OBJECT #!optional BOUND RANDOMIZATIONprocedure
For use with equal? as a hash-table-equivalence-function.
hash
- hash OBJECT #!optional BOUND RANDOMIZATIONprocedure
Synonym for equal?-hash.
hash-by-identity
- hash-by-identity OBJECT #!optional BOUND RANDOMIZATIONprocedure
Synonym for eq?-hash.
recursive-hash-max-depth
- recursive-hash-max-depth #!optional DEPTHprocedure
The maximum structure depth to follow when computing a hash value. The default is 4.
recursive-hash-max-length
- recursive-hash-max-length #!optional LENGTHprocedure
The maximum vector length to follow when computing a hash value. The default is 4.
*make-hash-function
- *make-hash-function FUNCprocedure
Wraps a hash function, (* fixnum -> fixnum), in a function that validates the hash result for type & bounds.
Author
Felix, Kon, The CHICKEN Team, Kon.
Repository
This egg is hosted on the CHICKEN Subversion repository:
https://anonymous@code.call-cc.org/svn/chicken-eggs/release/5/srfi-69-weak
If you want to check out the source code repository of this egg and you are not familiar with Subversion, see this page.
Bugs & Limitations
- Use of the hash-table object between (srfi 69), (srfi 90), (srfi 69 weak var) & (srfi 69 weak fix) imports is not supported.
- While encountered broken weak entries are scavenged during operations, not all are encountered. So the hash-table-size is an upper bound. (An entry is scavenged when either a weak key or value reference is broken)
Requirements
License
Copyright (c) 2008-2021, The Chicken Team Copyright (c) 2000-2007, Felix L. Winkelmann All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the authors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Version History
- 0.2.2
- discriminating record printer
- 0.2.1
- provide srfi-90 feature
- 0.2.0
- add (srfi 90) import (srfi.69.hash + srfi.69.weak.var)
- 0.1.1
- provide srfi-69-weak feature
- 0.1.0
- Initial release (from srfi-69:0.4.3), add 2 weak references implementations, add hash-table-clean!, recursive-hash-max-depth & recursive-hash-max-length are procedure, hash & hash-by-identity are #:clean, hash-table-max-load & hash-table-min-load return float, string-ci-hash & string-hash-ci return fixnum, hash-table-equivalence-function is inlined