annotate src/main/java/fj/data/fingertrees/Four.java @ 0:fe80c1edf1be

add getLoop
author tatsuki
date Fri, 20 Mar 2015 21:04:03 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
1 package fj.data.fingertrees;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
2
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
3 import fj.data.vector.V4;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
4 import fj.F;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
5
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
6 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
7 * A four-element prefix or suffix of a finger tree.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
8 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
9 public final class Four<V, A> extends Digit<V, A> {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
10 private final V4<A> as;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
11
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
12 Four(final Measured<V, A> m, final V4<A> as) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
13 super(m);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
14 this.as = as;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
15 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
16
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
17 public <B> B foldRight(final F<A, F<B, B>> aff, final B z) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
18 return aff.f(as._1()).f(aff.f(as._2()).f(aff.f(as._3()).f(aff.f(as._4()).f(z))));
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
19 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
20
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
21 public <B> B foldLeft(final F<B, F<A, B>> bff, final B z) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
22 return as.toStream().foldLeft(bff, z);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
23 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
24
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
25 @Override public <B> B match(
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
26 final F<One<V, A>, B> one, final F<Two<V, A>, B> two, final F<Three<V, A>, B> three,
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
27 final F<Four<V, A>, B> four) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
28 return four.f(this);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
29 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
30
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
31 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
32 * Returns the elements of this digit as a vector.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
33 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
34 * @return the elements of this digit as a vector.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
35 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
36 public V4<A> values() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
37 return as;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
38 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
39 }