1 package uk.co.jezuk.mango.iterators; 2 3 13 public class BoundedIterator implements java.util.Iterator  14 { 15 22 public BoundedIterator(java.util.Iterator iterator, int start, int end) 23 { 24 iter_ = new iteratorWrapper(iterator, start, end); 25 } 27 37 public BoundedIterator(java.util.List list, int start, int end) 38 { 39 iter_ = new listIterator(list, start, end); 40 } 42 public boolean hasNext() 43 { 44 return iter_.hasNext(); 45 } 47 public Object next() 48 { 49 return iter_.next(); 50 } 52 public void remove() 53 { 54 iter_.remove(); 55 } 57 private java.util.Iterator iter_; 58 59 static private void checkConstraints(int start, int end) 61 { 62 if(start < 0) 63 throw new IndexOutOfBoundsException ("start < 0"); 64 if(end < 0) 65 throw new IndexOutOfBoundsException ("end < 0"); 66 if(start > end) 67 throw new IndexOutOfBoundsException ("start > end"); 68 } 70 static private class iteratorWrapper implements java.util.Iterator  71 { 72 iteratorWrapper(java.util.Iterator iterator, int start, int end) 73 { 74 BoundedIterator.checkConstraints(start, end); 75 76 iter_ = iterator; 77 for(index_ = 0; iter_.hasNext() && index_ < start; ++index_, iter_.next()) 78 ; 79 80 end_ = iter_.hasNext() ? end : index_; 81 } 83 public boolean hasNext() 84 { 85 end_ = iter_.hasNext() ? end_ : index_; 86 return (index_ < end_); 87 } 89 public Object next() 90 { 91 ++index_; 92 return iter_.next(); 93 } 95 public void remove() 96 { 97 iter_.remove(); 98 } 100 private java.util.Iterator iter_; 101 private int index_; 102 private int end_; 103 } 105 static private class listIterator implements java.util.Iterator  106 { 107 listIterator(java.util.List list, int start, int end) 108 { 109 BoundedIterator.checkConstraints(start, end); 110 111 list_ = list; 112 index_ = start; 113 end_ = end; 114 115 if(end_ > list_.size()) 116 end_ = list.size(); 117 } 119 public boolean hasNext() 120 { 121 return (index_ < end_); 122 } 124 public Object next() 125 { 126 return list_.get(index_++); 127 } 129 public void remove() 130 { 131 list_.remove(index_ - 1); 132 } 134 private java.util.List list_; 135 private int index_; 136 private int end_; 137 } } | Popular Tags |