--- /dev/null
+John Benediktsson
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: hash-sets.numbers kernel sets tools.test ;
+
+{ t } [ 1.5 NHS{ 3/2 } in? ] unit-test
+
+{ NHS{ 3/2 } } [
+ 1.5 NHS{ 3/2 } [ adjoin ] keep
+] unit-test
+
+{ t } [
+ NHS{ } clone 1.5 over adjoin
+ 3/2 swap in?
+] unit-test
+
+{ { 1.5 } } [ NHS{ 1.5 } members ] unit-test
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: accessors hash-sets hash-sets.wrapped kernel math
+math.hashcodes parser sequences vocabs.loader ;
+
+IN: hash-sets.numbers
+
+<PRIVATE
+
+TUPLE: number-wrapper
+ { underlying number read-only } ;
+
+C: <number-wrapper> number-wrapper
+
+M: number-wrapper equal?
+ over number-wrapper?
+ [ [ underlying>> ] bi@ number= ]
+ [ 2drop f ] if ; inline
+
+M: number-wrapper hashcode*
+ nip underlying>> number-hashcode ; inline
+
+PRIVATE>
+
+TUPLE: number-hash-set < wrapped-hash-set ;
+
+: <number-hash-set> ( n -- shash-set )
+ <hash-set> number-hash-set boa ; inline
+
+M: number-hash-set wrap-key drop <number-wrapper> ;
+
+M: number-hash-set clone
+ underlying>> clone number-hash-set boa ; inline
+
+: >number-hash-set ( members -- shash-set )
+ [ <number-wrapper> ] map >hash-set number-hash-set boa ;
+
+SYNTAX: NHS{ \ } [ >number-hash-set ] parse-literal ;
+
+{ "hash-sets.numbers" "prettyprint" } "hash-sets.numbers.prettyprint" require-when
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: hash-sets.numbers kernel prettyprint.custom ;
+
+IN: hash-sets.numbers.prettyprint
+
+M: number-hash-set pprint-delims drop \ NHS{ \ } ;
--- /dev/null
+collections
--- /dev/null
+John Benediktsson
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: assocs hashtables.numbers kernel literals sequences
+tools.test ;
+
+{ 1000 } [ 3/2 NH{ { 1.5 1000 } } at ] unit-test
+
+{ 1001 } [
+ 1001 1.5 NH{ { 3/2 1000 } }
+ [ set-at ] [ at ] 2bi
+] unit-test
+
+{ 1001 } [
+ NH{ } clone 1001 1.5 pick set-at
+ 3/2 of
+] unit-test
+
+{ { { 1.0 1000 } } } [ NH{ { 1.0 1000 } } >alist ] unit-test
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: accessors assocs combinators hashtables
+hashtables.wrapped kernel math math.hashcodes parser
+vocabs.loader ;
+
+IN: hashtables.numbers
+
+<PRIVATE
+
+TUPLE: number-wrapper
+ { underlying number read-only } ;
+
+C: <number-wrapper> number-wrapper
+
+M: number-wrapper equal?
+ over number-wrapper?
+ [ [ underlying>> ] bi@ number= ]
+ [ 2drop f ] if ; inline
+
+M: number-wrapper hashcode*
+ nip underlying>> number-hashcode ; inline
+
+PRIVATE>
+
+TUPLE: number-hashtable < wrapped-hashtable ;
+
+: <number-hashtable> ( n -- shashtable )
+ <hashtable> number-hashtable boa ; inline
+
+M: number-hashtable wrap-key drop <number-wrapper> ;
+
+M: number-hashtable clone
+ underlying>> clone number-hashtable boa ; inline
+
+: >number-hashtable ( assoc -- shashtable )
+ [ assoc-size <number-hashtable> ] keep assoc-union! ;
+
+M: number-hashtable new-assoc drop <number-hashtable> ;
+
+SYNTAX: NH{ \ } [ >number-hashtable ] parse-literal ;
+
+{ "hashtables.numbers" "prettyprint" } "hashtables.numbers.prettyprint" require-when
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: hashtables.numbers kernel prettyprint.custom ;
+
+IN: hashtables.numbers
+
+M: number-hashtable pprint-delims drop \ NH{ \ } ;
--- /dev/null
+collections
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: arrays kernel grouping math math.hashcodes sequences
+tools.test ;
+
+{ t } [
+ 12 dup >bignum 12.0 12 0 complex boa 4array
+ [ number-hashcode ] map all-equal?
+] unit-test
+
+{ t } [
+ 1.5 3/2 1.5 0 complex boa 3/2 0 complex boa 4array
+ [ number-hashcode ] map all-equal?
+] unit-test
--- /dev/null
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: combinators kernel layouts math math.bitwise
+math.floating-point math.functions ;
+
+IN: math.hashcodes
+
+GENERIC: number-hashcode ( x -- h )
+
+<PRIVATE
+
+: P ( -- x )
+ cell-bits 64 = 61 31 ? 2^ 1 - ; inline foldable
+
+: M ( -- x )
+ cell-bits 1 - 2^ ; inline foldable
+
+: hash-fraction ( m n -- h )
+
+ [ 2dup [ P mod zero? ] both? ] [
+ [ P /i ] bi@
+ ] while
+
+ dup P mod zero? [
+ 2drop 1/0.
+ ] [
+ over [
+ [ abs P mod ] [ P 2 - P ^mod P mod ] bi* *
+ ] dip 0 < [ neg ] when
+ dup -1 = [ drop -2 ] when
+ ] if ; inline
+
+PRIVATE>
+
+M: integer number-hashcode 1 hash-fraction ;
+
+M: ratio number-hashcode >fraction hash-fraction ;
+
+M: float number-hashcode ( x -- h )
+ {
+ { [ dup fp-nan? ] [ drop 0 ] }
+ { [ dup fp-infinity? ] [ 0 > 314159 -314159 ? ] }
+ [ double>ratio number-hashcode ]
+ } cond ;
+
+M: complex number-hashcode ( x -- h )
+ >rect [ number-hashcode ] bi@ 1000003 * +
+ cell-bits on-bits bitand dup -1 = [ drop -2 ] when ;
+++ /dev/null
-John Benediktsson
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: hash-sets.numbers kernel sets tools.test ;
-
-{ t } [ 1.5 NHS{ 3/2 } in? ] unit-test
-
-{ NHS{ 3/2 } } [
- 1.5 NHS{ 3/2 } [ adjoin ] keep
-] unit-test
-
-{ t } [
- NHS{ } clone 1.5 over adjoin
- 3/2 swap in?
-] unit-test
-
-{ { 1.5 } } [ NHS{ 1.5 } members ] unit-test
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: accessors hash-sets hash-sets.wrapped kernel math
-math.hashcodes parser sequences vocabs.loader ;
-
-IN: hash-sets.numbers
-
-<PRIVATE
-
-TUPLE: number-wrapper
- { underlying number read-only } ;
-
-C: <number-wrapper> number-wrapper
-
-M: number-wrapper equal?
- over number-wrapper?
- [ [ underlying>> ] bi@ number= ]
- [ 2drop f ] if ; inline
-
-M: number-wrapper hashcode*
- nip underlying>> number-hashcode ; inline
-
-PRIVATE>
-
-TUPLE: number-hash-set < wrapped-hash-set ;
-
-: <number-hash-set> ( n -- shash-set )
- <hash-set> number-hash-set boa ; inline
-
-M: number-hash-set wrap-key drop <number-wrapper> ;
-
-M: number-hash-set clone
- underlying>> clone number-hash-set boa ; inline
-
-: >number-hash-set ( members -- shash-set )
- [ <number-wrapper> ] map >hash-set number-hash-set boa ;
-
-SYNTAX: NHS{ \ } [ >number-hash-set ] parse-literal ;
-
-{ "hash-sets.numbers" "prettyprint" } "hash-sets.numbers.prettyprint" require-when
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: hash-sets.numbers kernel prettyprint.custom ;
-
-IN: hash-sets.numbers.prettyprint
-
-M: number-hash-set pprint-delims drop \ NHS{ \ } ;
+++ /dev/null
-collections
+++ /dev/null
-John Benediktsson
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: assocs hashtables.numbers kernel literals sequences
-tools.test ;
-
-{ 1000 } [ 3/2 NH{ { 1.5 1000 } } at ] unit-test
-
-{ 1001 } [
- 1001 1.5 NH{ { 3/2 1000 } }
- [ set-at ] [ at ] 2bi
-] unit-test
-
-{ 1001 } [
- NH{ } clone 1001 1.5 pick set-at
- 3/2 of
-] unit-test
-
-{ { { 1.0 1000 } } } [ NH{ { 1.0 1000 } } >alist ] unit-test
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: accessors assocs combinators hashtables
-hashtables.wrapped kernel math math.hashcodes parser
-vocabs.loader ;
-
-IN: hashtables.numbers
-
-<PRIVATE
-
-TUPLE: number-wrapper
- { underlying number read-only } ;
-
-C: <number-wrapper> number-wrapper
-
-M: number-wrapper equal?
- over number-wrapper?
- [ [ underlying>> ] bi@ number= ]
- [ 2drop f ] if ; inline
-
-M: number-wrapper hashcode*
- nip underlying>> number-hashcode ; inline
-
-PRIVATE>
-
-TUPLE: number-hashtable < wrapped-hashtable ;
-
-: <number-hashtable> ( n -- shashtable )
- <hashtable> number-hashtable boa ; inline
-
-M: number-hashtable wrap-key drop <number-wrapper> ;
-
-M: number-hashtable clone
- underlying>> clone number-hashtable boa ; inline
-
-: >number-hashtable ( assoc -- shashtable )
- [ assoc-size <number-hashtable> ] keep assoc-union! ;
-
-M: number-hashtable new-assoc drop <number-hashtable> ;
-
-SYNTAX: NH{ \ } [ >number-hashtable ] parse-literal ;
-
-{ "hashtables.numbers" "prettyprint" } "hashtables.numbers.prettyprint" require-when
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: hashtables.numbers kernel prettyprint.custom ;
-
-IN: hashtables.numbers
-
-M: number-hashtable pprint-delims drop \ NH{ \ } ;
+++ /dev/null
-collections
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: arrays kernel grouping math math.hashcodes sequences
-tools.test ;
-
-{ t } [
- 12 dup >bignum 12.0 12 0 complex boa 4array
- [ number-hashcode ] map all-equal?
-] unit-test
-
-{ t } [
- 1.5 3/2 1.5 0 complex boa 3/2 0 complex boa 4array
- [ number-hashcode ] map all-equal?
-] unit-test
+++ /dev/null
-! Copyright (C) 2013 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: combinators kernel layouts math math.bitwise
-math.floating-point math.functions ;
-
-IN: math.hashcodes
-
-GENERIC: number-hashcode ( x -- h )
-
-<PRIVATE
-
-: P ( -- x )
- cell-bits 64 = 61 31 ? 2^ 1 - ; inline foldable
-
-: M ( -- x )
- cell-bits 1 - 2^ ; inline foldable
-
-: hash-fraction ( m n -- h )
-
- [ 2dup [ P mod zero? ] both? ] [
- [ P /i ] bi@
- ] while
-
- dup P mod zero? [
- 2drop 1/0.
- ] [
- over [
- [ abs P mod ] [ P 2 - P ^mod P mod ] bi* *
- ] dip 0 < [ neg ] when
- dup -1 = [ drop -2 ] when
- ] if ; inline
-
-PRIVATE>
-
-M: integer number-hashcode 1 hash-fraction ;
-
-M: ratio number-hashcode >fraction hash-fraction ;
-
-M: float number-hashcode ( x -- h )
- {
- { [ dup fp-nan? ] [ drop 0 ] }
- { [ dup fp-infinity? ] [ 0 > 314159 -314159 ? ] }
- [ double>ratio number-hashcode ]
- } cond ;
-
-M: complex number-hashcode ( x -- h )
- >rect [ number-hashcode ] bi@ 1000003 * +
- cell-bits on-bits bitand dup -1 = [ drop -2 ] when ;