00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 package de.picana.clusterer;
00014
00015 import java.util.*;
00016
00017
00024 public class IndexListIterator {
00025
00026 private ArrayList ref_list;
00027 private ArrayList iter_list;
00028 private int[] index_first;
00029 private int[] index_last;
00030 private int index;
00031 private int component;
00032 private boolean reverse;
00033
00035 public IndexListIterator(ArrayList ref_list, ArrayList ptr_list,
00036 int[] index_first, int[] index_last,
00037 int index, int component, boolean reverse) {
00038
00039 this.ref_list = ref_list;
00040 this.iter_list = ptr_list;
00041 this.index_first = index_first;
00042 this.index_last = index_last;
00043 this.index = index;
00044 this.component = component;
00045 this.reverse = reverse;
00046 }
00047
00049 public boolean hasPrevious() {
00050 if (reverse == false)
00051 return false;
00052
00053 if ((index == -1) && (index_last[component] != -1))
00054 return true;
00055 else if (index == -2)
00056 return false;
00057 else {
00058 IndexList.Node n = (IndexList.Node)ref_list.get(index);
00059 if (n.previous != -1)
00060 return true;
00061 }
00062 return false;
00063 }
00064
00065 public int previous() {
00066 if (reverse == false)
00067 return -1;
00068
00069 IndexList.Node n;
00070 if (index == -1)
00071 index = index_last[component];
00072 else {
00073 n = (IndexList.Node)ref_list.get(index);
00074 index = n.previous;
00075 }
00076
00077 n = (IndexList.Node)ref_list.get(index);
00078 return n.index;
00079 }
00080
00081 public int previousIndex() {
00082 if (reverse == false)
00083 return -1;
00084
00085 if (index == -1)
00086 return index_last[component];
00087
00088 return index;
00089 }
00090
00091 public boolean hasNext() {
00092 if (reverse == true)
00093 return false;
00094
00095 if ((index == -1) && (index_first[component] != -1))
00096 return true;
00097 else if (index == -2)
00098 return false;
00099 else {
00100 IndexList.Node n = (IndexList.Node)ref_list.get(index);
00101 if (n.next != -1)
00102 return true;
00103 }
00104 return false;
00105 }
00106
00107 public int next() {
00108 if (reverse == true)
00109 return -1;
00110
00111 IndexList.Node n;
00112 if (index == -1)
00113 index = index_first[component];
00114 else {
00115 n = (IndexList.Node)ref_list.get(index);
00116 index = n.next;
00117 }
00118
00119 n = (IndexList.Node)ref_list.get(index);
00120 return n.index;
00121 }
00122
00123 public int nextIndex() {
00124 if (reverse == true)
00125 return -1;
00126
00127 if (index == -1)
00128 return index_first[component];
00129
00130 return index;
00131 }
00132
00133 public void remove() {
00134
00135 if (index != -1) {
00136
00137 IndexList.Node n_prev = null;
00138 IndexList.Node n_next = null;
00139 IndexList.Node n = (IndexList.Node)ref_list.get(index);
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149 if (n.previous != -1) {
00150 n_prev = (IndexList.Node)ref_list.get(n.previous);
00151
00152 n_prev.next = n.next;
00153 } else {
00154
00155 index_first[component] = n.next;
00156 }
00157
00158 if (n.next != -1) {
00159 n_next = (IndexList.Node)ref_list.get(n.next);
00160
00161 n_next.previous = n.previous;
00162 } else {
00163
00164 index_last[component] = n.previous;
00165 }
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 int i;
00184 int temp_index = index;
00185
00186 for (i=0; i < iter_list.size(); i++) {
00187 IndexListIterator iter = (IndexListIterator)iter_list.get(i);
00188 if (iter.index() == temp_index) {
00189 if (iter.reverse() == false) {
00190
00191 if (n.previous != -1)
00192 iter.setIndex(n.previous);
00193 } else {
00194
00195 if (n.next != -1)
00196 iter.setIndex(n.next);
00197 }
00198 }
00199 }
00200 }
00201 }
00202
00203 public int index() {
00204 return index;
00205 }
00206
00207 public void setIndex(int i) {
00208 this.index = i;
00209 }
00210
00211 public boolean reverse() {
00212 return this.reverse;
00213 }
00214 }