internal override IEnumerable <NavMessage> Parse() { while (!Sr.EndOfStream) { var ch = Sr.Peek(); char s = Convert.ToChar(ch); var satelliteSystem = s.ConvertToEnum(); switch (satelliteSystem) { case SatelliteSystem.Gps: var gpsParser = _parserMap[satelliteSystem] as GpsNavMessageContentParser; Debug.Assert(gpsParser != null, "temp != null"); yield return(gpsParser.ParseImpl <GpsNavMessage>()); break; case SatelliteSystem.Glo: var gloParser = _parserMap[satelliteSystem] as GloNavMessageContentParser; Debug.Assert(gloParser != null, "temp != null"); yield return(gloParser.ParseImpl <GloNavMessage>()); break; case SatelliteSystem.Gal: var galParser = _parserMap[satelliteSystem] as GalNavMessageContentParser; Debug.Assert(galParser != null, "temp != null"); yield return(galParser.ParseImpl <GalNavMessage>()); break; case SatelliteSystem.Qzss: var qzssParser = _parserMap[satelliteSystem] as QzssNavMessageContentParser; Debug.Assert(qzssParser != null, "temp != null"); yield return(qzssParser.ParseImpl <QzssNavMessage>()); break; case SatelliteSystem.Bds: var bdsParser = _parserMap[satelliteSystem] as BdsNavMessageContentParser; Debug.Assert(bdsParser != null, "temp != null"); yield return(bdsParser.ParseImpl <BdsNavMessage>()); break; case SatelliteSystem.Irnss: var irnssParser = _parserMap[satelliteSystem] as IrnssNavMessageContentParser; Debug.Assert(irnssParser != null, "temp != null"); yield return(irnssParser.ParseImpl <IrnssNavMessage>()); break; case SatelliteSystem.Sbas: var sbasParser = _parserMap[satelliteSystem] as SbasNavMessageContentParser; Debug.Assert(sbasParser != null, "temp != null"); yield return(sbasParser.ParseImpl <SbasNavMessage>()); break; default: throw new ArgumentOutOfRangeException(); } } }