Skip to content
This repository has been archived by the owner on Sep 25, 2018. It is now read-only.

Commit

Permalink
Updated optimized transition loaders to support multiple events on a …
Browse files Browse the repository at this point in the history
…single transition. Tested and works.
  • Loading branch information
jbeard4 committed Feb 22, 2012
1 parent d22ba2e commit 3a5a5be
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 15 deletions.
14 changes: 7 additions & 7 deletions src/main/coffeescript/optimization/class.coffee
Expand Up @@ -47,23 +47,23 @@ define ["optimization/initializer","lib/beautify"],(initializer,js_beautify)->


#NOTE: scxmlJson.events will not contain wildcard ("*") event, #NOTE: scxmlJson.events will not contain wildcard ("*") event,
#and will normalize events like "foo.bat.*" to "foo.bat" #and will normalize events like "foo.bat.*" to "foo.bat"
for own eventName,event of scxmlJson.events for own eventName of scxmlJson.events
transitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.event == event.name) transitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.events and eventName in transition.events )


if transitionsForEvent.length if transitionsForEvent.length
classStr += generateMethod event.name,transitionsForEvent,parent classStr += generateMethod eventName,transitionsForEvent,parent


defaultTransitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when not transition.event) defaultTransitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when not transition.events)
if defaultTransitionsForEvent.length if defaultTransitionsForEvent.length
classStr += generateMethod DEFAULT_EVENT_NAME,defaultTransitionsForEvent,parent classStr += generateMethod DEFAULT_EVENT_NAME,defaultTransitionsForEvent,parent


wildcardTransitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.event is "*") wildcardTransitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.events and "*" in transition.events)
if wildcardTransitionsForEvent.length if wildcardTransitionsForEvent.length
classStr += generateMethod WILDCARD_EVENT_NAME,wildcardTransitionsForEvent,parent classStr += generateMethod WILDCARD_EVENT_NAME,wildcardTransitionsForEvent,parent
else else
#root state #root state
for eventName,event of scxmlJson.events for own eventName of scxmlJson.events
classStr += "this['#{event.name}'] = function(){return null;};\n" classStr += "this['#{eventName}'] = function(){return null;};\n"
classStr += "this['#{DEFAULT_EVENT_NAME}'] = function(){return null;};\n" classStr += "this['#{DEFAULT_EVENT_NAME}'] = function(){return null;};\n"
classStr += "this['#{WILDCARD_EVENT_NAME}'] = function(){return null;};\n" classStr += "this['#{WILDCARD_EVENT_NAME}'] = function(){return null;};\n"


Expand Down
6 changes: 3 additions & 3 deletions src/main/coffeescript/optimization/state-table.coffee
Expand Up @@ -71,9 +71,9 @@ define ["optimization/initializer","lib/beautify"],(initializer,js_beautify)->
(scxmlJson,beautify=true,asyncModuleDef=true) -> (scxmlJson,beautify=true,asyncModuleDef=true) ->
#NOTE: scxmlJson.events will not contain wildcard ("*") event, #NOTE: scxmlJson.events will not contain wildcard ("*") event,
#and will normalize events like "foo.bat.*" to "foo.bat" #and will normalize events like "foo.bat.*" to "foo.bat"
stateTransitionTable = (((initializer.transitionToVarLabel transition for transition in state.transitions when transition.event == event.name) for eventName,event of scxmlJson.events ) for state in scxmlJson.states) stateTransitionTable = (((initializer.transitionToVarLabel transition for transition in state.transitions when transition.events and eventName in transition.events) for eventName of scxmlJson.events ) for state in scxmlJson.states)
wildcardTransitionsForStates = ((initializer.transitionToVarLabel transition for transition in state.transitions when transition.event is "*") for state in scxmlJson.states) wildcardTransitionsForStates = ((initializer.transitionToVarLabel transition for transition in state.transitions when transition.events and "*" in transition.events) for state in scxmlJson.states)
defaultTransitionsForStates = ((initializer.transitionToVarLabel transition for transition in state.transitions when not transition.event) for state in scxmlJson.states) defaultTransitionsForStates = ((initializer.transitionToVarLabel transition for transition in state.transitions when not transition.events) for state in scxmlJson.states)
toReturn = initializer.genOuterInitializerStr scxmlJson,""" toReturn = initializer.genOuterInitializerStr scxmlJson,"""
var stateTransitionTable = #{tableToString stateTransitionTable}, var stateTransitionTable = #{tableToString stateTransitionTable},
wildcardTransitionTable = #{defaultTableToString wildcardTransitionsForStates}, wildcardTransitionTable = #{defaultTableToString wildcardTransitionsForStates},
Expand Down
10 changes: 5 additions & 5 deletions src/main/coffeescript/optimization/switch.coffee
Expand Up @@ -24,8 +24,8 @@ define ["optimization/initializer","lib/beautify"],(initializer,js_beautify)->


for state in scxmlJson.states when state.transitions.length for state in scxmlJson.states when state.transitions.length


wildcardTransitions = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.event is "*" ) wildcardTransitions = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.events and "*" in transition.events)
defaultTransitions= (initializer.transitionToVarLabel transition for transition in state.transitions when not transition.event) defaultTransitions= (initializer.transitionToVarLabel transition for transition in state.transitions when not transition.events)


toReturn += """ toReturn += """
case "#{state.id}": case "#{state.id}":
Expand Down Expand Up @@ -55,13 +55,13 @@ define ["optimization/initializer","lib/beautify"],(initializer,js_beautify)->
switch(eventName){ switch(eventName){
""" """


for eventName,event of scxmlJson.events for own eventName of scxmlJson.events
#NOTE: scxmlJson.events will not contain wildcard ("*") event, #NOTE: scxmlJson.events will not contain wildcard ("*") event,
#and will normalize events like "foo.bat.*" to "foo.bat" #and will normalize events like "foo.bat.*" to "foo.bat"
transitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.event == event.name) transitionsForEvent = (initializer.transitionToVarLabel transition for transition in state.transitions when transition.events and eventName in transition.events)
if transitionsForEvent.length if transitionsForEvent.length
toReturn += """ toReturn += """
case "#{event.name}": case "#{eventName}":
transitions = transitions.concat(#{initializer.arrayToIdentifierListString transitionsForEvent}); transitions = transitions.concat(#{initializer.arrayToIdentifierListString transitionsForEvent});
break; break;
""" """
Expand Down
1 change: 1 addition & 0 deletions src/main/coffeescript/util/annotate-scxml-json.coffee
Expand Up @@ -168,6 +168,7 @@ define ["scxml/state-kinds-enum"],(stateKinds) ->




#wildcard "*" event will show up on transition.events, but will not show up in uniqueEvents #wildcard "*" event will show up on transition.events, but will not show up in uniqueEvents
#default transitions (those without events) will have events set to undefined (rather than empty array)
if attributes.event if attributes.event
events = events =
if attributes.event is "*" then [attributes.event] if attributes.event is "*" then [attributes.event]
Expand Down

0 comments on commit 3a5a5be

Please sign in to comment.