- add TBSMStateMachineBuilder class to configure statemachines via json
- add methods to subscribe and unsubscribe to notifications
- add path scheme to locate states inside the hierarchy
- minor code cleanup
- add recursive cleanup for transition vertexes to prevent memory leaks
- Break up cyclic references between states on deallocation of TBSMStateMachine
- set parentVertex on states when setting states on TBSMParallelState
- set parentVertex on states when setting states on TBSMSubState
- Add preprocessor macro to enumerate statemachin events
- Add convenience setter for states on and TBSMSubState TBSMParallelState
- Posting notification when performing internal transitions
- Minor internal refactorings
- Improved log output
- Fixed debug output when showing remaining events in queue
- Added TBSMDebugger to DebugSupport subspec for clearer debug API
- Additional debug output for remaining events in queue
- Minor bugfixes
- Minor bugfixes
- Add asynchronous logging to
DebugSupport
to prevent logging from affecting performance measuring too much.
- Remove parameters
sourceState
andtargetState
from handlers and notification user info to simplify API.
- Cleanup interfaces for class methods. Using instancetype now.
- Remove superfluous factory methods
- Rework nullability by using audited regions
- Add nullability annotations and generics for improved Swift compatibility to sub spec
DebugSupport
- Bugfixes
- Bugfixes
- Add nullability annotations and generics for improved Swift compatibility
- Add convenience method
scheduleEventNamed:data:
- Add support for tvOS 9.0
- changed payload from
NSDictionary
to id
- add support for watchOS 2
- general house keeping and cleanup
- upadated documentation
- using mach_time instead of
CACurrentMediaTime
for time measurement
- added junction pseudo state
- simplified debug support code
- fixed a bug which caused a join transition to be triggered before all source transitions were performed
- fixed a bug which caused a statemachine to perform a compound transition when the event handler's target was 'nil'
- support for pseudo states
- implementation of fork and join pseudo states
- optional
DebugSupport
subspec for logging and performance measurements
- minor fixes
- improved error messages
- thread safety increased
- event scheduling is asynchronuous now
- simplified notification generation
- removed event deferral
- clear separation between transition types external, local, internal when registering events
- local transitions
- added notifications for enter and exit handlers
- remove option for concurrent queue in
TBSMParallelState
- renamed
-registerEvent:
to-addHandlerForEvent:
- improved thread safety
- made changes to
TBSMStateMachine
so TBSMState class and subtypes can be inherited
- made concurrent queue in
TBSMParallelState
optional
- states can register multiple event handlers for the same event, guard block decides which one gets executed
- fixed bug which caused
TBSMParallelState
not to setup all sub machines when performing transition into one state machine - fixed a bug which caused events not to bubble up to super states when not being handled by a sub state
- reworked event handling and state switching
- corrected event deferral algorithm
- corrected event deferral algorithm
- changed event registration / deferral API
- added internal transitions
- added event deferral
- removed method
-unregisterEvent:
from classTBSMState
- renamed property
states
tostateMachines
in classTBSMParallelState
- re-added internal dispatch queue for
TBSMParallelState
- removed internal dispatch queues
- removed log messages
- code cleanup
- removed method
- (TBSMTransition *)handleEvent:(TBSMEvent *)event
fromTBSMNode
protocol
- changed class name to use prefix
TBSM
instead ofTBStateMachine
- added TBSMSubState which derives from
TBSMState
(formerly known asTBStateMachineState
)
- LCA handling was broken and resulted in a wrong execution sequence of exit - action - enter
- corrected typos in CHANGELOG.md (this document)
- state machine can now switch from a substate of a sub state machine deep into another submachine. Implementation uses LCA (Least Common Ancestor) - algorithm
- events will be registered by setting target action and guard:
- (void)registerEvent:(TBStateMachineEvent *)event
target:(id<TBStateMachineNode>)target
action:(TBStateMachineActionBlock)action
guard:(TBStateMachineGuardBlock)guard;
- event processing follows RTC-model. The state machine will queue all events it receives until processing of the current event has finished
- updated documentation
- updated API
- initial release