]> gitweb.factorcode.org Git - factor.git/commitdiff
Removing multimehtod dependency in perisistent.heaps
authorDaniel Ehrenberg <littledan@Macintosh-103.local>
Sat, 6 Sep 2008 23:33:06 +0000 (01:33 +0200)
committerDaniel Ehrenberg <littledan@Macintosh-103.local>
Sat, 6 Sep 2008 23:33:06 +0000 (01:33 +0200)
basis/persistent/heaps/heaps.factor

index 81c9959f841b90c2d1dcb03e837170988fb1b614..6381b91dc31c3aa37dd4753d21effe71f6b43d74 100644 (file)
@@ -1,4 +1,4 @@
-USING: kernel accessors multi-methods locals combinators math arrays
+USING: kernel accessors locals combinators math arrays
 assocs namespaces sequences ;
 IN: persistent.heaps
 ! These are minheaps
@@ -36,14 +36,15 @@ PRIVATE>
 
 GENERIC: sift-down ( value prio left right -- heap )
 
-METHOD: sift-down { empty-heap empty-heap } <branch> ;
-
-METHOD: sift-down { singleton-heap empty-heap }
+: singleton-sift-down ( value prio singleton empty -- heap )
     3dup drop prio>> <= [ <branch> ] [
         drop -rot [ [ value>> ] [ prio>> ] bi ] 2dip
         <singleton-heap> <persistent-heap> <branch>
     ] if ;
 
+M: empty-heap sift-down 
+    over singleton-heap? [ singleton-sift-down ] [ <branch> ] if ;
+
 :: reroot-left ( value prio left right -- heap )
     left value>> left prio>>
     value prio left left>> left right>> sift-down
@@ -54,7 +55,7 @@ METHOD: sift-down { singleton-heap empty-heap }
     value prio right left>> right right>> sift-down
     <branch> ;
 
-METHOD: sift-down { branch branch }
+M: branch sift-down ! both arguments are branches
     3dup [ prio>> <= ] both-with? [ <branch> ] [
         2dup [ prio>> ] bi@ <= [ reroot-left ] [ reroot-right ] if
     ] if ;