summaryrefslogtreecommitdiffstats
path: root/src/org/uic/barcode/asn1/datatypes/Asn1VarSizeBitstring.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/uic/barcode/asn1/datatypes/Asn1VarSizeBitstring.java')
-rw-r--r--src/org/uic/barcode/asn1/datatypes/Asn1VarSizeBitstring.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/org/uic/barcode/asn1/datatypes/Asn1VarSizeBitstring.java b/src/org/uic/barcode/asn1/datatypes/Asn1VarSizeBitstring.java
new file mode 100644
index 0000000..c07f7f0
--- /dev/null
+++ b/src/org/uic/barcode/asn1/datatypes/Asn1VarSizeBitstring.java
@@ -0,0 +1,58 @@
+package org.uic.barcode.asn1.datatypes;
+
+import java.util.AbstractList;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.Objects;
+
+/**
+ * Convenience class for Bitstrings of variable size.
+ * For UPER, {@code List<Boolean>} works just as well.
+ */
+public class Asn1VarSizeBitstring extends AbstractList<Boolean> {
+
+ private final BitSet backing;
+
+ @Override public Boolean get(int index) {
+ return backing.get(index);
+ }
+
+ @Override public int size() {
+ return backing.length();
+ }
+
+ public Asn1VarSizeBitstring(Collection<Boolean> coll) {
+ backing = new BitSet();
+ int bitIndex = 0;
+ for (Boolean b : coll) {
+ backing.set(bitIndex, b);
+ bitIndex++;
+ }
+ }
+
+ public Asn1VarSizeBitstring(BitSet bitset) {
+ backing = (BitSet) bitset.clone();
+ }
+
+ protected void setBit(int bitIndex, boolean value) {
+ backing.set(bitIndex, value);
+ }
+
+ public boolean getBit(int bitIndex) {
+ return backing.get(bitIndex);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+ Asn1VarSizeBitstring booleen = (Asn1VarSizeBitstring) o;
+ return Objects.equals(backing, booleen.backing);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), backing);
+ }
+}