/// <summary> /// Removes the listener so it wont be called aggain /// </summary> /// <param name="ear">Listener to be removed</param> /// <param name="compact">If is false, the array wont be compacted. use this when multiple eliminations have to be done</param> /// <returns>True if it was removed, false it it wasn't found</returns> public bool RemoveListener(ClockEventReceiver ear) { for (int i = 0; i < ticksReceivers.Length; i++) { ClockEventReceiver aux; if (ticksReceivers[i] == ear) { //we swap with the last one and delete if (i < currentReceivers) { aux = ticksReceivers[currentReceivers]; ticksReceivers[currentReceivers] = null; ticksReceivers[i] = aux; } else { ticksReceivers[i] = null; } currentReceivers--; return(true); } } return(false); }
/// <summary> /// Adds a event receiver to the clock so it is called when the clock ticks /// </summary> /// <param name="ear">Receiver to be added</param> public void AddListener(ClockEventReceiver ear) { if (ticksReceivers == null) { ticksReceivers = new ClockEventReceiver[10]; currentReceivers = 0; } if (currentReceivers >= ticksReceivers.Length - 1) { increaseReceiversCapacity(); } ticksReceivers[currentReceivers] = ear; currentReceivers++; }
/// <summary> /// Increasses capacity of the clocks receiver array /// </summary> private void increaseReceiversCapacity() { int goalCapacity = ticksReceivers.Length * 2; ClockEventReceiver[] aux = new ClockEventReceiver[goalCapacity]; for (int i = 0; i < goalCapacity; i++) { if (i < ticksReceivers.Length - 1) { aux[i] = ticksReceivers[i]; } else { aux[i] = null; } } ticksReceivers = aux; }