From 37bb86e20d542a38614f36dfefda194d1436f11b Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Sun, 15 Dec 2019 02:09:37 +0100 Subject: Fixed SSList Iterators Signed-off-by: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Former-commit-id: ac9f5e451758b0e50ae33e6fc02985f77d4e4596 --- .../bartworks/util/selfsortinglist/SSList.java | 6 +++--- .../util/selfsortinglist/SSListIterators.java | 25 ++++++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSList.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSList.java index 11ce5ebafc..769b32638d 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSList.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSList.java @@ -197,7 +197,7 @@ public class SSList implements List, Deque, Set { // <0,1,3> N<0,3,2> <3,2,4> <2,4,5> } - private SSListNode getNode(int index) { + SSListNode getNode(int index) { if (index <= (size / 2)) { SSListNode x = head; for (int i = 0; i < index; i++) @@ -337,12 +337,12 @@ public class SSList implements List, Deque, Set { @Override public ListIterator listIterator() { - return new SSListIterators.SSListListIterator<>(head,tail); + return new SSListIterators.SSListListIterator<>(head,tail,false); } @Override public ListIterator listIterator(int index) { - return null; + return new SSListIterators.SSListListIterator<>(this,index); } @Override diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSListIterators.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSListIterators.java index c3f3aba347..83b3c66046 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSListIterators.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/util/selfsortinglist/SSListIterators.java @@ -35,15 +35,24 @@ public class SSListIterators { final SSListNode tail; SSListNode current; int counter = 0; - public SSListListIterator(SSListNode head,SSListNode tail) { + boolean reverse; + public SSListListIterator(SSListNode head,SSListNode tail, boolean reverse) { this.head = head; this.tail = tail; - current = null; + current = reverse ? tail : head; + this.reverse = reverse; + } + + public SSListListIterator(SSList list, int index) { + this.head = list.head; + this.tail = list.tail; + current = list.getNode(index); + counter = index; } @Override public boolean hasNext() { - return head != current; + return reverse ? head != current : tail != current; } @Override @@ -56,7 +65,7 @@ public class SSListIterators { @Override public boolean hasPrevious() { - return tail != current; + return !reverse ? head != current : tail != current; } @Override @@ -97,8 +106,7 @@ public class SSListIterators { final SSListNode head; SSListNode current; public SSListIterator(SSListNode head) { - this.head = head; - current = null; + this.head = this.current = head; } @Override @@ -118,9 +126,8 @@ public class SSListIterators { final SSListNode tail; SSListNode current; - public SSListReverseIterator(SSListNode head) { - this.tail = head; - current = null; + public SSListReverseIterator(SSListNode tail) { + this.tail = this.current = tail; } @Override -- cgit