1 11 package org.eclipse.ltk.internal.core.refactoring; 12 13 16 public class ListenerList { 17 18 static { 19 } 21 22 25 private int capacity; 26 27 31 private int size; 32 33 38 private Object [] listeners= null; 39 40 44 private static final Object [] EmptyArray= new Object [0]; 45 46 49 public ListenerList() { 50 this(3); 51 } 52 53 59 public ListenerList(int cap) { 60 Assert.isTrue(cap >= 1); 61 this.capacity= cap; 62 } 63 64 70 public void add(Object listener) { 71 Assert.isNotNull(listener); 72 if (size == 0) { 73 listeners= new Object [capacity]; 74 } else { 75 for (int i= 0; i < size; ++i) { 77 if (listeners[i] == listener) { 78 return; 79 } 80 } 81 if (size == listeners.length) { 83 System.arraycopy(listeners, 0, listeners= new Object [size * 2 + 1], 0, size); 84 } 85 } 86 listeners[size++]= listener; 87 } 88 89 100 public Object [] getListeners() { 101 if (size == 0) 102 return EmptyArray; 103 Object [] result= new Object [size]; 104 System.arraycopy(listeners, 0, result, 0, size); 105 return result; 106 } 107 108 114 public boolean isEmpty() { 115 return size == 0; 116 } 117 118 124 public void remove(Object listener) { 125 Assert.isNotNull(listener); 126 for (int i= 0; i < size; ++i) { 127 if (listeners[i] == listener) { 128 if (--size == 0) { 129 listeners= new Object [1]; 130 } else { 131 if (i < size) { 132 listeners[i]= listeners[size]; 133 } 134 listeners[size]= null; 135 } 136 return; 137 } 138 } 139 } 140 141 146 public int size() { 147 return size; 148 } 149 } 150 | Popular Tags |