|
SimpleArraySet |
|
1 /* 2 * SimpleArraySet.java 3 * 4 * Copyright (c) 2001, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June 1991 (in the distribution as file licence.html, 9 * and also available at http://gate.ac.uk/gate/licence.html). 10 * 11 * D.Ognyanoff, 5/Nov/2001 12 * 13 * $Id: SimpleArraySet.java,v 1.1 2001/11/05 16:16:16 nasso Exp $ 14 */ 15 16 17 package gate.util; 18 19 import java.util.*; 20 21 /** 22 * A specific *partial* implementation of the Set interface used for 23 * high performance and memory reduction on small sets. Used in 24 * gate.fsm.State, for example 25 */ 26 public class SimpleArraySet 27 { 28 /** 29 * The array storing the elements 30 */ 31 Object[] theArray = null; 32 33 public boolean add(Object tr) 34 { 35 if (theArray == null) 36 { 37 theArray = new Object[1]; 38 theArray[0] = tr; 39 } else { 40 int newsz = theArray.length+1; 41 int index = java.util.Arrays.binarySearch(theArray, tr); 42 if (index < 0) 43 { 44 index = ~index; 45 Object[] temp = new Object[newsz]; 46 int i; 47 for (i = 0; i < index; i++) 48 { 49 temp[i] = theArray[i]; theArray[i] = null; 50 } 51 for (i = index+1; i<newsz; i++) 52 { 53 temp[i] = theArray[i-1]; theArray[i-1] = null; 54 } 55 temp[index] = tr; 56 theArray = temp; 57 } else { 58 theArray[index] = tr; 59 } 60 } // if initially empty 61 return true; 62 } // add 63 64 /** 65 * iterator 66 */ 67 public java.util.Iterator iterator() 68 { 69 if (theArray == null) 70 return new java.util.Iterator() 71 { 72 public boolean hasNext() {return false;} 73 public Object next() { return null; } 74 public void remove() {} 75 }; 76 else 77 return new java.util.Iterator() 78 { 79 int count = 0; 80 public boolean hasNext() 81 { 82 if (theArray == null) 83 throw new RuntimeException(""); 84 return count < theArray.length; 85 } 86 public Object next() { 87 if (theArray == null) 88 throw new RuntimeException(""); 89 return theArray[count++]; 90 } 91 public void remove() {} 92 }; // anonymous iterator 93 } // iterator 94 95 } // SimpleArraySet 96
|
SimpleArraySet |
|