summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-09-17 13:47:52 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-09-17 13:47:52 -0300
commit322208c00b349bb3e37aa6c0bac9df23dfceb25e (patch)
treec84be2dd119f11bd477d8e21fa9c1ee65ad1d25b /base/src/main/java/bjc
parent454816ab9ede978a3081020e9ba5b4d9d2f7c483 (diff)
Add DefaultList
A DefaultList is a list that returns a given default value for OOB indexes, instead of an exception
Diffstat (limited to 'base/src/main/java/bjc')
-rw-r--r--base/src/main/java/bjc/utils/esodata/DefaultList.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/esodata/DefaultList.java b/base/src/main/java/bjc/utils/esodata/DefaultList.java
new file mode 100644
index 0000000..235a1a8
--- /dev/null
+++ b/base/src/main/java/bjc/utils/esodata/DefaultList.java
@@ -0,0 +1,80 @@
+package bjc.utils.esodata;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A list that has a default value that out-of-bounds accesses return.
+ *
+ * @author Ben Culkin
+ */
+public class DefaultList<ValueType> extends AbstractList<ValueType> {
+ /*
+ * @NOTE 9/17/18
+ *
+ * A possible feature to add would be the ability to set a 'default
+ * index', so that the default value is 'whatever is at that list index'
+ *
+ * Of course, this would cause an exception if that index was out of
+ * bounds, but what are you going to do?
+ */
+
+
+ private ValueType defVal;
+
+ private List<ValueType> backing;
+
+ public DefaultList() {
+ this(new ArrayList<>(), null);
+ }
+
+ public DefaultList(ValueType defVal) {
+ this(new ArrayList<>(), defVal);
+ }
+
+ public DefaultList(List<ValueType> backer) {
+ this(backer, null);
+ }
+
+ public DefaultList(List<ValueType> backer, ValueType defVal) {
+ this.defVal = defVal;
+
+ this.backing = backer;
+ }
+
+ public ValueType getDefault() {
+ return defVal;
+ }
+
+ public void setDefault(ValueType defVal) {
+ this.defVal = defVal;
+ }
+
+ @Override
+ public ValueType get(int idx) {
+ if (idx < 0 || idx >= backing.size()) return defVal;
+
+ return backing.get(idx);
+ }
+
+ @Override
+ public int size() {
+ return backing.size();
+ }
+
+ @Override
+ public ValueType set(int idx, ValueType val) {
+ return backing.set(idx, val);
+ }
+
+ @Override
+ public void add(int idx, ValueType val) {
+ backing.add(idx, val);
+ }
+
+ @Override
+ public ValueType remove(int idx) {
+ return backing.remove(idx);
+ }
+}