/// <summary> /// Loads macros from rewindable reader instance. /// </summary> /// <param name="rewinder">The instance to read data from.</param> private void Load(RewindableTextReader rewinder) { Helper.ThrowIfNull(rewinder); string line = null; while ((line = rewinder.ReadLine()) != null) { MacroName macro = MacroName.Create(line); switch (macro.Symbol) { case "o": LoadGlobalOptions(rewinder); break; case "v": VarFloor var = new VarFloor() { Macro = macro, Variance = ReadTagArray(rewinder, "<VARIANCE>"), }; VarFloors.Add(var.Macro.Name, var); break; case "t": Transition trans = new Transition() { Macro = macro, Matrix = ReadTransition(rewinder), }; Transitions.Add(trans.Macro.Name, trans); break; case "s": HmmStream stream = ReadStream(rewinder); stream.Name = macro.Name; Streams.Add(macro.Name, stream); break; case "h": HmmModel model = ReadModel(rewinder, Streams, Transitions); model.Macro = macro; Models.Add(macro.Name, model); break; default: throw new InvalidDataException(Helper.NeutralFormat( "Macro name [{0}] is not supported in line [{1}].", macro.Name, macro.Name)); } } }
/// <summary> /// Converts the transition instance into string in MMF format. /// </summary> /// <param name="transition">The transition instance to convert.</param> /// <returns>Transition instance in string format.</returns> private static string ToString(Transition transition) { Helper.ThrowIfNull(transition); return Helper.NeutralFormat("<TRANSP> {1}{0}{2}", Environment.NewLine, transition.Matrix.GetLength(0), ToString(transition.Matrix)); }