1 11 package org.eclipse.update.internal.core; 12 13 import org.eclipse.core.runtime.Assert; 14 15 39 40 public class ListenersList { 41 44 private int capacity; 45 46 50 private int size; 51 52 57 private Object [] listeners = null; 58 59 63 private static final Object [] EmptyArray = new Object [0]; 64 67 public ListenersList() { 68 this(3); 69 } 70 76 public ListenersList(int capacity) { 77 Assert.isTrue(capacity >= 1); 78 this.capacity = capacity; 79 } 80 86 public void add(Object listener) { 87 Assert.isNotNull(listener); 88 if (size == 0) { 89 listeners = new Object [capacity]; 90 } else { 91 for (int i = 0; i < size; ++i) { 93 if (listeners[i] == listener) { 94 return; 95 } 96 } 97 if (size == listeners.length) { 99 System.arraycopy(listeners, 0, listeners = new Object [size * 2 + 1], 0, size); 100 } 101 } 102 listeners[size++] = listener; 103 } 104 115 public Object [] getListeners() { 116 if (size == 0) 117 return EmptyArray; 118 Object [] result = new Object [size]; 119 System.arraycopy(listeners, 0, result, 0, size); 120 return result; 121 } 122 128 public boolean isEmpty() { 129 return size == 0; 130 } 131 137 public void remove(Object listener) { 138 Assert.isNotNull(listener); 139 for (int i = 0; i < size; ++i) { 140 if (listeners[i] == listener) { 141 if (size == 1) { 142 listeners = null; 143 size = 0; 144 } 145 else { 146 System.arraycopy(listeners, i + 1, listeners, i, --size - i); 147 listeners[size] = null; 148 } 149 return; 150 } 151 } 152 } 153 158 public int size() { 159 return size; 160 } 161 } 162 163 164 165 166 | Popular Tags |