]> gitweb.factorcode.org Git - factor.git/commitdiff
grouping: simplify since we always slice.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 15 Aug 2015 04:12:28 +0000 (21:12 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 15 Aug 2015 04:12:28 +0000 (21:12 -0700)
basis/grouping/grouping.factor

index 233d793483bc21f8f3f785ec26fd22efade18f99..b8aa266fb9be05efa23b3f1814a0e6040b25d3c0 100644 (file)
@@ -1,80 +1,62 @@
 ! Copyright (C) 2005, 2010 Slava Pestov, Joe Groff.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math math.order strings arrays vectors sequences
-sequences.private accessors fry combinators ;
+USING: accessors combinators fry kernel math math.order
+sequences sequences.private ;
 IN: grouping
 
 ERROR: groups-error seq group-size ;
+
 <PRIVATE
 
-MIXIN: chunking
+GENERIC: group@ ( n groups -- from to seq )
+
+TUPLE: chunking { seq read-only } { n read-only } ;
+
 INSTANCE: chunking sequence
 
-GENERIC: group@ ( n groups -- from to seq )
+M: chunking nth group@ <slice> ; inline
+
+M: chunking nth-unsafe group@ <slice-unsafe> ; inline
 
 M: chunking set-nth group@ <slice> 0 swap copy ;
-M: chunking like drop { } like ; inline
 
-MIXIN: subseq-chunking
-INSTANCE: subseq-chunking chunking
-INSTANCE: subseq-chunking sequence
+M: chunking like drop { } like ; inline
 
-M: subseq-chunking nth group@ subseq ; inline
+: check-groups ( seq n -- seq n )
+    dup 0 <= [ groups-error ] when ; inline
 
-MIXIN: slice-chunking
-INSTANCE: slice-chunking chunking
-INSTANCE: slice-chunking sequence
+: new-groups ( seq n class -- groups )
+    [ check-groups ] dip boa ; inline
 
-M: slice-chunking nth group@ <slice> ; inline
-M: slice-chunking nth-unsafe group@ <slice-unsafe> ; inline
+PRIVATE>
 
-MIXIN: abstract-groups
-INSTANCE: abstract-groups sequence
+TUPLE: groups < chunking ;
 
-M: abstract-groups length
+M: groups length
     [ seq>> length ] [ n>> ] bi [ + 1 - ] keep /i ; inline
 
-M: abstract-groups set-length
+M: groups set-length
     [ n>> * ] [ seq>> ] bi set-length ; inline
 
-M: abstract-groups group@
+M: groups group@
     [ n>> [ * dup ] keep + ] [ seq>> ] bi [ length min ] keep ; inline
 
-MIXIN: abstract-clumps
-INSTANCE: abstract-clumps sequence
+: <groups> ( seq n -- groups )
+    groups new-groups ; inline
+
+TUPLE: clumps < chunking ;
 
-M: abstract-clumps length
+M: clumps length
     dup seq>> length [ drop 0 ] [
         swap [ 1 + ] [ n>> ] bi* [-]
     ] if-zero ; inline
 
-M: abstract-clumps set-length
+M: clumps set-length
     [ n>> + 1 - ] [ seq>> ] bi set-length ; inline
 
-M: abstract-clumps group@
+M: clumps group@
     [ n>> over + ] [ seq>> ] bi ; inline
 
-TUPLE: chunking-seq { seq read-only } { n read-only } ;
-
-: check-groups ( seq n -- seq n )
-    dup 0 <= [ groups-error ] when ; inline
-
-: new-groups ( seq n class -- groups )
-    [ check-groups ] dip boa ; inline
-
-PRIVATE>
-
-TUPLE: groups < chunking-seq ;
-INSTANCE: groups slice-chunking
-INSTANCE: groups abstract-groups
-
-: <groups> ( seq n -- groups )
-    groups new-groups ; inline
-
-TUPLE: clumps < chunking-seq ;
-INSTANCE: clumps slice-chunking
-INSTANCE: clumps abstract-clumps
-
 : <clumps> ( seq n -- clumps )
     clumps new-groups ; inline
 
@@ -123,7 +105,10 @@ M: circular-slice virtual@
 
 C: <circular-slice> circular-slice
 
-TUPLE: circular-clumps < chunking-seq ;
+TUPLE: circular-clumps
+    { seq read-only }
+    { n read-only } ;
+
 INSTANCE: circular-clumps sequence
 
 M: circular-clumps length