]> gitweb.factorcode.org Git - factor.git/commitdiff
hash-sets.sequences: adding sequence hashsets.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 6 Apr 2013 21:13:00 +0000 (14:13 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 6 Apr 2013 21:14:01 +0000 (14:14 -0700)
basis/hash-sets/sequences/authors.txt [new file with mode: 0644]
basis/hash-sets/sequences/prettyprint/prettyprint.factor [new file with mode: 0644]
basis/hash-sets/sequences/sequences-tests.factor [new file with mode: 0644]
basis/hash-sets/sequences/sequences.factor [new file with mode: 0644]

diff --git a/basis/hash-sets/sequences/authors.txt b/basis/hash-sets/sequences/authors.txt
new file mode 100644 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/basis/hash-sets/sequences/prettyprint/prettyprint.factor b/basis/hash-sets/sequences/prettyprint/prettyprint.factor
new file mode 100644 (file)
index 0000000..b97a9d4
--- /dev/null
@@ -0,0 +1,8 @@
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: hash-sets.sequences kernel prettyprint.custom ;
+
+IN: hash-sets.sequences.prettyprint
+
+M: sequence-hash-set pprint-delims drop \ SHS{ \ } ;
diff --git a/basis/hash-sets/sequences/sequences-tests.factor b/basis/hash-sets/sequences/sequences-tests.factor
new file mode 100644 (file)
index 0000000..18284d1
--- /dev/null
@@ -0,0 +1,21 @@
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: hash-sets.sequences kernel literals sequences sets
+tools.test ;
+
+IN: hash-sets.sequences.tests
+
+[ t ] [ 0 4 "asdf" <slice> SHS{ "asdf" } in? ] unit-test
+
+[ SHS{ "asdf" } ] [
+    0 4 "asdf" <slice> SHS{ "asdf" } [ adjoin ] keep
+] unit-test
+
+[ t ] [
+    SHS{ } clone 0 4 "asdf" <slice> over adjoin
+    "asdf" swap in?
+] unit-test
+
+[ { "asdf" } ] [ SHS{ "asdf" } members ] unit-test
+
diff --git a/basis/hash-sets/sequences/sequences.factor b/basis/hash-sets/sequences/sequences.factor
new file mode 100644 (file)
index 0000000..e028ca5
--- /dev/null
@@ -0,0 +1,36 @@
+! Copyright (C) 2013 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: accessors combinators hash-sets hash-sets.wrapped kernel
+parser sequences sets vocabs.loader ;
+
+IN: hash-sets.sequences
+
+TUPLE: sequence-wrapper < wrapped-key ;
+
+C: <sequence-wrapper> sequence-wrapper
+
+M: sequence-wrapper equal?
+    over sequence-wrapper?
+    [ [ underlying>> ] bi@ sequence= ]
+    [ 2drop f ] if ; inline
+
+M: sequence-wrapper hashcode*
+    underlying>> [ sequence-hashcode ] recursive-hashcode ; inline
+
+TUPLE: sequence-hash-set < wrapped-hash-set ;
+
+: <sequence-hash-set> ( n -- shash-set )
+    <hash-set> sequence-hash-set boa ; inline
+
+M: sequence-hash-set wrap-key drop <sequence-wrapper> ;
+
+M: sequence-hash-set clone
+    underlying>> clone sequence-hash-set boa ; inline
+
+: >sequence-hash-set ( members -- shash-set )
+    [ <sequence-wrapper> ] map >hash-set sequence-hash-set boa ;
+
+SYNTAX: SHS{ \ } [ >sequence-hash-set ] parse-literal ;
+
+{ "hash-sets.sequences" "prettyprint" } "hash-sets.sequences.prettyprint" require-when