UNPKG

mmir-lib

Version:

MMIR (Mobile Multimodal Interaction and Relay) library

239 lines (186 loc) 5.3 kB
/** * Module for Extended SCION impl. * * @class StateEngineExtender * @memberOf mmir.state * @hideconstructor */ define(function() { /** * @param {Engine} _scion * the SCION engine instance * @param {Boolean} isNewApi * if _scion conforms to the >= v3 SCION API * * @return {ExtendedEngine} * the extended SCION engine instance * * @memberOf mmir.state.StateEngineExtender# */ var extend = function (_scion, isNewApi) { /* * if (testbed._util) return testbed._util; */ /** @memberOf mmir.state.StateEngineExtender# * @private */ var _states = []; /** @memberOf mmir.state.StateEngineExtender# * @private */ var _transitions = new Map(); /** @memberOf mmir.state.StateEngineExtender# * @private */ var _events = new Map(); (function() { /** @memberOf mmir.state.StateEngineExtender# * @private */ var events = []; /** @memberOf mmir.state.StateEngineExtender# * @private */ var transitions = {}; /** @memberOf mmir.state.StateEngineExtender# * @private */ var states = (isNewApi? _scion._model : _scion.model).states; //temporary variables: /** @memberOf mmir.state.StateEngineExtender# * @private */ var n; /** @memberOf mmir.state.StateEngineExtender# * @private */ var stateObj; /** @memberOf mmir.state.StateEngineExtender# * @private */ var transitionObjects; /** @memberOf mmir.state.StateEngineExtender# * @private */ var m; /** @memberOf mmir.state.StateEngineExtender# * @private */ var ev; /** @memberOf mmir.state.StateEngineExtender# * @private */ var targets; /** @memberOf mmir.state.StateEngineExtender# * @private */ var targetObject; /** @memberOf mmir.state.StateEngineExtender# * @private */ var t; // crawl all states, events and transitions for (n = 0; n < states.length; n++) { stateObj = states[n]; var id = stateObj.id; if (id[0] !== '$'){ _states.push(id); } transitionObjects = stateObj.transitions; for (m = 0; m < transitionObjects.length; m++) { targets = transitionObjects[m].targets; ev = transitionObjects[m].events; events = events.concat(ev); if (targets) { for (t = 0; t < targets.length; t++) { targetObject = targets[t]; if (typeof transitions[ev] === 'undefined') { transitions[ev] = targetObject.id; } else { var tmp = transitions[ev]; if (typeof tmp === 'string') { var a = new Array(); a.push(targetObject.id); } else if (tmp instanceof Array) { transitions[ev].push(targetObject[ev]); } } } } else { transitions[ev] = stateObj.id; } } _transitions.set(stateObj.id, transitions); transitions = {}; _events.set(stateObj.id, events); events = []; } })(); /** * @class ExtendedStateEngineImpl * @memberOf mmir.state */ return /** @lends mmir.state.ExtendedStateEngineImpl# */ { /** @memberOf mmir.state.ExtendedStateEngineImpl# */ _scion : _scion, /** @public */ _states : _states, /** @public */ _events : _events, /** @public */ _transitions : _transitions, /** @public */ start : function() { this._scion.start(); }, /** @public */ ignoreScript : function() { this._scion.opts.retrace = true; }, /** @public */ evalScript : function() { this._scion.opts.retrace = false; }, /** @public */ gen : function(event, data) { this._scion.gen(event, data); }, /** @public */ getStates : function() { return this._scion.getConfiguration(); }, /** @public */ getActiveStates : function() { return this._scion.getFullConfiguration(); }, /** @public */ getEvents : function() { var i, events = [], states = this._scion.getConfiguration(); for (i = 0; i < states.length; i++) { events = events.concat(this._events.get(states[i])); } return events; }, /** @public */ getActiveEvents : function() { var i, events = [], states = this._scion.getFullConfiguration(); for (i = 0; i < states.length; i++) { events = events.concat(this._events.get(states[i])); } return events; }, /** @public */ getTransitions : function() { var i, t, e, transitions = {}, states = this._scion.getConfiguration(); for (i = 0; i < states.length; i++) { t = this._transitions.get(states[i]); for (e in t) { transitions[e] = t[e]; } } return transitions; }, /** @public */ getActiveTransitions : function() { var i, t, e, transitions = {}, states = this._scion.getFullConfiguration(); for (i = 0; i < states.length; i++) { t = this._transitions.get(states[i]); for (e in t) { transitions[e] = t[e]; } } return transitions; } };//END: return {... };//END: extend = function(_scion) {... return extend; });//END: define(...