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 }