From a3c6df99bcde3e78366412cdf8a4fbf31c24a3ba Mon Sep 17 00:00:00 2001
From: Daniel Ehrenberg <ehrenbed@carleton.edu>
Date: Thu, 10 Jan 2008 21:49:42 -0500
Subject: [PATCH] Adding extra/assocs

---
 extra/assocs/lib/authors.txt |  1 +
 extra/assocs/lib/lib.factor  | 24 ++++++++++++++++++++++++
 extra/assocs/lib/tags.txt    |  1 +
 3 files changed, 26 insertions(+)
 create mode 100644 extra/assocs/lib/authors.txt
 create mode 100644 extra/assocs/lib/lib.factor
 create mode 100644 extra/assocs/lib/tags.txt

diff --git a/extra/assocs/lib/authors.txt b/extra/assocs/lib/authors.txt
new file mode 100644
index 0000000000..6cfd5da273
--- /dev/null
+++ b/extra/assocs/lib/authors.txt
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/extra/assocs/lib/lib.factor b/extra/assocs/lib/lib.factor
new file mode 100644
index 0000000000..b71982f1f2
--- /dev/null
+++ b/extra/assocs/lib/lib.factor
@@ -0,0 +1,24 @@
+USING: assocs kernel vectors sequences ;
+IN: assocs.lib
+
+: insert-at ( value key assoc -- )
+    [ ?push ] change-at ;
+
+: >set ( seq -- hash )
+    [ dup ] H{ } map>assoc ;
+
+: ref-hash ( table key -- value ) swap at ;
+
+! set-hash with alternative stack effects
+
+: put-hash* ( table key value -- ) swap rot set-at ;
+
+: put-hash ( table key value -- table ) swap pick set-at ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set-hash-stack ( value key seq -- )
+  dupd [ key? ] curry* find-last nip set-at ;
+
+: at-default ( key assoc -- value/key )
+    dupd at [ nip ] when* ;
diff --git a/extra/assocs/lib/tags.txt b/extra/assocs/lib/tags.txt
new file mode 100644
index 0000000000..42d711b32b
--- /dev/null
+++ b/extra/assocs/lib/tags.txt
@@ -0,0 +1 @@
+collections