]> gitweb.factorcode.org Git - factor.git/commitdiff
hash-sets.numbers: adding number-hashcode version of hash-sets.
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 17 Apr 2013 21:07:33 +0000 (14:07 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 17 Apr 2013 21:07:33 +0000 (14:07 -0700)
extra/hash-sets/numbers/authors.txt [new file with mode: 0644]
extra/hash-sets/numbers/numbers-tests.factor [new file with mode: 0644]
extra/hash-sets/numbers/numbers.factor [new file with mode: 0644]
extra/hash-sets/numbers/prettyprint/prettyprint.factor [new file with mode: 0644]

diff --git a/extra/hash-sets/numbers/authors.txt b/extra/hash-sets/numbers/authors.txt
new file mode 100644 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/extra/hash-sets/numbers/numbers-tests.factor b/extra/hash-sets/numbers/numbers-tests.factor
new file mode 100644 (file)
index 0000000..9a70984
--- /dev/null
@@ -0,0 +1,20 @@
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: hash-sets.numbers kernel sets tools.test ;
+
+IN: hash-sets.numbers.tests
+
+[ 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
+
diff --git a/extra/hash-sets/numbers/numbers.factor b/extra/hash-sets/numbers/numbers.factor
new file mode 100644 (file)
index 0000000..1066662
--- /dev/null
@@ -0,0 +1,36 @@
+! 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
+
+TUPLE: number-wrapper < wrapped-key ;
+
+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
+
+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
diff --git a/extra/hash-sets/numbers/prettyprint/prettyprint.factor b/extra/hash-sets/numbers/prettyprint/prettyprint.factor
new file mode 100644 (file)
index 0000000..55188e1
--- /dev/null
@@ -0,0 +1,8 @@
+! 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{ \ } ;