diff --git a/src/main/java/com/mykola2312/retracker/bencode/BValue.java b/src/main/java/com/mykola2312/retracker/bencode/BValue.java index 8b6726f..9920d8a 100644 --- a/src/main/java/com/mykola2312/retracker/bencode/BValue.java +++ b/src/main/java/com/mykola2312/retracker/bencode/BValue.java @@ -1,6 +1,15 @@ package com.mykola2312.retracker.bencode; -abstract public class BValue { +import java.util.Iterator; + +/* Base class for every type of bencode value, as tree nodes, + * simple types like integer or string will have next pointing + * to next sibling and have no child, where list's child points + * to linked values - items of list. In dict situation, child points + * to linked list of keys, where each key has child - value + */ + +abstract public class BValue implements Iterable { private BType type; private BValue next = null; private BValue child = null; @@ -20,4 +29,8 @@ abstract public class BValue { public BValue getChild() { return child; } + + public Iterator iterator() { + return new BValueIterator(child); + } } \ No newline at end of file diff --git a/src/main/java/com/mykola2312/retracker/bencode/BValueIterator.java b/src/main/java/com/mykola2312/retracker/bencode/BValueIterator.java new file mode 100644 index 0000000..7b65eaa --- /dev/null +++ b/src/main/java/com/mykola2312/retracker/bencode/BValueIterator.java @@ -0,0 +1,19 @@ +package com.mykola2312.retracker.bencode; + +import java.util.Iterator; + +public class BValueIterator implements Iterator { + private BValue node; + public BValueIterator(BValue head) { + this.node = head; + } + + public boolean hasNext() { + return node != null && node.getNext() != null; + } + + public BValue next() { + node = node.getNext(); + return node; + } +} diff --git a/src/main/java/com/mykola2312/retracker/bencode/error/BError.java b/src/main/java/com/mykola2312/retracker/bencode/error/BError.java new file mode 100644 index 0000000..0e51e23 --- /dev/null +++ b/src/main/java/com/mykola2312/retracker/bencode/error/BError.java @@ -0,0 +1,14 @@ +package com.mykola2312.retracker.bencode.error; + +import com.mykola2312.retracker.bencode.BValue; + +public class BError extends Exception { + private static final long serialVersionUID = 6950892783320917930L; + + public BValue node; + + public BError(BValue node, String message) { + super(message); + this.node = node; + } +} diff --git a/src/main/java/com/mykola2312/retracker/bencode/error/BErrorNoChildren.java b/src/main/java/com/mykola2312/retracker/bencode/error/BErrorNoChildren.java new file mode 100644 index 0000000..c286da0 --- /dev/null +++ b/src/main/java/com/mykola2312/retracker/bencode/error/BErrorNoChildren.java @@ -0,0 +1,11 @@ +package com.mykola2312.retracker.bencode.error; + +import com.mykola2312.retracker.bencode.BValue; + +public class BErrorNoChildren extends BError { + private static final long serialVersionUID = -4503679050993811843L; + + public BErrorNoChildren(BValue node) { + super(node, "Node has no children"); + } +}