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

📄 smcvbgenerator.java

📁 SMC takes a state machine stored in a .sm file and generates a State pattern in twelve programming l
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                    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(trans.getName());                _source.println("\"");                _source.print(indent2);                _source.print("State.");                _source.print(trans.getName());                _source.print("(Me");                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("        End SyncLock");                }                _source.print(_indent);                _source.println("    End Sub");                _source.println();            }        }        // If serialization is one, then output the GetObjectData        // and deserialize constructor.        if (Smc.isSerial() == true)        {            // Output the ValueOf method.            _source.print(_indent);            _source.print("    Public Function ValueOf(");            _source.print("ByVal stateId As Integer) As ");            _source.print(context);            _source.println("State");            _source.println();            _source.print(_indent);            _source.println(                "        Return _States(stateId)");            _source.print(_indent);            _source.println("    End Function");            _source.println();            _source.print(_indent);            _source.print("    Private Sub GetObjectData(");            _source.println(                "ByVal info As SerializationInfo, _");            _source.print(_indent);            _source.print("                              ");            _source.println(                "ByVal context As StreamingContext) _");            _source.print(_indent);            _source.print("            ");            _source.println(                "Implements ISerializable.GetObjectData");            _source.println();            _source.print(_indent);            _source.println(                "        Dim stackSize As Integer = 0");            _source.print(_indent);            _source.println("        Dim index As Integer");            _source.print(_indent);            _source.println("        Dim it As IEnumerator");            _source.println();            _source.print(_indent);            _source.println(                "        If Not IsNothing(_stateStack) _");            _source.print(_indent);            _source.println("        Then");            _source.print(_indent);            _source.println(                "            stackSize = _stateStack.Count");            _source.print(_indent);            _source.println(                "            it = _stateStack.GetEnumerator()");            _source.print(_indent);            _source.println("        End If");            _source.println();            _source.print(_indent);            _source.print("        ");            _source.println(                "info.AddValue(\"stackSize\", stackSize)");            _source.println();            _source.print(_indent);            _source.println("        index = 0");            _source.print(_indent);            _source.println("        While index < stackSize");            _source.print(_indent);            _source.println("            info.AddValue( _");            _source.print(_indent);            _source.print("                ");            _source.println(                "String.Concat(\"stackItem\", index), _");            _source.print(_indent);            _source.println(                "                              it.Current.Id)");            _source.print(_indent);            _source.println(                "                it.MoveNext()");            _source.print(_indent);            _source.println(                "                index += 1");            _source.print(_indent);            _source.println("        End While");            _source.println();            _source.print(_indent);            _source.println(                "        info.AddValue(\"state\", _state.Id)");            _source.print(_indent);            _source.println("    End Sub");            _source.println();            _source.print(_indent);            _source.print("    Private Sub New(");            _source.println(                "ByVal info As SerializationInfo, _");            _source.print(_indent);            _source.print("                    ");            _source.println(                "ByVal context As StreamingContext)");            _source.println();            _source.print(_indent);            _source.println("        Dim stackSize As Integer");            _source.print(_indent);            _source.println("        Dim stateId As Integer");            _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("        Then");            _source.print(_indent);            _source.println("            Dim index As Integer");            _source.println();            _source.print(_indent);            _source.println(                "            _stateStack = New Stack()");            _source.print(_indent);            _source.println(                "            index = stackSize - 1");            _source.print(_indent);            _source.println(                "            While index >= 0");            _source.print(_indent);            _source.println(                "                stateId = _");            _source.print(_indent);            _source.println(                "                    info.GetInt32( _");            _source.print(_indent);            _source.print("                        ");            _source.println(                "String.Concat(\"stackItem\", index))");            _source.print(_indent);            _source.print("                    ");            _source.println(                "_stateStack.Push(_States(stateId))");            _source.print(_indent);            _source.println(                "                    index -= 1");            _source.print(_indent);            _source.println(                "            End While");            _source.print(_indent);            _source.println("        End If");            _source.println();            _source.print(_indent);            _source.println(                "        stateId = info.GetInt32(\"state\")");            _source.print(_indent);            _source.println("        _state = _States(stateId)");            _source.println();            _source.print(_indent);            _source.println("    End Sub");            _source.println();        }        // The context class declaration is complete.        _source.print(_indent);        _source.println("End Class");        _source.println();        // Declare the root application state class.        _source.print(_indent);        _source.print("Public MustInherit Class ");        _source.print(context);        _source.println("State");        _source.print(_indent);        _source.println("    Inherits statemap.State");        _source.println();        // If reflection is on, then generate the abstract        // Transitions property.        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("    Public MustOverride ReadOnly ");            _source.println(                "Property Transitions() As IDictionary");            _source.println();        }        _source.print(_indent);        _source.println(            "    '------------------------------------------------------------");        _source.print(_indent);        _source.println("    ' Member methods");        _source.print(_indent);        _source.println("    '");        _source.println();        _source.print(_indent);        _source.print("    Protected Sub New(");        _source.println(            "ByVal name As String, ByVal id As Integer)");        _source.println();        _source.print(_indent);        _source.println("        MyBase.New(name, id)");        _source.print(_indent);        _source.println("    End Sub");        _source.println();        _source.print(_indent);        _source.print("    Public Overridable Sub Entry(");        _source.print("ByRef context As ");        _source.print(context);        _source.println("Context)");        _source.print(_indent);        _source.println("    End Sub");        _source.println();        _source.print(_indent);        _source.print("    Public Overridable Sub Exit_(");        _source.print("ByRef context As ");        _source.print(context);        _source.println("Context)");        _source.print(_indent);        _source.println("    End Sub");        _source.println();        // Generate the default transition definitions.        for (SmcTransition trans: transitions)        {            // Don't generate the Default transition here.            if (trans.getName().equals("Default") == false)            {                _source.print(_indent);                _source.print("    Public Overridable Sub ");                _source.print(trans.getName());                _source.print("(ByRef context As ");                _source.print(context);                _source.print("Context");                for (SmcParameter param: trans.getParameters())                {                    _source.print(", ");                    param.accept(this);                }                _source.println(")");                _source.println();                // If this method is reached, that means that                // this transition was passed to a state which                // does not define the transition. Call the                // state's default transition method.                // Note: "Default" is a VB keyword, so use                // "Default_" instead.                _source.print(_indent);                _source.println("        Default_(context)");                _source.print(_indent);                _source.println("    End Sub");                _source.println();            }        }        // Generate the overall Default transition for all maps.        // Note: "Default" is a VB keyword, so use "Default_"        // instead.        _source.print(_indent);        _source.print("    Public Overridable Sub Default_(");        _source.print("ByRef context As ");        _source.print(context);        _source.println("Context)");        _source.println();        if (Smc.isDebug() == true)        {            _source.println("#If TRACE Then");            _source.print(_indent);            _source.print("        Trace.WriteLine(");            _source.println("\"TRANSITION   : Default\")");            _source.println("#End If");            _source.println();        }        _source.print(_indent);        _source.print("        Throw ");        _source.println(            "New statemap.TransitionUndefinedException( _");        _source.print(_indent);        _source.println(            "            String.Concat(\"State: \", _");        _source.print(_indent);        _source.println("               context.State.Name, _");        _source.print(_indent);        _source.println("               \", Transition: \", _");        _source.print(_indent);        _source.println(            "               context.GetTransition()))");        _source.print(_indent);        _source.println("    End Sub");        // End of the application class' state class.        _source.print(_indent);        _source.println("End Class");        // Have each map print out its source code now.        for (SmcMap map: maps)        {            map.accept(this);        }        // If a package has been specified, then generate        // the End tag now.        if (packageName != null && packageName.length() > 0)        {            _source.println();            _source.println("End Namespace");        }        return;    } // end of visit(SmcFSM)    public void visit(SmcMap map)    {        List<SmcTransition> definedDefaultTransitions;        SmcState defaultState = map.getDefaultState();        String context = map.getFSM().getContext();        String mapName = map.getName();        List<SmcState> states = map.getStates();        String stateName;        // Initialize the default transition list to all the

⌨️ 快捷键说明

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