⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smccsharpgenerator.java

📁 SMC takes a state machine stored in a .sm file and generates a State pattern in twelve programming l
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        // deserialize constructor.        if (Smc.isSerial() == true)        {            _source.print(_indent);            _source.print("    public ");            _source.print(context);            _source.print("Context(SerializationInfo info, ");            _source.println("StreamingContext context) :");            _source.print(_indent);            _source.println("        base ()");            _source.print(_indent);            _source.println("    {");            _source.print(_indent);            _source.println("        int stackSize;");            _source.print(_indent);            _source.println("        int stateId;");            _source.println();            _source.print(_indent);            _source.print(                "        stackSize = ");            _source.println("info.GetInt32(\"stackSize\");");            _source.print(_indent);            _source.println("        if (stackSize > 0)");            _source.print(_indent);            _source.println("        {");            _source.print(_indent);            _source.println("            int index;");            _source.print(_indent);            _source.println("            String name;");            _source.println();            _source.print(_indent);            _source.print(                "            for (index = (stackSize - 1); ");            _source.println("index >= 0; --index)");            _source.print(_indent);            _source.println("            {");            _source.print(_indent);            _source.print("                ");            _source.println("name = \"stackIndex\" + index;");            _source.print(_indent);            _source.print("                ");            _source.println("stateId = info.GetInt32(name);");            _source.print(_indent);            _source.print("                ");            _source.println("PushState(_States[stateId]);");            _source.print(_indent);            _source.println("            }");            _source.print(_indent);            _source.println("        }");            _source.println();            _source.print(_indent);            _source.println(                "        stateId = info.GetInt32(\"state\");");            _source.print(_indent);            _source.println(                "        PushState(_States[stateId]);");            _source.print(_indent);            _source.println("    }");            _source.println();        }        // Generate the default transition methods.        // First get the transition list.        transitions = fsm.getTransitions();        for (SmcTransition trans: transitions)        {            transName = trans.getName();            // Ignore the default transition.            if (transName.equals("Default") == false)            {                _source.print(_indent);                _source.print("    public void ");                _source.print(transName);                _source.print("(");                // Now output the transition's parameters.                params = trans.getParameters();                for (pit = params.iterator(), separator = "";                     pit.hasNext() == true;                     separator = ", ")                {                    _source.print(separator);                    (pit.next()).accept(this);                }                _source.println(")");                _source.print(_indent);                _source.println("    {");                // If the -sync flag was specified, then output                // "lock(this)" to prevent multiple threads from                // access this state machine simultaneously.                if (Smc.isSynchronized() == true)                {                    _source.print(_indent);                    _source.println("        lock (this)");                    _source.print(_indent);                    _source.println("        {");                    indent2 = _indent + "            ";                }                else                {                    indent2 = _indent + "        ";                }                // Save away the transition name in case it is                // need in an UndefinedTransitionException.                _source.print(indent2);                _source.print("_transition = \"");                _source.print(transName);                _source.println("\";");                _source.print(indent2);                _source.print("State.");                _source.print(transName);                _source.print("(this");                for (SmcParameter param: params)                {                    _source.print(", ");                    _source.print(param.getName());                }                _source.println(");");                _source.print(indent2);                _source.println("_transition = \"\";");                // If the -sync flag was specified, then output                // the "End SyncLock".                if (Smc.isSynchronized() == true)                {                    _source.print(_indent);                    _source.println("        }");                    _source.println();                }                _source.print(_indent);                _source.println("        return;");                _source.print(_indent);                _source.println("    }");                _source.println();            }        }        // If -serial specified, then output the valueOf(int)        // method.        if (Smc.isSerial() == true)        {            _source.print(_indent);            _source.print("    public ");            _source.print(context);            _source.println("State valueOf(int stateId)");            _source.print(_indent);            _source.println("    {");            _source.print(_indent);            _source.println("        return(_States[stateId]);");            _source.print(_indent);            _source.println("    }");            _source.println();        }        // If serialization is turned on, then output the        // GetObjectData method.        if (Smc.isSerial() == true)        {            _source.print(_indent);            _source.print("    [SecurityPermissionAttribute(");            _source.print("SecurityAction.Demand, ");            _source.println("SerializationFormatter=true)]");            _source.print(_indent);            _source.print("    public void GetObjectData(");            _source.println("SerializationInfo info,");            _source.print(_indent);            _source.print("                              ");            _source.println("StreamingContext context)");            _source.print(_indent);            _source.println("    {");            _source.print(_indent);            _source.println("        int stackSize = 0;");            _source.println();            _source.print(_indent);            _source.println("        if (_stateStack != null)");            _source.print(_indent);            _source.println("        {");            _source.print(_indent);            _source.println(                "            stackSize = _stateStack.Count;");            _source.print(_indent);            _source.println("        }");            _source.println();            _source.print(_indent);            _source.print("        ");            _source.println(                "info.AddValue(\"stackSize\", stackSize);");            _source.println();            _source.print(_indent);            _source.println("        if (stackSize > 0)");            _source.print(_indent);            _source.println("        {");            _source.print(_indent);            _source.println("            int index = 0;");            _source.print(_indent);            _source.println("            String name;");            _source.println();            _source.print(_indent);            _source.print("            foreach (");            _source.print(context);            _source.println("State state in _stateStack)");            _source.print(_indent);            _source.println("            {");            _source.print(_indent);            _source.print("                ");            _source.println("name = \"stackIndex\" + index;");            _source.print(_indent);            _source.print("                info.AddValue(");            _source.println("name, state.Id);");            _source.print(_indent);            _source.println("                ++index;");            _source.print(_indent);            _source.println("            }");            _source.print(_indent);            _source.println("        }");            _source.println();            _source.print(_indent);            _source.println(                "        info.AddValue(\"state\", _state.Id);");            _source.println();            _source.print(_indent);            _source.println("        return;");            _source.print(_indent);            _source.println("    }");            _source.println();        }        // Declare member data.        _source.print(_indent);        _source.println(            "//---------------------------------------------------------------");        _source.print(_indent);        _source.println("// Member data.");        _source.print(_indent);        _source.println("//");        _source.println();        _source.print(_indent);        _source.println("    [NonSerialized]");        _source.print(_indent);        _source.print("    private ");        _source.print(context);        _source.println(" _owner;");        _source.println();        // If serialization support is on, then create the state        // array.        if (Smc.isSerial() == true)        {            Iterator<SmcMap> mit;            SmcMap map;            String mapName;            Iterator<SmcState> sit;            SmcState state;            _source.print(_indent);            _source.println(                "    // Map state IDs to state objects.");            _source.print(_indent);            _source.println(                "    // Used to deserialize an FSM.");            _source.print(_indent);            _source.println("    [NonSerialized]");            _source.print(_indent);            _source.print("    private static ");            _source.print(context);            _source.println("State[] _States =");            _source.print(_indent);            _source.print("    {");            for (mit = maps.iterator(), separator = "";                 mit.hasNext() == true;                )            {                map = mit.next();                mapName = map.getName();                for (sit = map.getStates().iterator();                     sit.hasNext() == true;                     separator = ",")                {                    state = sit.next();                    _source.println(separator);                    _source.print(_indent);                    _source.print("        ");                    _source.print(mapName);                    _source.print(".");                    _source.print(state.getClassName());                }            }            _source.println();            _source.print(_indent);            _source.println("    };");            _source.println();        }        // Declare the inner state class.        _source.print(_indent);        _source.println(            "//---------------------------------------------------------------");        _source.print(_indent);        _source.println("// Inner classes.");        _source.print(_indent);        _source.println("//");        _source.println();        _source.print(_indent);        _source.print("    public abstract class ");        _source.print(context);        _source.println("State :");        _source.print(_indent);        _source.println("        statemap.State");        _source.print(_indent);        _source.println("    {");        // The abstract Transitions property - if reflection was        // is specified.        if (Smc.isReflection() == true)        {            _source.print(_indent);            _source.println("    //-----------------------------------------------------------");            _source.print(_indent);            _source.println("    // Properties.");            _source.print(_indent);            _source.println("    //");            _source.println();            _source.print(_indent);            _source.print("        ");            _source.println(                "public abstract IDictionary Transitions");            _source.print(_indent);            _source.println("        {");            _source.print(_indent);            _source.println("            get;");            _source.print(_indent);            _source.println("        }");            _source.println();        }        _source.print(_indent);        _source.println("    //-----------------------------------------------------------");        _source.print(_indent);        _source.println("    // Member methods.");        _source.print(_indent);        _source.println("    //");        _source.println();        // State constructor.        _source.print(_indent);        _source.print("        internal ");        _source.print(context);        _source.println("State(string name, int id) :");        _source.print(_indent);        _source.println("            base (name, id)");        _source.print(_indent);        _source.println("        {}");        _source.println();        // Entry/Exit methods.        _source.print(_indent);        _source.print(            "        protected internal virtual void Entry(");        _source.print(context);        _source.println("Context context)");        _source.print(_indent);        _source.println("        {}");        _source.println();        _source.print(_indent);        _source.print(            "        protected internal virtual void Exit(");        _source.print(context);        _source.println("Context context)");        _source.print(_indent);        _source.println("        {}");        _source.println();        // Transition methods (except default).        for (SmcTransition trans: transitions)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -