Skip to content

Latest commit

 

History

History
119 lines (96 loc) · 7.03 KB

CHANGELOG.textile

File metadata and controls

119 lines (96 loc) · 7.03 KB

AS3 Signals Changelog:

v0.9 – NeufGun

API Additions

  • ISlot: listener registration object with many features.
    • A slot stores values of once and priority, replacing the untyped “listener box” objects.
    • A slot can remove() its listener from the signal.
    • Has enabled toggle to temporarily disconnect the listener without removing it.
    • The slot’s listener can be changed on the fly.
    • Has optional array of params which are appended to the signal’s dispatched values before reaching the listener. Similar to delegates that store extra args.
  • IOnceSignal: has addOnce() but not add(). Useful for completion signals that discard all listeners on dispatch. Idea by @alecmce.
  • MonoSignal: can have only one listener. Useful for callbacks and SignalCommandMap request signals. Originally implemented as SingleSignal by @stickupkid.
  • PrioritySignal: like DeluxeSignal without bubbling (thanks @neilmanuell).
  • Native Signal Sets:
    • @jonopus developed an easy way to snap on NativeSignals to Sprite, Timer, etc. See org.osflash.signals.natives.sets package.
    • Created SignalSprite, SignalTimer, etc. as example base classes. See org.osflash.signals.natives.base package.

API Changes

  • Removed ISignalOwner, INativeSignalOwner and IDispatcher. They became annoying, e.g. casting ISignal to Signal just to dispatch. Moved their methods into ISignal.
  • add(), addOnce() and remove() now return ISlot.

Implementation Changes

  • add() no longer checks listener.length because …varargs listeners cannot be detected.
  • Dispatching
    • @joa created a new, faster dispatching engine (SlotList) using an immutable recursive linked list (inspired by Scala). The list is like a snake which gets eaten by a snake, which gets eaten by a larger snake, and so on.
    • NOTE: Listeners are now called in reverse order, for best performance. If precise order is needed, use an IPrioritySignal.
  • Enhanced MXML friendliness (ArrayElementType, better examples).
  • More inheritance between signals to reduce code duplication.

Fixes

  • DeluxeSignal: now handles subclass super() calls properly (thanks @stickupkid).
  • NativeRelaySignal: better checks for null (thanks @stickupkid).

Tests

  • Increased test coverage significantly. Many tests from @stickupkid.
  • Refactored duplicated test code into base classes, e.g. ISignalTestBase. This greatly increased coverage across various implementations.

Build

  • Build now has a “package” target to zip SWC and source together.
  • Build now has a “clean” target to remove generated folders.
  • Flash Player executes on Linux (thanks @joa).

v0.8 – Maximilian – 2010-11-14

API Changes

  • Signals are now MXML-friendly! Example:
    <signals:Signal id="nameChanged">{[String, uint]}</signals:Signal>
    • Constructors are now nullable.
    • valueClasses and eventClass are now writable.
    • Exceptions: NativeMappedSignal and NativeRelaySignal are not yet MXML-friendly.
  • Renamed IDeluxeSignal to IPrioritySignal, a more functional name.
  • New interfaces to grant access to methods that affect all listeners:
    • ISignalOwner: extends ISignal, IDispatcher, adds removeAll().
    • INativeSignalOwner: extends IPrioritySignal, INativeDispatcher, adds removeAll().
    • These 2 interfaces cannot be merged because dispatch(event:Event) conflicts with dispatch(…valueObjects).
    • Thanks to Brian Heylin for getting the ball rolling.

Fixes

Build

  • Added continuous integration and unit test execution Ant targets: “ci” and “test”.
  • Updated AsUnit 4 SWC: test failure call stack is more concise and readable.
  • Removed build-asunit.xml as its functionality has been merged into build.xml.

v0.7 – Bubblap – 2010-05-27

API Changes

  • Added NativeMappedSignal class from Brian Heylin, with great test coverage.
  • DeluxeSignal has a simpler way to continue bubbling without re-dispatching the event.
    • IBubbleEventHandler.onEventBubbled() now returns true/false to continue/cancel bubbling.
    • Thanks to secoif for the original code and dehash for helping with the merge.
  • ISignal and IDeluxeSignal: add(), addOnce() and remove() now return the listener.
    • Thanks to sammyt for the contribution with unit tests.

Fixes

  • Improved error message for Signal.dispatch() with too few arguments.

Test Changes

  • The test suite is migrated to a newer version of AsUnit 4.
  • Added more tests for argument dispatching and consolidated in SignalDispatchArgsTest.

v0.6 – GreenDay – 2010-03-17

API Changes

Fixes

Implementation Changes

  • Optimized listeners array cloning to use slice(), which is faster than concat().
  • Optimized dispatch() by moving the cloning of listeners to add(), addOnce(), and remove().
  • Signal.removeAll() now uses remove() on every listener, instead of fast array clearing. This is intended to avoid possible issues with subclass overrides (as happened before with NativeRelaySignal.remove()).
  • Renamed createListenerRelationship() to registerListener().
  • Consolidated add() and addOnce() logic in registerListener().
  • Removed onceListeners Dictionary from DeluxeSignal and NativeSignal.
  • DeluxeSignal and NativeSignal are now more unified in their “once listeners” internal implementations.
  • Removed an extra semicolon which made FDT cry (thanks vitch).

Test Changes

  • Removed async [Test] metadata because AsUnit 4 no longer uses it.
  • Updated the AsUnit 4 SWC to newer version which avoids slowdown of Timers in Flash Player 10.1.
  • Added tests for ambiguous relationships in Signal.
  • Added tests for adding a listener during a dispatch().

v0.5 – GlassHalfFull – 2010-02-08

  • Added versioning to the Ant build, starting at 0.5.