]> gitweb.factorcode.org Git - factor.git/commitdiff
Using inheritance instead of delegation in digraphs
authorAlex Chapman <chapman.alex@gmail.com>
Wed, 1 Oct 2008 00:57:15 +0000 (10:57 +1000)
committerAlex Chapman <chapman.alex@gmail.com>
Wed, 1 Oct 2008 00:57:15 +0000 (10:57 +1000)
extra/digraphs/authors.txt [new file with mode: 0644]
extra/digraphs/digraphs-tests.factor [new file with mode: 0644]
extra/digraphs/digraphs.factor [new file with mode: 0755]
extra/digraphs/summary.txt [new file with mode: 0644]
extra/digraphs/tags.txt [new file with mode: 0644]
unmaintained/digraphs/authors.txt [deleted file]
unmaintained/digraphs/digraphs-tests.factor [deleted file]
unmaintained/digraphs/digraphs.factor [deleted file]
unmaintained/digraphs/summary.txt [deleted file]
unmaintained/digraphs/tags.txt [deleted file]

diff --git a/extra/digraphs/authors.txt b/extra/digraphs/authors.txt
new file mode 100644 (file)
index 0000000..e9c193b
--- /dev/null
@@ -0,0 +1 @@
+Alex Chapman
diff --git a/extra/digraphs/digraphs-tests.factor b/extra/digraphs/digraphs-tests.factor
new file mode 100644 (file)
index 0000000..64589c1
--- /dev/null
@@ -0,0 +1,11 @@
+USING: digraphs kernel sequences tools.test ;
+IN: digraphs.tests
+
+: test-digraph ( -- digraph )
+    <digraph>
+    { { "one" 1 } { "two" 2 } { "three" 3 } { "four" 4 } { "five" 5 } }
+    [ first2 pick add-vertex ] each
+    { { "one" "three" } { "one" "four" } { "two" "three" } { "two" "one" } { "three" "four" } }
+    [ first2 pick add-edge ] each ;
+
+[ 5 ] [ test-digraph topological-sort length ] unit-test
diff --git a/extra/digraphs/digraphs.factor b/extra/digraphs/digraphs.factor
new file mode 100755 (executable)
index 0000000..5ccc0d5
--- /dev/null
@@ -0,0 +1,51 @@
+! Copyright (C) 2008 Alex Chapman
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors assocs hashtables hashtables.private kernel sequences vectors ;
+IN: digraphs
+
+TUPLE: digraph < hashtable ;
+
+: <digraph> ( -- digraph )
+    0 digraph new [ reset-hash ] keep ;
+
+TUPLE: vertex value edges ;
+
+: <vertex> ( value -- vertex )
+    V{ } clone vertex boa ;
+
+: add-vertex ( key value digraph -- )
+    [ <vertex> swap ] dip set-at ;
+
+: children ( key digraph -- seq )
+    at edges>> ;
+
+: @edges ( from to digraph -- to edges ) swapd at edges>> ;
+: add-edge ( from to digraph -- ) @edges push ;
+: delete-edge ( from to digraph -- ) @edges delete ;
+
+: delete-to-edges ( to digraph -- )
+    [ nip dupd edges>> delete ] assoc-each drop ;
+
+: delete-vertex ( key digraph -- )
+    2dup delete-at delete-to-edges ;
+
+: unvisited? ( unvisited key -- ? ) swap key? ;
+: visited ( unvisited key -- ) swap delete-at ;
+
+DEFER: (topological-sort)
+: visit-children ( seq unvisited key -- seq unvisited )
+    over children [ (topological-sort) ] each ;
+
+: (topological-sort) ( seq unvisited key -- seq unvisited )
+    2dup unvisited? [
+        [ visit-children ] keep 2dup visited pick push
+    ] [
+        drop
+    ] if ;
+
+: topological-sort ( digraph -- seq )
+    dup clone V{ } clone spin
+    [ drop (topological-sort) ] assoc-each drop reverse ;
+
+: topological-sorted-values ( digraph -- seq )
+    dup topological-sort swap [ at value>> ] curry map ;
diff --git a/extra/digraphs/summary.txt b/extra/digraphs/summary.txt
new file mode 100644 (file)
index 0000000..78e5a53
--- /dev/null
@@ -0,0 +1 @@
+Simple directed graph implementation for topological sorting
diff --git a/extra/digraphs/tags.txt b/extra/digraphs/tags.txt
new file mode 100644 (file)
index 0000000..42d711b
--- /dev/null
@@ -0,0 +1 @@
+collections
diff --git a/unmaintained/digraphs/authors.txt b/unmaintained/digraphs/authors.txt
deleted file mode 100644 (file)
index e9c193b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Alex Chapman
diff --git a/unmaintained/digraphs/digraphs-tests.factor b/unmaintained/digraphs/digraphs-tests.factor
deleted file mode 100644 (file)
index b113c18..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-USING: digraphs kernel sequences tools.test ;
-IN: digraphs.tests
-
-: test-digraph ( -- digraph )
-    <digraph>
-    { { "one" 1 } { "two" 2 } { "three" 3 } { "four" 4 } { "five" 5 } } [ first2 pick add-vertex ] each
-    { { "one" "three" } { "one" "four" } { "two" "three" } { "two" "one" } { "three" "four" } } [ first2 pick add-edge ] each ;
-
-[ 5 ] [ test-digraph topological-sort length ] unit-test
diff --git a/unmaintained/digraphs/digraphs.factor b/unmaintained/digraphs/digraphs.factor
deleted file mode 100755 (executable)
index 7d56c96..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-! Copyright (C) 2008 Alex Chapman
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs kernel sequences vectors ;
-IN: digraphs
-
-TUPLE: digraph ;
-TUPLE: vertex value edges ;
-
-: <digraph> ( -- digraph )
-    digraph new H{ } clone over set-delegate ;
-
-: <vertex> ( value -- vertex )
-    V{ } clone vertex boa ;
-
-: add-vertex ( key value digraph -- )
-    >r <vertex> swap r> set-at ;
-
-: children ( key digraph -- seq )
-    at edges>> ;
-
-: @edges ( from to digraph -- to edges ) swapd at edges>> ;
-: add-edge ( from to digraph -- ) @edges push ;
-: delete-edge ( from to digraph -- ) @edges delete ;
-
-: delete-to-edges ( to digraph -- )
-    [ nip dupd edges>> delete ] assoc-each drop ;
-
-: delete-vertex ( key digraph -- )
-    2dup delete-at delete-to-edges ;
-
-: unvisited? ( unvisited key -- ? ) swap key? ;
-: visited ( unvisited key -- ) swap delete-at ;
-
-DEFER: (topological-sort)
-: visit-children ( seq unvisited key -- seq unvisited )
-    over children [ (topological-sort) ] each ;
-
-: (topological-sort) ( seq unvisited key -- seq unvisited )
-    2dup unvisited? [
-        [ visit-children ] keep 2dup visited pick push
-    ] [
-        drop
-    ] if ;
-
-: topological-sort ( digraph -- seq )
-    dup clone V{ } clone spin
-    [ drop (topological-sort) ] assoc-each drop reverse ;
-
-: topological-sorted-values ( digraph -- seq )
-    dup topological-sort swap [ at value>> ] curry map ;
diff --git a/unmaintained/digraphs/summary.txt b/unmaintained/digraphs/summary.txt
deleted file mode 100644 (file)
index 78e5a53..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Simple directed graph implementation for topological sorting
diff --git a/unmaintained/digraphs/tags.txt b/unmaintained/digraphs/tags.txt
deleted file mode 100644 (file)
index 42d711b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-collections