summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/esodata/DefaultList.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2019-07-02 18:05:22 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2019-07-02 18:05:22 -0400
commit843329de434bb334d90927c4d22345373a388530 (patch)
treeb0ad1f764bd29ff43841e1095a5b58194c20cb37 /src/main/java/bjc/esodata/DefaultList.java
parentac36f171a3cebb0993cc28548635e3f654f8e325 (diff)
Rename package root
The package root is now bjc, not io.github.bculkin2442.
Diffstat (limited to 'src/main/java/bjc/esodata/DefaultList.java')
-rw-r--r--src/main/java/bjc/esodata/DefaultList.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/main/java/bjc/esodata/DefaultList.java b/src/main/java/bjc/esodata/DefaultList.java
new file mode 100644
index 0000000..e4b2806
--- /dev/null
+++ b/src/main/java/bjc/esodata/DefaultList.java
@@ -0,0 +1,116 @@
+package bjc.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
+ * @param <ValueType>
+ * The type of the values contained in the list.
+ */
+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;
+
+ /**
+ * Create a new DefaultList.
+ */
+ public DefaultList() {
+ this(new ArrayList<>(), null);
+ }
+
+ /**
+ * Create a new DefaultList, with a set default value.
+ *
+ * @param defVal
+ * The default value for the list.
+ */
+ public DefaultList(ValueType defVal) {
+ this(new ArrayList<>(), defVal);
+ }
+
+ /**
+ * Create a new DefaultList, with a specific backing list.
+ *
+ * @param backer
+ * The backing list to use.
+ *
+ */
+ public DefaultList(List<ValueType> backer) {
+ this(backer, null);
+ }
+
+ /**
+ * Create a new DefaultList, with a set default value.
+ *
+ * @param backer
+ * The backing list to use.
+ *
+ * @param defVal
+ * The default value for the list.
+ */
+ public DefaultList(List<ValueType> backer, ValueType defVal) {
+ this.defVal = defVal;
+
+ this.backing = backer;
+ }
+
+ /**
+ * Get the default value.
+ *
+ * @return The default value.
+ */
+ public ValueType getDefault() {
+ return defVal;
+ }
+
+ /**
+ * Set the default value.
+ *
+ * @param defVal The default value.
+ */
+ 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);
+ }
+}