aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/makamys/neodymium/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/makamys/neodymium/util')
-rw-r--r--src/main/java/makamys/neodymium/util/RecyclingList.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/main/java/makamys/neodymium/util/RecyclingList.java b/src/main/java/makamys/neodymium/util/RecyclingList.java
new file mode 100644
index 0000000..ea240bb
--- /dev/null
+++ b/src/main/java/makamys/neodymium/util/RecyclingList.java
@@ -0,0 +1,37 @@
+package makamys.neodymium.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Supplier;
+
+public class RecyclingList<T> {
+
+ private Supplier<T> constructor;
+
+ int nextIndex;
+ private List<T> list;
+
+ public RecyclingList(Supplier<T> constructor) {
+ this.constructor = constructor;
+ this.list = new ArrayList<T>();
+ }
+
+ public T get(int i) {
+ while(list.size() <= i) {
+ list.add(constructor.get());
+ }
+ return list.get(i);
+ }
+
+ public T next() {
+ return get(nextIndex++);
+ }
+
+ public void reset() {
+ nextIndex = 0;
+ }
+
+ public List<T> getAsList() {
+ return list.subList(0, nextIndex);
+ }
+}