public Tape(SymbolSerializer <TSymbol> serializer, TSymbol nullValue = default(TSymbol), int position = 0) { _serializer = serializer; _tape = new InfiniteBidirctionalList <TSymbol>(nullValue); _position = position; _initialPosition = position; }
private void SaveAs(string fileName) { try { if (String.IsNullOrEmpty(fileName)) { FileSelector fileSelector = new FileSelector(FileSelectorFilters.Symbols); fileSelector.FileName = fileName; if (fileSelector.ExecuteSaveDialog()) { fileName = fileSelector.FileName; } } if (String.IsNullOrEmpty(fileName) == false) { SymbolData data = SymbolConverter.Instance.ConvertFromSymbol(symbolEditor.Symbol); SymbolSerializer.SerializeSymbol(fileName, data); m_Persistent = true; FileName = fileName; } } catch (Exception e) { string msg = e.Message; if (e.InnerException != null) { msg += "\n" + e.InnerException.Message; } MessageBox.Show(msg + "\n-----\n" + e.StackTrace, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
private void LoadFiles() { button_ProceedToPage2.Enabled = false; //at this point the chosen files really do exist m_CircuitData = CircuitSerializer.DeserializeCircuit(textBox_Circuit.Text); m_CircuitData.Signals = null; Circuit circuit = CircuitConverter.Instance.ConvertToCircuit(m_CircuitData); foreach (BaseElement be in circuit) { if (be is SignalInput) { ListViewItem li = new ListViewItem(be.Name); //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", be.); li.Group = listView_CircuitIOs.Groups[0]; listView_CircuitIOs.Items.Add(li); } if (be is SignalOutput) { ListViewItem li = new ListViewItem(be.Name); li.Group = listView_CircuitIOs.Groups[1]; listView_CircuitIOs.Items.Add(li); } } m_SymbolData = SymbolSerializer.DeserializeSymbol(textBox_Symbol.Text); Symbol symbol = SymbolConverter.Instance.ConvertToSymbol(m_SymbolData); foreach (SymbolPart part in symbol) { if (part is PortPart) { PortPart port = (PortPart)part; if (port.Direction == DirectionType.Input) { ListViewItem li = new ListViewItem(port.Name); //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", port.Name, port.Direction, port.Location.X, port.Location.Y); li.Group = listView_SymbolPorts.Groups[0]; listView_SymbolPorts.Items.Add(li); } if (port.Direction == DirectionType.Output) { ListViewItem li = new ListViewItem(port.Name); //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", port.Name, port.Direction, port.Location.X, port.Location.Y); li.Group = listView_SymbolPorts.Groups[1]; listView_SymbolPorts.Items.Add(li); } } } }
public bool LoadDocument(string fileName) { try { if (String.IsNullOrEmpty(fileName) == false) { SymbolData symbolData = SymbolSerializer.DeserializeSymbol(fileName); symbolEditor.Symbol = SymbolConverter.Instance.ConvertToSymbol(symbolData); FileName = fileName; return(true); } } catch (Exception e) { string msg = e.Message; if (e.InnerException != null) { msg += "\n" + e.InnerException.Message; } MessageBox.Show(msg + "\n-----\n" + e.StackTrace, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Stop); } return(false); }
public static StatefulTable <TState, TSymbol> LoadFromFile <TState, TSymbol>(string filename, TSymbol nullValue, StateSerializer <TState> stateSerializer, SymbolSerializer <TSymbol> symbolSerializer) { var document = XDocument.Load(filename); return(Load(document, nullValue, stateSerializer, symbolSerializer)); }
public static StatefulTable <TState, TSymbol> LoadFromString <TState, TSymbol>(string xml, TSymbol nullValue, StateSerializer <TState> stateSerializer, SymbolSerializer <TSymbol> symbolSerializer) { byte[] byteArray = Encoding.UTF8.GetBytes(xml); MemoryStream stream = new MemoryStream(byteArray); var document = XDocument.Load(stream); return(Load(document, nullValue, stateSerializer, symbolSerializer)); }
public static StatefulTable <TState, TSymbol> Load <TState, TSymbol>(XDocument document, TSymbol nullValue, StateSerializer <TState> stateSerializer, SymbolSerializer <TSymbol> symbolSerializer) { // Get symbols var symbols = new List <TSymbol>(); symbols.Add(nullValue); foreach (var element in document.Root.Elements()) { if ("symbols".Equals(element.Name.LocalName)) { for (int index = 0; index < element.Value.Length; index++) { symbols.Add(symbolSerializer.FromString($"{element.Value[index]}")); } break; } } // Get status var states = new List <TState>(); var initialState = default(TState); var finalStates = new List <TState>(); foreach (var element in document.Root.Elements()) { if ("states".Equals(element.Name.LocalName)) { foreach (var stateTag in element.Elements()) { bool isStart = false; bool isHalt = false; if ("state".Equals(stateTag.Name.LocalName)) { foreach (var attribute in stateTag.Attributes()) { if ("start".Equals(attribute.Name.LocalName)) { isStart = "yes".Equals(attribute.Value); } else if ("halt".Equals(attribute.Name.LocalName)) { isHalt = "yes".Equals(attribute.Value); } } var status = stateSerializer.FromString(stateTag.Value); states.Add(status); if (isStart) { initialState = status; } if (isHalt) { finalStates.Add(status); } } } break; } } // Create the table var table = new StatefulTable <TState, TSymbol>(states, symbols, initialState, finalStates); // Transition function foreach (var element in document.Root.Elements()) { if ("transition-function".Equals(element.Name.LocalName)) { foreach (var mappingTag in element.Elements()) { if ("mapping".Equals(mappingTag.Name.LocalName)) { var currentState = string.Empty; var currentSymbol = string.Empty; var nextState = string.Empty; var nextSymbol = string.Empty; var movement = string.Empty; foreach (var fromTag in mappingTag.Elements()) { if ("from".Equals(fromTag.Name.LocalName)) { foreach (var attribute in fromTag.Attributes()) { if ("current-state".Equals(attribute.Name.LocalName)) { currentState = attribute.Value; } else if ("current-symbol".Equals(attribute.Name.LocalName)) { currentSymbol = attribute.Value; } } break; } } foreach (var toTag in mappingTag.Elements()) { if ("to".Equals(toTag.Name.LocalName)) { foreach (var attribute in toTag.Attributes()) { if ("next-state".Equals(attribute.Name.LocalName)) { nextState = attribute.Value; } else if ("next-symbol".Equals(attribute.Name.LocalName)) { nextSymbol = attribute.Value; } else if ("movement".Equals(attribute.Name.LocalName)) { movement = attribute.Value; } } break; } } var key = new TableKey <TState, TSymbol>(stateSerializer.FromString(currentState), symbolSerializer.FromString(currentSymbol)); var value = new TableValue <TState, TSymbol>(stateSerializer.FromString(nextState), symbolSerializer.FromString(nextSymbol), GetMoveActionFromString(movement)); table[key] = value; } } break; } } return(table); }