From 0e425e70d0de47aa604f8c6065da574231a18a1e Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sat, 6 Apr 2013 14:13:00 -0700 Subject: [PATCH] hash-sets.sequences: adding sequence hashsets. --- basis/hash-sets/sequences/authors.txt | 1 + .../sequences/prettyprint/prettyprint.factor | 8 +++++ .../sequences/sequences-tests.factor | 21 +++++++++++ basis/hash-sets/sequences/sequences.factor | 36 +++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 basis/hash-sets/sequences/authors.txt create mode 100644 basis/hash-sets/sequences/prettyprint/prettyprint.factor create mode 100644 basis/hash-sets/sequences/sequences-tests.factor create mode 100644 basis/hash-sets/sequences/sequences.factor diff --git a/basis/hash-sets/sequences/authors.txt b/basis/hash-sets/sequences/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/basis/hash-sets/sequences/authors.txt @@ -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 index 0000000000..b97a9d44c7 --- /dev/null +++ b/basis/hash-sets/sequences/prettyprint/prettyprint.factor @@ -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 index 0000000000..18284d178a --- /dev/null +++ b/basis/hash-sets/sequences/sequences-tests.factor @@ -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" SHS{ "asdf" } in? ] unit-test + +[ SHS{ "asdf" } ] [ + 0 4 "asdf" SHS{ "asdf" } [ adjoin ] keep +] unit-test + +[ t ] [ + SHS{ } clone 0 4 "asdf" 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 index 0000000000..e028ca5f45 --- /dev/null +++ b/basis/hash-sets/sequences/sequences.factor @@ -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 + +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 ; + +: ( n -- shash-set ) + sequence-hash-set boa ; inline + +M: sequence-hash-set wrap-key drop ; + +M: sequence-hash-set clone + underlying>> clone sequence-hash-set boa ; inline + +: >sequence-hash-set ( members -- shash-set ) + [ ] map >hash-set sequence-hash-set boa ; + +SYNTAX: SHS{ \ } [ >sequence-hash-set ] parse-literal ; + +{ "hash-sets.sequences" "prettyprint" } "hash-sets.sequences.prettyprint" require-when