comparison dwt/widgets/EventTable.d @ 213:36f5cb12e1a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Sat, 17 May 2008 17:34:28 +0200
parents 92c102dd64a3
children fd9c62a2998e
comparison
equal deleted inserted replaced
212:ab60f3309436 213:36f5cb12e1a2
30 30
31 class EventTable { 31 class EventTable {
32 int [] types; 32 int [] types;
33 Listener [] listeners; 33 Listener [] listeners;
34 int level; 34 int level;
35 static final int GROW_SIZE = 4;
36
37 public Listener [] getListeners (int eventType) {
38 if (types is null) return new Listener [0];
39 int count = 0;
40 for (int i=0; i<types.length; i++) {
41 if (types [i] is eventType) count++;
42 }
43 if (count is 0) return new Listener [0];
44 Listener [] result = new Listener [count];
45 count = 0;
46 for (int i=0; i<types.length; i++) {
47 if (types [i] is eventType) {
48 result [count++] = listeners [i];
49 }
50 }
51 return result;
52 }
35 53
36 public void hook (int eventType, Listener listener) { 54 public void hook (int eventType, Listener listener) {
37 if (types is null) types = new int [4]; 55 if (types is null) types = new int [GROW_SIZE];
38 if (listeners is null) listeners = new Listener [4]; 56 if (listeners is null) listeners = new Listener [GROW_SIZE];
39 int length = types.length, index = length - 1; 57 int length = types.length, index = length - 1;
40 while (index >= 0) { 58 while (index >= 0) {
41 if (types [index] !is 0) break; 59 if (types [index] !is 0) break;
42 --index; 60 --index;
43 } 61 }
44 index++; 62 index++;
45 if (index is length) { 63 if (index is length) {
46 int [] newTypes = new int [length + 4]; 64 int [] newTypes = new int [length + GROW_SIZE];
47 System.arraycopy (types, 0, newTypes, 0, length); 65 System.arraycopy (types, 0, newTypes, 0, length);
48 types = newTypes; 66 types = newTypes;
49 Listener [] newListeners = new Listener [length + 4]; 67 Listener [] newListeners = new Listener [length + GROW_SIZE];
50 SimpleType!(Listener).arraycopy (listeners, 0, newListeners, 0, length); 68 SimpleType!(Listener).arraycopy (listeners, 0, newListeners, 0, length);
51 listeners = newListeners; 69 listeners = newListeners;
52 } 70 }
53 types [index] = eventType; 71 types [index] = eventType;
54 listeners [index] = listener; 72 listeners [index] = listener;