001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Jan 13, 2003
005     * Time: 8:50:35 PM
006     */
007    
008    package EVolve.util;
009    
010    import java.util.*;
011    
012    public class StackMerger {
013        private int interval;
014        private int counter;
015        private int result[];
016    
017        public StackMerger(int interval) {
018            this.interval = interval;
019            counter = 1;
020            result = new int[100];
021            for (int i=0; i<result.length; i++) result[i] = -1;
022        }
023    
024        private void enlarge() {
025            int[] temp = new int[result.length+50];
026            for (int i=0; i<temp.length; i++) {
027                if (i<result.length) {
028                    temp[i] = result[i];
029                } else {
030                    temp[i] = -1;
031                }
032            }
033        }
034    
035        private void reset() {
036            counter = 1;
037            for (int i=0; i<result.length; i++) result[i] = -1;
038        }
039    
040        public Stack next(Stack stack) {
041            int oldId, newId;
042            if (counter < interval) {
043                if (stack.size() > result.length) enlarge();
044                for (int i=0; i<stack.size(); i++) {
045                    newId = ((Integer)stack.get(i)).intValue();
046                    if (result[i] != -1) {
047                        oldId = result[i];
048                        if (oldId != newId) result[i] = -2;
049                    } else {
050                        result[i] = newId;
051                    }
052                }
053                return null;
054            } else {
055                int i = 0;
056                Stack retVal = new Stack();
057                while ((i<result.length)&&(result[i]!=-1)) {
058                    retVal.push(new Integer(result[i++]));
059                }
060                reset();
061                return retVal;
062            }
063    
064        }
065    }