The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
Introduced a new Custom Event Filtering feature for EventListener.
Added .custom case for EventListenerInterest
Added customFilter property to addListener everywhere applicable in the library
Added documentation (including full code example) for the above in README.md
Implemented `.youngerThan` Event Interest
- `EventListener`s now support the `.youngerThan` interested, specifying a `maximumAge` parameter to define (in *nanoseconds*) the maximum age an `Eventable` can be (from the point of Dispatch) before the Listener is no longer interested in it.
- `EventReceiving` types (all of them) now also support the above behaviour.
- README.md has been updated to provide an example of how to specify an `EventListener` with a *Maximum Age* constraint.
- Introduced *Latest-Only Listeners*
- Introduced *Latest-Only Receivers*
- `dispatchTime` parameter added to all Callbacks (including Listeners) so that you can read the exact nanosecond-precise time at which each Event was Dispatched. **Interface-breaking change, thus the major version increase**
- README.md updated to reflect all of the above
- Event Scheduling has been added throughout the system.
- Unit Test coverage for Event Scheduling has also been added.
- Introduced `@EventMethod` wrapper in both `EventThread` and any class implementing `EventListening`. Can now be used to register immutable Event Listener callbacks within the declaration of any class as a `var`, and invoke the method `registerListeners()` on the `init` method of said class to automatically register any `@EventMethod`-decorated Listener using Reflection.
- Replaced the returning of Tokens (`UUID`s) when registering an Event Listener, or an Event Callback (inside `EventThread`) with an appropriate `Handle` type, containing a `remove()` method to unregister said Listener/Callback.
Fixed a bug in `EventThread` for method `removeEventCallback` where it was declared with an incorrect parameter type for `forEventType`.
- Certain `internal` methods have been marked as `open` in order to make inheriting classes consuming the library function properly. This is due to a limitation in Swift whereby any inheriting class where the base class originates inside of a Library cannot access `internal` members defined in the Library.
Version 4.0.0 introduces considerable refactoring and interface changes:
- `EventReceivable` is no longer a class to inherit from for your own Event Processing Threads.
- `EventThread` is now the class to inherit from for your own Event Process Threads.
- Nomenclature has been standardised throughout the library to eliminate any ambiguity between an `EventReceiver` (which is a fundamental base type for *anything* which receives `Eventable` objects.
- `EventPool` and all of its supporting types have been introduced as a major new feature for this release
- README.MD has been fully updated to reflect all refactoring and feature changes introduced for this version.
- `EventListener` implementation completed
- `EventCentral` updated to provide a centralised `EventListener` for global use
- `Eventable` introduces two new methods:
- `addListener` registers an arbitrary Listener against the referenced `Eventable` Type and returns a `UUID` token for that Listener
- `removeListener` unregisters the Listener specified by its `UUID` token
- Introduced `UIEventReceiver`
- Eliminated the need to implement a boilerplate Closure to invoke `callTypedEventCallback` in order to type-qualify an `Eventable` for a Callback call. This is now done internally for you.
- Updated the README.MD file to reflect the above