aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/util/tuples
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/util/tuples')
-rw-r--r--src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java44
-rw-r--r--src/uk/ac/ox/cs/pagoda/util/tuples/TupleBuilder.java25
2 files changed, 69 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java b/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java
new file mode 100644
index 0000000..3e72748
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java
@@ -0,0 +1,44 @@
1package uk.ac.ox.cs.pagoda.util.tuples;
2
3import java.util.ArrayList;
4import java.util.Iterator;
5import java.util.Spliterator;
6import java.util.function.Consumer;
7
8public class Tuple<T> implements Iterable<T> {
9
10 final ArrayList<T> elements = new ArrayList<>();
11
12 Tuple() { }
13
14 public Tuple(T... elements) {
15 for(T t: elements) {
16 this.elements.add(t);
17 }
18 }
19
20 public Tuple(Iterable<T> iterable) {
21 for (T t : iterable) {
22 this.elements.add(t);
23 }
24 }
25
26 public T get(int i) {
27 return elements.get(i);
28 }
29
30 @Override
31 public Iterator<T> iterator() {
32 return elements.iterator();
33 }
34
35 @Override
36 public void forEach(Consumer<? super T> action) {
37 elements.forEach(action);
38 }
39
40 @Override
41 public Spliterator<T> spliterator() {
42 return elements.spliterator();
43 }
44}
diff --git a/src/uk/ac/ox/cs/pagoda/util/tuples/TupleBuilder.java b/src/uk/ac/ox/cs/pagoda/util/tuples/TupleBuilder.java
new file mode 100644
index 0000000..aacd15e
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/util/tuples/TupleBuilder.java
@@ -0,0 +1,25 @@
1package uk.ac.ox.cs.pagoda.util.tuples;
2
3/**
4 * Allows to create an immutable <tt>Tuple</tt> in a non-atomic way.
5 * It can create only one <tt>Tuple</tt>.
6 * */
7public class TupleBuilder<T> {
8
9 private Tuple tuple = new Tuple();
10
11 private boolean building = true;
12
13 public boolean add(T t) {
14 if(building) tuple.elements.add(t);
15 return building;
16 }
17
18 public Tuple<T> create() {
19 if(building) {
20 building = false;
21 return tuple;
22 }
23 return null;
24 }
25}