Example #1
0
        /// <summary>
        /// Saves the automata to the given file.
        /// </summary>
        /// <param name="path">The file path.</param>
        /// <param name="automata">The automata to be saved.</param>
        /// <returns>True, if saving the automata was successful.</returns>
        public static bool Save(string path, IAutomata automata)
        {
            using (var outputFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                var settings = new XmlWriterSettings
                {
                    Indent      = true,
                    IndentChars = "    "
                };

                using (var writer = XmlWriter.Create(outputFileStream, settings))
                {
                    writer.WriteStartDocument(true);

                    writer.WriteStartElement("Automata");
                    writer.WriteAttributeString("Type", automata.GetType().AssemblyQualifiedName);

                    automata.WriteToXmlWriter(writer);

                    writer.WriteStartElement("Alphabet");
                    writer.WriteAttributeString("Type", automata.Alphabet.GetType().AssemblyQualifiedName);

                    automata.Alphabet.WriteToXmlWriter(writer);

                    writer.WriteEndElement(); // Alphabet

                    writer.WriteStartElement("States");

                    foreach (var state in automata.States)
                    {
                        writer.WriteStartElement("State");
                        writer.WriteAttributeString("Type", state.GetType().AssemblyQualifiedName);
                        writer.WriteAttributeString("Id", state.Id);
                        writer.WriteAttributeString("IsStartState", state.IsStartState.ToString(CultureInfo.InvariantCulture));
                        writer.WriteAttributeString("IsAcceptState", state.IsAcceptState.ToString(CultureInfo.InvariantCulture));

                        state.WriteToXmlWriter(writer);

                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement(); // States

                    writer.WriteStartElement("Transitions");

                    foreach (var transition in automata.Transitions)
                    {
                        writer.WriteStartElement("Transition");
                        writer.WriteAttributeString("Type", transition.GetType().AssemblyQualifiedName);
                        writer.WriteAttributeString("SourceStateId", transition.SourceState.Id);
                        writer.WriteAttributeString("TargetStateId", transition.TargetState.Id);
                        writer.WriteAttributeString("Symbols", automata.Alphabet.ConstructSymbolText(transition.Symbols, false).Replace(" ", ""));

                        transition.WriteToXmlWriter(writer);

                        writer.WriteEndElement(); // Transition
                    }

                    writer.WriteEndElement(); // Transitions

                    writer.WriteEndElement(); // Automata

                    writer.WriteEndDocument();
                }
            }

            return(true);
        }