]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.padded: adding virtual padded sequences.
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 4 Nov 2020 18:25:53 +0000 (10:25 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 4 Nov 2020 18:25:53 +0000 (10:25 -0800)
extra/sequences/padded/authors.txt [new file with mode: 0644]
extra/sequences/padded/padded-tests.factor [new file with mode: 0644]
extra/sequences/padded/padded.factor [new file with mode: 0644]
extra/sequences/padded/summary.txt [new file with mode: 0644]
extra/sequences/padded/tags.txt [new file with mode: 0644]

diff --git a/extra/sequences/padded/authors.txt b/extra/sequences/padded/authors.txt
new file mode 100644 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/extra/sequences/padded/padded-tests.factor b/extra/sequences/padded/padded-tests.factor
new file mode 100644 (file)
index 0000000..f9dc25a
--- /dev/null
@@ -0,0 +1,9 @@
+! Copyright (C) 2020 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+USING: arrays sequences.padded tools.test ;
+
+{ { 1 2 3 } } [ { 1 2 3 } 3 f <padded-tail> >array ] unit-test
+{ { 1 2 3 f f } } [ { 1 2 3 } 5 f <padded-tail> >array ] unit-test
+
+{ { 1 2 3 } } [ { 1 2 3 } 3 f <padded-head> >array ] unit-test
+{ { f f 1 2 3 } } [ { 1 2 3 } 5 f <padded-head> >array ] unit-test
diff --git a/extra/sequences/padded/padded.factor b/extra/sequences/padded/padded.factor
new file mode 100644 (file)
index 0000000..09af35d
--- /dev/null
@@ -0,0 +1,30 @@
+! Copyright (C) 2020 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+USING: accessors arrays kernel math math.order sequences
+sequences.private ;
+IN: sequences.padded
+
+TUPLE: padded
+{ underlying sequence read-only }
+{ length integer read-only }
+{ elt object read-only } ;
+
+TUPLE: padded-tail < padded ;
+TUPLE: padded-head < padded ;
+
+C: <padded-tail> padded-tail
+C: <padded-head> padded-head
+
+M: padded length
+    [ underlying>> length ] [ length>> ] bi max ;
+
+M: padded-tail nth-unsafe
+    [ underlying>> ] keep 2over bounds-check?
+    [ drop nth-unsafe ] [ 2nip elt>> ] if ;
+
+M: padded-head nth-unsafe
+    [ [ length>> ] [ underlying>> ] bi [ length [-] - ] keep ] keep
+    2over bounds-check? [ drop nth ] [ 2nip elt>> ] if ;
+
+INSTANCE: padded immutable-sequence
+
diff --git a/extra/sequences/padded/summary.txt b/extra/sequences/padded/summary.txt
new file mode 100644 (file)
index 0000000..ce2141e
--- /dev/null
@@ -0,0 +1 @@
+Virtual "padded" sequences
diff --git a/extra/sequences/padded/tags.txt b/extra/sequences/padded/tags.txt
new file mode 100644 (file)
index 0000000..b5e4471
--- /dev/null
@@ -0,0 +1,2 @@
+collections
+sequences