Hauptseite   Packages   Klassenhierarchie   ?bersicht   Auflistung der Dateien   Datenstruktur-Elemente  

IndexListIterator.java

gehe zur Dokumentation dieser Datei
00001 /*
00002  * $Source: /shared/cvsroot/diplom/app/src/java/de/picana/clusterer/IndexListIterator.java,v $
00003  * $Author: mstolpe $
00004  * $Date: 2003/04/22 09:51:27 $
00005  * $Revision: 1.3 $
00006  * $Release$
00007  *
00008  * Created on 22. November 2002, 01:05
00009  *
00010  * Copyright 2002 by Marco Stolpe
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;       // Zeiger auf Referenz-Liste
00040         this.iter_list = ptr_list;      // Zeiger auf Iterator-Liste
00041         this.index_first = index_first; // Erster Index der Liste (am Anfang 0)
00042         this.index_last = index_last;   // Letzter Index der Liste (am Anfang size-1)
00043         this.index = index;             // Vorinitialisierung mit -1
00044         this.component = component;     // ?ber welche Komponente wird iteriert?
00045         this.reverse = reverse;         // Nach vorne oder zur?ck?
00046     }
00047      
00049     public boolean hasPrevious() {
00050         if (reverse == false) // gilt nur f?r Richtung "zur?ck"
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             //System.out.println("vor dem L?schen:");
00142             //System.out.println("index: " + index);
00143             //System.out.println("n.previous: " + n.previous);
00144             //System.out.println("n.next: " + n.next);
00145             
00146             // remove element from ref_list by updating
00147             // the links of previous and next element
00148             
00149             if (n.previous != -1) {
00150                 n_prev = (IndexList.Node)ref_list.get(n.previous);
00151                 //System.out.println("n.previous.next: " + n_prev.next);
00152                 n_prev.next = n.next;
00153             } else {
00154                 //System.out.println(index);
00155                 index_first[component] = n.next;
00156             }
00157             
00158             if (n.next != -1) {
00159                 n_next = (IndexList.Node)ref_list.get(n.next);
00160                 //System.out.println("n.next.previous: " + n_next.previous);
00161                 n_next.previous = n.previous;
00162             } else {
00163                 //System.out.println(index);
00164                 index_last[component] = n.previous;
00165             }
00166             
00167             //System.out.println("nach dem L?schen:");
00168             //
00169             //if (n_prev != null)
00170             //    System.out.println("n.previous.next: " + n_prev.next);
00171             //else
00172             //    System.out.println("index_first[c]: " + n.next);
00173             //
00174             //if (n_next != null)
00175             //    System.out.println("n.next.previous: " + n_next.previous);
00176             //else
00177             //    System.out.println("index_last[c]: " + n.previous);
00178             
00179             
00180             
00181             // update index for all iterators of this component
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                         //System.out.println("(" + i + ", " + iter.reverse() + ") index: " + n.next);
00191                         if (n.previous != -1) 
00192                             iter.setIndex(n.previous);
00193                     } else {
00194                         //System.out.println("(" + i + ", " + iter.reverse() + ") index: " + n.previous);
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 }

Erzeugt am Tue Apr 22 11:22:56 2003 f?r Picana von doxygen1.2.18