diff --git a/DiscImageChef.Core/Benchmark.cs b/DiscImageChef.Core/Benchmark.cs index 2e848a087..4097ba17a 100644 --- a/DiscImageChef.Core/Benchmark.cs +++ b/DiscImageChef.Core/Benchmark.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using DiscImageChef.Checksums; namespace DiscImageChef.Core @@ -514,14 +515,7 @@ namespace DiscImageChef.Core } EndProgress(); - double entropy = 0; - foreach(ulong l in entTable) - { -#pragma warning disable IDE0004 // Without this specific cast, it gives incorrect values - double frequency = (double)l / (double)bufferSize; -#pragma warning restore IDE0004 // Without this specific cast, it gives incorrect values - entropy += -(frequency * Math.Log(frequency, 2)); - } + double entropy = entTable.Select(l => (double)l / (double)bufferSize).Select(frequency => -(frequency * Math.Log(frequency, 2))).Sum(); end = DateTime.Now; mem = GC.GetTotalMemory(false); diff --git a/DiscImageChef.Core/Devices/Dumping/Alcohol120.cs b/DiscImageChef.Core/Devices/Dumping/Alcohol120.cs index 92bf4a9c4..053a0dcea 100644 --- a/DiscImageChef.Core/Devices/Dumping/Alcohol120.cs +++ b/DiscImageChef.Core/Devices/Dumping/Alcohol120.cs @@ -34,6 +34,7 @@ using System; using System.Runtime.InteropServices; using System.IO; using System.Collections.Generic; +using System.Linq; using System.Text; using DiscImageChef.CommonTypes; using DiscImageChef.DiscImages; @@ -376,16 +377,12 @@ namespace DiscImageChef.Core.Devices.Dumping internal void AddSessions(Session[] cdSessions) { - foreach(Session cdSession in cdSessions) + foreach(AlcoholSession session in cdSessions.Select(cdSession => new AlcoholSession { - AlcoholSession session = new AlcoholSession - { - firstTrack = (ushort)cdSession.StartTrack, - lastTrack = (ushort)cdSession.EndTrack, - sessionSequence = cdSession.SessionSequence - }; - sessions.Add(session); - } + firstTrack = (ushort)cdSession.StartTrack, + lastTrack = (ushort)cdSession.EndTrack, + sessionSequence = cdSession.SessionSequence + })) { sessions.Add(session); } } internal void SetTrackTypes(byte point, TrackType mode, TrackSubchannelType subMode) diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index 2d58d6a42..7e7f19c6d 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -244,14 +244,12 @@ namespace DiscImageChef.Core.Devices.Dumping sessionsForAlcohol[i].SessionSequence = (ushort)(i + 1); sessionsForAlcohol[i].StartTrack = ushort.MaxValue; } - foreach(FullTOC.TrackDataDescriptor trk in toc.Value.TrackDescriptors) - if(trk.POINT > 0 && trk.POINT < 0xA0 && trk.SessionNumber <= sessionsForAlcohol.Length) - { - if(trk.POINT < sessionsForAlcohol[trk.SessionNumber - 1].StartTrack) - sessionsForAlcohol[trk.SessionNumber - 1].StartTrack = trk.POINT; - if(trk.POINT > sessionsForAlcohol[trk.SessionNumber - 1].EndTrack) - sessionsForAlcohol[trk.SessionNumber - 1].EndTrack = trk.POINT; - } + foreach(FullTOC.TrackDataDescriptor trk in toc.Value.TrackDescriptors.Where(trk => trk.POINT > 0 && trk.POINT < 0xA0 && trk.SessionNumber <= sessionsForAlcohol.Length)) { + if(trk.POINT < sessionsForAlcohol[trk.SessionNumber - 1].StartTrack) + sessionsForAlcohol[trk.SessionNumber - 1].StartTrack = trk.POINT; + if(trk.POINT > sessionsForAlcohol[trk.SessionNumber - 1].EndTrack) + sessionsForAlcohol[trk.SessionNumber - 1].EndTrack = trk.POINT; + } alcohol.AddSessions(sessionsForAlcohol); @@ -264,67 +262,65 @@ namespace DiscImageChef.Core.Devices.Dumping List trackList = new List(); long lastSector = 0; string lastMsf = null; - foreach(FullTOC.TrackDataDescriptor trk in sortedTracks) - if(trk.ADR == 1 || trk.ADR == 4) - if(trk.POINT >= 0x01 && trk.POINT <= 0x63) + foreach(FullTOC.TrackDataDescriptor trk in sortedTracks.Where(trk => trk.ADR == 1 || trk.ADR == 4)) if(trk.POINT >= 0x01 && trk.POINT <= 0x63) + { + TrackType track = new TrackType { - TrackType track = new TrackType - { - Sequence = new TrackSequenceType {Session = trk.SessionNumber, TrackNumber = trk.POINT} - }; - if((TOC_CONTROL)(trk.CONTROL & 0x0D) == TOC_CONTROL.DataTrack || - (TOC_CONTROL)(trk.CONTROL & 0x0D) == TOC_CONTROL.DataTrackIncremental) - track.TrackType1 = TrackTypeTrackType.mode1; - else track.TrackType1 = TrackTypeTrackType.audio; - if(trk.PHOUR > 0) - track.StartMSF = string.Format("{3:D2}:{0:D2}:{1:D2}:{2:D2}", trk.PMIN, trk.PSEC, - trk.PFRAME, trk.PHOUR); - else track.StartMSF = string.Format("{0:D2}:{1:D2}:{2:D2}", trk.PMIN, trk.PSEC, trk.PFRAME); - track.StartSector = trk.PHOUR * 3600 * 75 + trk.PMIN * 60 * 75 + trk.PSEC * 75 + trk.PFRAME - - 150; - trackList.Add(track); - } - else if(trk.POINT == 0xA2) + Sequence = new TrackSequenceType {Session = trk.SessionNumber, TrackNumber = trk.POINT} + }; + if((TOC_CONTROL)(trk.CONTROL & 0x0D) == TOC_CONTROL.DataTrack || + (TOC_CONTROL)(trk.CONTROL & 0x0D) == TOC_CONTROL.DataTrackIncremental) + track.TrackType1 = TrackTypeTrackType.mode1; + else track.TrackType1 = TrackTypeTrackType.audio; + if(trk.PHOUR > 0) + track.StartMSF = string.Format("{3:D2}:{0:D2}:{1:D2}:{2:D2}", trk.PMIN, trk.PSEC, + trk.PFRAME, trk.PHOUR); + else track.StartMSF = string.Format("{0:D2}:{1:D2}:{2:D2}", trk.PMIN, trk.PSEC, trk.PFRAME); + track.StartSector = trk.PHOUR * 3600 * 75 + trk.PMIN * 60 * 75 + trk.PSEC * 75 + trk.PFRAME - + 150; + trackList.Add(track); + } + else if(trk.POINT == 0xA2) + { + int phour, pmin, psec, pframe; + if(trk.PFRAME == 0) { - int phour, pmin, psec, pframe; - if(trk.PFRAME == 0) - { - pframe = 74; + pframe = 74; - if(trk.PSEC == 0) + if(trk.PSEC == 0) + { + psec = 59; + + if(trk.PMIN == 0) { - psec = 59; - - if(trk.PMIN == 0) - { - pmin = 59; - phour = trk.PHOUR - 1; - } - else - { - pmin = trk.PMIN - 1; - phour = trk.PHOUR; - } + pmin = 59; + phour = trk.PHOUR - 1; } else { - psec = trk.PSEC - 1; - pmin = trk.PMIN; + pmin = trk.PMIN - 1; phour = trk.PHOUR; } } else { - pframe = trk.PFRAME - 1; - psec = trk.PSEC; + psec = trk.PSEC - 1; pmin = trk.PMIN; phour = trk.PHOUR; } - - if(phour > 0) lastMsf = string.Format("{3:D2}:{0:D2}:{1:D2}:{2:D2}", pmin, psec, pframe, phour); - else lastMsf = string.Format("{0:D2}:{1:D2}:{2:D2}", pmin, psec, pframe); - lastSector = phour * 3600 * 75 + pmin * 60 * 75 + psec * 75 + pframe - 150; } + else + { + pframe = trk.PFRAME - 1; + psec = trk.PSEC; + pmin = trk.PMIN; + phour = trk.PHOUR; + } + + if(phour > 0) lastMsf = string.Format("{3:D2}:{0:D2}:{1:D2}:{2:D2}", pmin, psec, pframe, phour); + else lastMsf = string.Format("{0:D2}:{1:D2}:{2:D2}", pmin, psec, pframe); + lastSector = phour * 3600 * 75 + pmin * 60 * 75 + psec * 75 + pframe - 150; + } TrackType[] tracks = trackList.ToArray(); for(int t = 1; t < tracks.Length; t++) diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index ac576fd00..92c987651 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -278,8 +279,7 @@ namespace DiscImageChef.Core.Devices.Dumping decMode.Value.Header.BlockDescriptors.Length >= 1) scsiDensityCode = (byte)decMode.Value.Header.BlockDescriptors[0].Density; - foreach(Decoders.SCSI.Modes.ModePage modePage in decMode.Value.Pages) - containsFloppyPage |= modePage.Page == 0x05; + containsFloppyPage = decMode.Value.Pages.Aggregate(containsFloppyPage, (current, modePage) => current | (modePage.Page == 0x05)); } } } diff --git a/DiscImageChef.Core/Devices/Report/SCSI/General.cs b/DiscImageChef.Core/Devices/Report/SCSI/General.cs index db3eeec89..30e5db9dc 100644 --- a/DiscImageChef.Core/Devices/Report/SCSI/General.cs +++ b/DiscImageChef.Core/Devices/Report/SCSI/General.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using DiscImageChef.Console; using DiscImageChef.Devices; using DiscImageChef.Metadata; @@ -133,7 +134,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } if(inq.VersionDescriptors != null) { - foreach(ushort descriptor in inq.VersionDescriptors) if(descriptor != 0) versionDescriptors.Add(descriptor); + versionDescriptors.AddRange(inq.VersionDescriptors.Where(descriptor => descriptor != 0)); if(versionDescriptors.Count > 0) report.SCSI.Inquiry.VersionDescriptors = versionDescriptors.ToArray(); @@ -184,18 +185,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(evpdPages != null && evpdPages.Length > 0) { List evpds = new List(); - foreach(byte page in evpdPages) - if(page != 0x80) - { - DicConsole.WriteLine("Querying SCSI EVPD {0:X2}h...", page); - sense = dev.ScsiInquiry(out buffer, out senseBuffer, page); - if(sense) continue; + foreach(byte page in evpdPages.Where(page => page != 0x80)) { + DicConsole.WriteLine("Querying SCSI EVPD {0:X2}h...", page); + sense = dev.ScsiInquiry(out buffer, out senseBuffer, page); + if(sense) continue; - pageType evpd = new pageType(); - evpd.page = page; - evpd.value = buffer; - evpds.Add(evpd); - } + pageType evpd = new pageType(); + evpd.page = page; + evpd.value = buffer; + evpds.Add(evpd); + } if(evpds.Count > 0) report.SCSI.EVPDPages = evpds.ToArray(); } diff --git a/DiscImageChef.Core/Filesystems.cs b/DiscImageChef.Core/Filesystems.cs index 56a8b5456..07b04ed1b 100644 --- a/DiscImageChef.Core/Filesystems.cs +++ b/DiscImageChef.Core/Filesystems.cs @@ -31,6 +31,7 @@ // ****************************************************************************/ using System.Collections.Generic; +using System.Linq; using DiscImageChef.CommonTypes; using DiscImageChef.Filesystems; using DiscImageChef.DiscImages; @@ -41,11 +42,10 @@ namespace DiscImageChef.Core { public static void Identify(ImagePlugin imagePlugin, out List idPlugins, Partition partition) { - idPlugins = new List(); PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(); - foreach(Filesystem plugin in plugins.PluginsList.Values) if(plugin.Identify(imagePlugin, partition)) idPlugins.Add(plugin.Name.ToLower()); + idPlugins = (from plugin in plugins.PluginsList.Values where plugin.Identify(imagePlugin, partition) select plugin.Name.ToLower()).ToList(); } } } \ No newline at end of file diff --git a/DiscImageChef.Core/ImageFormat.cs b/DiscImageChef.Core/ImageFormat.cs index 03ec0e99e..21762e6ba 100644 --- a/DiscImageChef.Core/ImageFormat.cs +++ b/DiscImageChef.Core/ImageFormat.cs @@ -31,6 +31,7 @@ // ****************************************************************************/ using System; +using System.Linq; using DiscImageChef.Console; using DiscImageChef.Filters; using DiscImageChef.DiscImages; @@ -50,10 +51,20 @@ namespace DiscImageChef.Core imageFormat = null; // Check all but RAW plugin - foreach(ImagePlugin imageplugin in plugins.ImagePluginsList.Values) - if(imageplugin.PluginUuid != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) + foreach(ImagePlugin imageplugin in plugins.ImagePluginsList.Values.Where(imageplugin => imageplugin.PluginUuid != new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))) try { - try + DicConsole.DebugWriteLine("Format detection", "Trying plugin {0}", imageplugin.Name); + if(!imageplugin.IdentifyImage(imageFilter)) continue; + + imageFormat = imageplugin; + break; + } +#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body + catch { } + + // Check only RAW plugin + if(imageFormat == null) + foreach(ImagePlugin imageplugin in plugins.ImagePluginsList.Values.Where(imageplugin => imageplugin.PluginUuid == new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))) try { DicConsole.DebugWriteLine("Format detection", "Trying plugin {0}", imageplugin.Name); if(!imageplugin.IdentifyImage(imageFilter)) continue; @@ -63,26 +74,6 @@ namespace DiscImageChef.Core } #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body catch { } -#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body - } - - // Check only RAW plugin - if(imageFormat == null) - foreach(ImagePlugin imageplugin in plugins.ImagePluginsList.Values) - if(imageplugin.PluginUuid == new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) - { - try - { - DicConsole.DebugWriteLine("Format detection", "Trying plugin {0}", imageplugin.Name); - if(!imageplugin.IdentifyImage(imageFilter)) continue; - - imageFormat = imageplugin; - break; - } -#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body - catch { } -#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body - } // Still not recognized if(imageFormat == null) return null; diff --git a/DiscImageChef.Core/Partitions.cs b/DiscImageChef.Core/Partitions.cs index ed42061e8..5f7bed736 100644 --- a/DiscImageChef.Core/Partitions.cs +++ b/DiscImageChef.Core/Partitions.cs @@ -123,11 +123,9 @@ namespace DiscImageChef.Core // Be sure that device partitions are not excluded if not mapped by any scheme... if(image.ImageInfo.ImageHasPartitions) { - List startLocations = new List(); + List startLocations = childPartitions.Select(detectedPartition => detectedPartition.Start).ToList(); - foreach(Partition detectedPartition in childPartitions) startLocations.Add(detectedPartition.Start); - - foreach(Partition imagePartition in image.GetPartitions()) if(!startLocations.Contains(imagePartition.Start)) childPartitions.Add(imagePartition); + childPartitions.AddRange(image.GetPartitions().Where(imagePartition => !startLocations.Contains(imagePartition.Start))); } Partition[] childArray = childPartitions @@ -144,7 +142,7 @@ namespace DiscImageChef.Core List schemes = new List(); - foreach(Partition part in partitions) if(!schemes.Contains(part.Scheme)) schemes.Add(part.Scheme); + foreach(Partition part in partitions.Where(part => !schemes.Contains(part.Scheme))) schemes.Add(part.Scheme); foreach(string scheme in schemes) Statistics.AddPartition(scheme); } diff --git a/DiscImageChef.Core/Statistics.cs b/DiscImageChef.Core/Statistics.cs index 992b256fe..66f4f08fc 100644 --- a/DiscImageChef.Core/Statistics.cs +++ b/DiscImageChef.Core/Statistics.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net; using System.Threading; using System.Xml.Serialization; @@ -105,14 +106,12 @@ namespace DiscImageChef.Core long count = 0; OsStats old = null; - foreach(OsStats nvs in AllStats.OperatingSystems) - if(nvs.name == Interop.DetectOS.GetRealPlatformID().ToString() && - nvs.version == Interop.DetectOS.GetVersion()) - { - count = nvs.Value + 1; - old = nvs; - break; - } + foreach(OsStats nvs in AllStats.OperatingSystems.Where(nvs => nvs.name == Interop.DetectOS.GetRealPlatformID().ToString() && + nvs.version == Interop.DetectOS.GetVersion())) { + count = nvs.Value + 1; + old = nvs; + break; + } if(old != null) AllStats.OperatingSystems.Remove(old); @@ -131,13 +130,11 @@ namespace DiscImageChef.Core long count = 0; NameValueStats old = null; - foreach(NameValueStats nvs in AllStats.Versions) - if(nvs.name == Version.GetVersion()) - { - count = nvs.Value + 1; - old = nvs; - break; - } + foreach(NameValueStats nvs in AllStats.Versions.Where(nvs => nvs.name == Version.GetVersion())) { + count = nvs.Value + 1; + old = nvs; + break; + } if(old != null) AllStats.Versions.Remove(old); @@ -333,13 +330,7 @@ namespace DiscImageChef.Core if(AllStats.Filesystems == null) AllStats.Filesystems = new List(); if(CurrentStats.Filesystems == null) CurrentStats.Filesystems = new List(); - NameValueStats old = null; - foreach(NameValueStats nvs in AllStats.Filesystems) - if(nvs.name == filesystem) - { - old = nvs; - break; - } + NameValueStats old = AllStats.Filesystems.FirstOrDefault(nvs => nvs.name == filesystem); NameValueStats nw = new NameValueStats(); if(old != null) @@ -355,13 +346,7 @@ namespace DiscImageChef.Core } AllStats.Filesystems.Add(nw); - old = null; - foreach(NameValueStats nvs in CurrentStats.Filesystems) - if(nvs.name == filesystem) - { - old = nvs; - break; - } + old = CurrentStats.Filesystems.FirstOrDefault(nvs => nvs.name == filesystem); nw = new NameValueStats(); if(old != null) @@ -385,13 +370,7 @@ namespace DiscImageChef.Core if(AllStats.Partitions == null) AllStats.Partitions = new List(); if(CurrentStats.Partitions == null) CurrentStats.Partitions = new List(); - NameValueStats old = null; - foreach(NameValueStats nvs in AllStats.Partitions) - if(nvs.name == partition) - { - old = nvs; - break; - } + NameValueStats old = AllStats.Partitions.FirstOrDefault(nvs => nvs.name == partition); NameValueStats nw = new NameValueStats(); if(old != null) @@ -407,13 +386,7 @@ namespace DiscImageChef.Core } AllStats.Partitions.Add(nw); - old = null; - foreach(NameValueStats nvs in CurrentStats.Partitions) - if(nvs.name == partition) - { - old = nvs; - break; - } + old = CurrentStats.Partitions.FirstOrDefault(nvs => nvs.name == partition); nw = new NameValueStats(); if(old != null) @@ -437,13 +410,7 @@ namespace DiscImageChef.Core if(AllStats.Filters == null) AllStats.Filters = new List(); if(CurrentStats.Filters == null) CurrentStats.Filters = new List(); - NameValueStats old = null; - foreach(NameValueStats nvs in AllStats.Filters) - if(nvs.name == format) - { - old = nvs; - break; - } + NameValueStats old = AllStats.Filters.FirstOrDefault(nvs => nvs.name == format); NameValueStats nw = new NameValueStats(); if(old != null) @@ -459,13 +426,7 @@ namespace DiscImageChef.Core } AllStats.Filters.Add(nw); - old = null; - foreach(NameValueStats nvs in CurrentStats.Filters) - if(nvs.name == format) - { - old = nvs; - break; - } + old = CurrentStats.Filters.FirstOrDefault(nvs => nvs.name == format); nw = new NameValueStats(); if(old != null) @@ -489,13 +450,7 @@ namespace DiscImageChef.Core if(AllStats.MediaImages == null) AllStats.MediaImages = new List(); if(CurrentStats.MediaImages == null) CurrentStats.MediaImages = new List(); - NameValueStats old = null; - foreach(NameValueStats nvs in AllStats.MediaImages) - if(nvs.name == format) - { - old = nvs; - break; - } + NameValueStats old = AllStats.MediaImages.FirstOrDefault(nvs => nvs.name == format); NameValueStats nw = new NameValueStats(); if(old != null) @@ -511,13 +466,7 @@ namespace DiscImageChef.Core } AllStats.MediaImages.Add(nw); - old = null; - foreach(NameValueStats nvs in CurrentStats.MediaImages) - if(nvs.name == format) - { - old = nvs; - break; - } + old = CurrentStats.MediaImages.FirstOrDefault(nvs => nvs.name == format); nw = new NameValueStats(); if(old != null) @@ -546,14 +495,7 @@ namespace DiscImageChef.Core else if(dev.IsFireWire) deviceBus = "FireWire"; else deviceBus = dev.Type.ToString(); - DeviceStats old = null; - foreach(DeviceStats ds in AllStats.Devices) - if(ds.Manufacturer == dev.Manufacturer && ds.Model == dev.Model && ds.Revision == dev.Revision && - ds.Bus == deviceBus) - { - old = ds; - break; - } + DeviceStats old = AllStats.Devices.FirstOrDefault(ds => ds.Manufacturer == dev.Manufacturer && ds.Model == dev.Model && ds.Revision == dev.Revision && ds.Bus == deviceBus); if(old != null) AllStats.Devices.Remove(old); @@ -565,14 +507,7 @@ namespace DiscImageChef.Core nw.ManufacturerSpecified = true; AllStats.Devices.Add(nw); - old = null; - foreach(DeviceStats ds in CurrentStats.Devices) - if(ds.Manufacturer == dev.Manufacturer && ds.Model == dev.Model && ds.Revision == dev.Revision && - ds.Bus == deviceBus) - { - old = ds; - break; - } + old = CurrentStats.Devices.FirstOrDefault(ds => ds.Manufacturer == dev.Manufacturer && ds.Model == dev.Model && ds.Revision == dev.Revision && ds.Bus == deviceBus); if(old != null) CurrentStats.Devices.Remove(old); @@ -592,13 +527,7 @@ namespace DiscImageChef.Core if(AllStats.Medias == null) AllStats.Medias = new List(); if(CurrentStats.Medias == null) CurrentStats.Medias = new List(); - MediaStats old = null; - foreach(MediaStats ms in AllStats.Medias) - if(ms.real == real && ms.type == type.ToString()) - { - old = ms; - break; - } + MediaStats old = AllStats.Medias.FirstOrDefault(ms => ms.real == real && ms.type == type.ToString()); MediaStats nw = new MediaStats(); if(old != null) @@ -616,13 +545,7 @@ namespace DiscImageChef.Core } AllStats.Medias.Add(nw); - old = null; - foreach(MediaStats ms in CurrentStats.Medias) - if(ms.real == real && ms.type == type.ToString()) - { - old = ms; - break; - } + old = CurrentStats.Medias.FirstOrDefault(ms => ms.real == real && ms.type == type.ToString()); nw = new MediaStats(); if(old != null) diff --git a/DiscImageChef.Decoders/Floppy/Apple2.cs b/DiscImageChef.Decoders/Floppy/Apple2.cs index 6acf68108..0d1cb2459 100644 --- a/DiscImageChef.Decoders/Floppy/Apple2.cs +++ b/DiscImageChef.Decoders/Floppy/Apple2.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.Console; @@ -563,11 +564,8 @@ namespace DiscImageChef.Decoders.Floppy MemoryStream raw = new MemoryStream(); raw.Write(track.gap, 0, track.gap.Length); - foreach(RawSector sector in track.sectors) - { - byte[] rawSector = MarshalSector(sector); - raw.Write(rawSector, 0, rawSector.Length); - } + foreach(byte[] rawSector in track.sectors.Select(sector => MarshalSector(sector))) + { raw.Write(rawSector, 0, rawSector.Length); } return raw.ToArray(); } @@ -607,11 +605,7 @@ namespace DiscImageChef.Decoders.Floppy if(disk == null) return null; MemoryStream raw = new MemoryStream(); - foreach(RawTrack track in disk) - { - byte[] rawTrack = MarshalTrack(track); - raw.Write(rawTrack, 0, rawTrack.Length); - } + foreach(byte[] rawTrack in disk.Select(track => MarshalTrack(track))) { raw.Write(rawTrack, 0, rawTrack.Length); } return raw.ToArray(); } diff --git a/DiscImageChef.Decoders/Floppy/AppleSony.cs b/DiscImageChef.Decoders/Floppy/AppleSony.cs index cb9d495be..e2ac29f3a 100644 --- a/DiscImageChef.Decoders/Floppy/AppleSony.cs +++ b/DiscImageChef.Decoders/Floppy/AppleSony.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; namespace DiscImageChef.Decoders.Floppy @@ -446,11 +447,8 @@ namespace DiscImageChef.Decoders.Floppy MemoryStream raw = new MemoryStream(); raw.Write(track.gap, 0, track.gap.Length); - foreach(RawSector sector in track.sectors) - { - byte[] rawSector = MarshalSector(sector); - raw.Write(rawSector, 0, rawSector.Length); - } + foreach(byte[] rawSector in track.sectors.Select(sector => MarshalSector(sector))) + { raw.Write(rawSector, 0, rawSector.Length); } return raw.ToArray(); } @@ -490,11 +488,7 @@ namespace DiscImageChef.Decoders.Floppy if(disk == null) return null; MemoryStream raw = new MemoryStream(); - foreach(RawTrack track in disk) - { - byte[] rawTrack = MarshalTrack(track); - raw.Write(rawTrack, 0, rawTrack.Length); - } + foreach(byte[] rawTrack in disk.Select(track => MarshalTrack(track))) { raw.Write(rawTrack, 0, rawTrack.Length); } return raw.ToArray(); } diff --git a/DiscImageChef.Decoders/PCMCIA/CIS.cs b/DiscImageChef.Decoders/PCMCIA/CIS.cs index db96994ca..8b74c68c0 100644 --- a/DiscImageChef.Decoders/PCMCIA/CIS.cs +++ b/DiscImageChef.Decoders/PCMCIA/CIS.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; namespace DiscImageChef.Decoders.PCMCIA @@ -278,7 +279,7 @@ namespace DiscImageChef.Decoders.PCMCIA else { sb.AppendLine("\tAdditional information:"); - foreach(string info in tuple.AdditionalInformation) if(!string.IsNullOrEmpty(info)) sb.AppendFormat("\t\t{0}", info).AppendLine(); + foreach(string info in tuple.AdditionalInformation.Where(info => !string.IsNullOrEmpty(info))) sb.AppendFormat("\t\t{0}", info).AppendLine(); } return sb.ToString(); diff --git a/DiscImageChef.Decoders/SCSI/Modes/2A.cs b/DiscImageChef.Decoders/SCSI/Modes/2A.cs index 98316eee8..bbed1b6e3 100644 --- a/DiscImageChef.Decoders/SCSI/Modes/2A.cs +++ b/DiscImageChef.Decoders/SCSI/Modes/2A.cs @@ -30,6 +30,7 @@ // Copyright © 2011-2018 Natalia Portillo // ****************************************************************************/ +using System.Linq; using System.Text; namespace DiscImageChef.Decoders.SCSI @@ -413,14 +414,12 @@ namespace DiscImageChef.Decoders.SCSI } if(page.WriteSpeedPerformanceDescriptors != null) - foreach(ModePage_2A_WriteDescriptor descriptor in page.WriteSpeedPerformanceDescriptors) - if(descriptor.WriteSpeed > 0) - if(descriptor.RotationControl == 0) - sb.AppendFormat("\tDrive supports writing at {0} Kbyte/sec. in CLV mode", - descriptor.WriteSpeed).AppendLine(); - else if(descriptor.RotationControl == 1) - sb.AppendFormat("\tDrive supports writing at is {0} Kbyte/sec. in pure CAV mode", - descriptor.WriteSpeed).AppendLine(); + foreach(ModePage_2A_WriteDescriptor descriptor in page.WriteSpeedPerformanceDescriptors.Where(descriptor => descriptor.WriteSpeed > 0)) if(descriptor.RotationControl == 0) + sb.AppendFormat("\tDrive supports writing at {0} Kbyte/sec. in CLV mode", + descriptor.WriteSpeed).AppendLine(); + else if(descriptor.RotationControl == 1) + sb.AppendFormat("\tDrive supports writing at is {0} Kbyte/sec. in pure CAV mode", + descriptor.WriteSpeed).AppendLine(); if(page.TestWrite) sb.AppendLine("\tDrive supports test writing"); diff --git a/DiscImageChef.Decoders/SCSI/Modes/Mode10.cs b/DiscImageChef.Decoders/SCSI/Modes/Mode10.cs index 7202acd49..d2d255af3 100644 --- a/DiscImageChef.Decoders/SCSI/Modes/Mode10.cs +++ b/DiscImageChef.Decoders/SCSI/Modes/Mode10.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; namespace DiscImageChef.Decoders.SCSI { @@ -275,7 +276,7 @@ namespace DiscImageChef.Decoders.SCSI public static byte[] EncodeMode10(DecodedMode mode, PeripheralDeviceTypes deviceType) { int modeSize = 0; - if(mode.Pages != null) foreach(ModePage page in mode.Pages) modeSize += page.PageResponse.Length; + if(mode.Pages != null) modeSize += mode.Pages.Sum(page => page.PageResponse.Length); byte[] hdr = EncodeModeHeader10(mode.Header, deviceType); modeSize += hdr.Length; diff --git a/DiscImageChef.Decoders/SCSI/Modes/Mode6.cs b/DiscImageChef.Decoders/SCSI/Modes/Mode6.cs index fc691e0c2..c0d0bb74c 100644 --- a/DiscImageChef.Decoders/SCSI/Modes/Mode6.cs +++ b/DiscImageChef.Decoders/SCSI/Modes/Mode6.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; namespace DiscImageChef.Decoders.SCSI { @@ -205,7 +206,7 @@ namespace DiscImageChef.Decoders.SCSI public static byte[] EncodeMode6(DecodedMode mode, PeripheralDeviceTypes deviceType) { int modeSize = 0; - if(mode.Pages != null) foreach(ModePage page in mode.Pages) modeSize += page.PageResponse.Length; + if(mode.Pages != null) modeSize += mode.Pages.Sum(page => page.PageResponse.Length); byte[] hdr = EncodeModeHeader6(mode.Header, deviceType); modeSize += hdr.Length; diff --git a/DiscImageChef.Devices/Device/Constructor.cs b/DiscImageChef.Devices/Device/Constructor.cs index fbeaed039..cbfc94eca 100644 --- a/DiscImageChef.Devices/Device/Constructor.cs +++ b/DiscImageChef.Devices/Device/Constructor.cs @@ -31,6 +31,7 @@ // ****************************************************************************/ using System; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.Console; using DiscImageChef.Decoders.ATA; @@ -670,7 +671,7 @@ namespace DiscImageChef.Devices if(string.IsNullOrEmpty(manufacturer)) manufacturer = usbManufacturerString; if(string.IsNullOrEmpty(model)) model = usbProductString; if(string.IsNullOrEmpty(serial)) serial = usbSerialString; - else foreach(char c in serial) if(char.IsControl(c)) serial = usbSerialString; + else foreach(char c in serial.Where(c => char.IsControl(c))) serial = usbSerialString; } if(!firewire) return; @@ -678,7 +679,7 @@ namespace DiscImageChef.Devices if(string.IsNullOrEmpty(manufacturer)) manufacturer = firewireVendorName; if(string.IsNullOrEmpty(model)) model = firewireModelName; if(string.IsNullOrEmpty(serial)) serial = string.Format("{0:X16}", firewireGuid); - else foreach(char c in serial) if(char.IsControl(c)) serial = string.Format("{0:X16}", firewireGuid); + else foreach(char c in serial.Where(c => char.IsControl(c))) serial = string.Format("{0:X16}", firewireGuid); } static int ConvertFromHexAscii(string file, out byte[] outBuf) diff --git a/DiscImageChef.Devices/Windows/ListDevices.cs b/DiscImageChef.Devices/Windows/ListDevices.cs index 44afa80a7..ddeadd5d5 100644 --- a/DiscImageChef.Devices/Windows/ListDevices.cs +++ b/DiscImageChef.Devices/Windows/ListDevices.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Management; using System.Runtime.InteropServices; using System.Text; @@ -61,17 +62,17 @@ namespace DiscImageChef.Devices.Windows new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); ManagementObjectCollection objCol = mgmtObjSearcher.Get(); - foreach(ManagementObject drive in objCol) deviceIDs.Add((string)drive["DeviceID"]); + deviceIDs.AddRange(from ManagementObject drive in objCol select (string)drive["DeviceID"]); mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_TapeDrive"); objCol = mgmtObjSearcher.Get(); - foreach(ManagementObject drive in objCol) deviceIDs.Add((string)drive["DeviceID"]); + deviceIDs.AddRange(from ManagementObject drive in objCol select (string)drive["DeviceID"]); mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_CDROMDrive"); objCol = mgmtObjSearcher.Get(); - foreach(ManagementObject drive in objCol) deviceIDs.Add((string)drive["Drive"]); + deviceIDs.AddRange(from ManagementObject drive in objCol select (string)drive["Drive"]); } catch(Exception ex) { diff --git a/DiscImageChef.DiscImages/Alcohol120.cs b/DiscImageChef.DiscImages/Alcohol120.cs index 5a893d8c6..5088d3d7a 100644 --- a/DiscImageChef.DiscImages/Alcohol120.cs +++ b/DiscImageChef.DiscImages/Alcohol120.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.CommonTypes; @@ -1386,14 +1387,7 @@ namespace DiscImageChef.DiscImages foreach(AlcoholTrack track in alcTracks.Values) { - ushort sessionNo = 0; - - foreach(Session session in sessions) - if(track.point >= session.StartTrack || track.point <= session.EndTrack) - { - sessionNo = session.SessionSequence; - break; - } + ushort sessionNo = (from session in sessions where track.point >= session.StartTrack || track.point <= session.EndTrack select session.SessionSequence).FirstOrDefault(); AlcoholTrackExtra extra; if(!alcTrackExtras.TryGetValue(track.point, out extra)) continue; @@ -1447,14 +1441,7 @@ namespace DiscImageChef.DiscImages foreach(AlcoholTrack track in alcTracks.Values) { - ushort sessionNo = 0; - - foreach(Session ses in sessions) - if(track.point >= ses.StartTrack || track.point <= ses.EndTrack) - { - sessionNo = ses.SessionSequence; - break; - } + ushort sessionNo = (from ses in sessions where track.point >= ses.StartTrack || track.point <= ses.EndTrack select ses.SessionSequence).FirstOrDefault(); AlcoholTrackExtra extra; if(!alcTrackExtras.TryGetValue(track.point, out extra) || session != sessionNo) continue; diff --git a/DiscImageChef.DiscImages/BlindWrite4.cs b/DiscImageChef.DiscImages/BlindWrite4.cs index 135bd6362..d86fbdad4 100644 --- a/DiscImageChef.DiscImages/BlindWrite4.cs +++ b/DiscImageChef.DiscImages/BlindWrite4.cs @@ -807,14 +807,12 @@ namespace DiscImageChef.DiscImages session.StartTrack = uint.MaxValue; session.StartSector = uint.MaxValue; - foreach(Track track in tracks) - if(track.TrackSession == i) - { - if(track.TrackSequence < session.StartTrack) session.StartTrack = track.TrackSequence; - if(track.TrackSequence > session.EndTrack) session.StartTrack = track.TrackSequence; - if(track.TrackStartSector < session.StartSector) session.StartSector = track.TrackStartSector; - if(track.TrackEndSector > session.EndSector) session.EndSector = track.TrackEndSector; - } + foreach(Track track in tracks.Where(track => track.TrackSession == i)) { + if(track.TrackSequence < session.StartTrack) session.StartTrack = track.TrackSequence; + if(track.TrackSequence > session.EndTrack) session.StartTrack = track.TrackSequence; + if(track.TrackStartSector < session.StartSector) session.StartSector = track.TrackStartSector; + if(track.TrackEndSector > session.EndSector) session.EndSector = track.TrackEndSector; + } sessions.Add(session); } @@ -930,24 +928,14 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1 select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1 select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -958,12 +946,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track bwTrack in tracks) - if(bwTrack.TrackSequence == track) - { - _track = bwTrack; - break; - } + foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { + _track = bwTrack; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1040,12 +1026,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track bwTrack in tracks) - if(bwTrack.TrackSequence == track) - { - _track = bwTrack; - break; - } + foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { + _track = bwTrack; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1214,12 +1198,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1 select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -1230,12 +1209,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track bwTrack in tracks) - if(bwTrack.TrackSequence == track) - { - _track = bwTrack; - break; - } + foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { + _track = bwTrack; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1318,10 +1295,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - List tracks = new List(); - foreach(Track _track in this.tracks) if(_track.TrackSession == session) tracks.Add(_track); - - return tracks; + return this.tracks.Where(_track => _track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/BlindWrite5.cs b/DiscImageChef.DiscImages/BlindWrite5.cs index 6d2782384..7e1bd1596 100644 --- a/DiscImageChef.DiscImages/BlindWrite5.cs +++ b/DiscImageChef.DiscImages/BlindWrite5.cs @@ -866,31 +866,29 @@ namespace DiscImageChef.DiscImages track.TrackStartSector = (ulong)(trk.startLba + trk.pregap); track.TrackEndSector = (ulong)(trk.sectors + trk.startLba); - foreach(DataFileCharacteristics chars in filePaths) - if(trk.startLba >= chars.StartLba && - trk.startLba + trk.sectors <= chars.StartLba + chars.Sectors) + foreach(DataFileCharacteristics chars in filePaths.Where(chars => trk.startLba >= chars.StartLba && + trk.startLba + trk.sectors <= chars.StartLba + chars.Sectors)) { + track.TrackFilter = chars.FileFilter; + track.TrackFile = chars.FileFilter.GetFilename(); + if(trk.startLba >= 0) + track.TrackFileOffset = (ulong)((trk.startLba - chars.StartLba) * chars.SectorSize); + else track.TrackFileOffset = (ulong)(trk.startLba * -1 * chars.SectorSize); + track.TrackFileType = "BINARY"; + if(chars.Subchannel != TrackSubchannelType.None) { - track.TrackFilter = chars.FileFilter; - track.TrackFile = chars.FileFilter.GetFilename(); - if(trk.startLba >= 0) - track.TrackFileOffset = (ulong)((trk.startLba - chars.StartLba) * chars.SectorSize); - else track.TrackFileOffset = (ulong)(trk.startLba * -1 * chars.SectorSize); - track.TrackFileType = "BINARY"; - if(chars.Subchannel != TrackSubchannelType.None) - { - track.TrackSubchannelFilter = track.TrackFilter; - track.TrackSubchannelFile = track.TrackFile; - track.TrackSubchannelType = chars.Subchannel; - track.TrackSubchannelOffset = track.TrackFileOffset; + track.TrackSubchannelFilter = track.TrackFilter; + track.TrackSubchannelFile = track.TrackFile; + track.TrackSubchannelType = chars.Subchannel; + track.TrackSubchannelOffset = track.TrackFileOffset; - if(chars.Subchannel == TrackSubchannelType.PackedInterleaved) - if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); - } - - break; + if(chars.Subchannel == TrackSubchannelType.PackedInterleaved) + if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); } + break; + } + track.TrackPregap = trk.pregap; track.TrackSequence = trk.point; track.TrackType = BlindWriteTrackTypeToTrackType(trk.type); @@ -1085,12 +1083,7 @@ namespace DiscImageChef.DiscImages { Decoders.CD.PMA.CDPMA pma0 = Decoders.CD.PMA.Decode(pma).Value; - foreach(Decoders.CD.PMA.CDPMADescriptors descriptor in pma0.PMADescriptors) - if(descriptor.ADR == 2) - { - uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame); - ImageInfo.MediaSerialNumber = string.Format("{0:X6}", id & 0x00FFFFFF); - } + foreach(uint id in from descriptor in pma0.PMADescriptors where descriptor.ADR == 2 select (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame)) ImageInfo.MediaSerialNumber = string.Format("{0:X6}", id & 0x00FFFFFF); } if(atip != null) @@ -1250,24 +1243,14 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -1280,12 +1263,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track bwTrack in tracks) - if(bwTrack.TrackSequence == track) - { - _track = bwTrack; - break; - } + foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { + _track = bwTrack; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1296,12 +1277,10 @@ namespace DiscImageChef.DiscImages .Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks", length + sectorAddress, _track.TrackEndSector)); - foreach(DataFileCharacteristics _chars in filePaths) - if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress) - { - chars = _chars; - break; - } + foreach(DataFileCharacteristics _chars in filePaths.Where(_chars => (long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)) { + chars = _chars; + break; + } if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null) throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image"); @@ -1401,12 +1380,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track bwTrack in tracks) - if(bwTrack.TrackSequence == track) - { - _track = bwTrack; - break; - } + foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { + _track = bwTrack; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1417,12 +1394,10 @@ namespace DiscImageChef.DiscImages .Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks", length + sectorAddress, _track.TrackEndSector)); - foreach(DataFileCharacteristics _chars in filePaths) - if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress) - { - chars = _chars; - break; - } + foreach(DataFileCharacteristics _chars in filePaths.Where(_chars => (long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)) { + chars = _chars; + break; + } if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null) throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image"); @@ -1692,12 +1667,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -1710,12 +1680,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track bwTrack in tracks) - if(bwTrack.TrackSequence == track) - { - _track = bwTrack; - break; - } + foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { + _track = bwTrack; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1726,12 +1694,10 @@ namespace DiscImageChef.DiscImages .Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks", length + sectorAddress, _track.TrackEndSector)); - foreach(DataFileCharacteristics _chars in filePaths) - if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress) - { - chars = _chars; - break; - } + foreach(DataFileCharacteristics _chars in filePaths.Where(_chars => (long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)) { + chars = _chars; + break; + } if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null) throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image"); @@ -1837,10 +1803,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - List tracks = new List(); - foreach(Track _track in this.tracks) if(_track.TrackSession == session) tracks.Add(_track); - - return tracks; + return this.tracks.Where(_track => _track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/CDRDAO.cs b/DiscImageChef.DiscImages/CDRDAO.cs index 10e3fc35d..e746efd86 100644 --- a/DiscImageChef.DiscImages/CDRDAO.cs +++ b/DiscImageChef.DiscImages/CDRDAO.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; using DiscImageChef.CommonTypes; @@ -1062,12 +1063,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks) - if(cdrdaoTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from cdrdaoTrack in discimage.Tracks where cdrdaoTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < cdrdaoTrack.Sectors select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -1075,12 +1071,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks) - if(cdrdaoTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from cdrdaoTrack in discimage.Tracks where cdrdaoTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < cdrdaoTrack.Sectors select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -1092,12 +1083,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks) - if(cdrdaoTrack.Sequence == track) - { - _track = cdrdaoTrack; - break; - } + foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks.Where(cdrdaoTrack => cdrdaoTrack.Sequence == track)) { + _track = cdrdaoTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1188,12 +1177,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks) - if(cdrdaoTrack.Sequence == track) - { - _track = cdrdaoTrack; - break; - } + foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks.Where(cdrdaoTrack => cdrdaoTrack.Sequence == track)) { + _track = cdrdaoTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1372,12 +1359,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks) - if(cdrdaoTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from cdrdaoTrack in discimage.Tracks where cdrdaoTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < cdrdaoTrack.Sectors select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -1388,12 +1370,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks) - if(cdrdaoTrack.Sequence == track) - { - _track = cdrdaoTrack; - break; - } + foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks.Where(cdrdaoTrack => cdrdaoTrack.Sequence == track)) { + _track = cdrdaoTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); diff --git a/DiscImageChef.DiscImages/CDRWin.cs b/DiscImageChef.DiscImages/CDRWin.cs index 3f4247022..fe072c615 100644 --- a/DiscImageChef.DiscImages/CDRWin.cs +++ b/DiscImageChef.DiscImages/CDRWin.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; using DiscImageChef.CommonTypes; @@ -1364,24 +1365,14 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(CdrWinTrack cdrwinTrack in discimage.Tracks) - if(cdrwinTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < cdrwinTrack.Sectors) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from cdrwinTrack in discimage.Tracks where cdrwinTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < cdrwinTrack.Sectors select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(CdrWinTrack cdrwinTrack in discimage.Tracks) - if(cdrwinTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < cdrwinTrack.Sectors) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from cdrwinTrack in discimage.Tracks where cdrwinTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < cdrwinTrack.Sectors select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -1392,12 +1383,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(CdrWinTrack cdrwinTrack in discimage.Tracks) - if(cdrwinTrack.Sequence == track) - { - _track = cdrwinTrack; - break; - } + foreach(CdrWinTrack cdrwinTrack in discimage.Tracks.Where(cdrwinTrack => cdrwinTrack.Sequence == track)) { + _track = cdrwinTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1500,12 +1489,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(CdrWinTrack cdrwinTrack in discimage.Tracks) - if(cdrwinTrack.Sequence == track) - { - _track = cdrwinTrack; - break; - } + foreach(CdrWinTrack cdrwinTrack in discimage.Tracks.Where(cdrwinTrack => cdrwinTrack.Sequence == track)) { + _track = cdrwinTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1691,12 +1678,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(CdrWinTrack cdrwinTrack in discimage.Tracks) - if(cdrwinTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < cdrwinTrack.Sectors) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from cdrwinTrack in discimage.Tracks where cdrwinTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < cdrwinTrack.Sectors select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -1707,12 +1689,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(CdrWinTrack cdrwinTrack in discimage.Tracks) - if(cdrwinTrack.Sequence == track) - { - _track = cdrwinTrack; - break; - } + foreach(CdrWinTrack cdrwinTrack in discimage.Tracks.Where(cdrwinTrack => cdrwinTrack.Sequence == track)) { + _track = cdrwinTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); diff --git a/DiscImageChef.DiscImages/CHD.cs b/DiscImageChef.DiscImages/CHD.cs index bc364f87c..1b6823142 100644 --- a/DiscImageChef.DiscImages/CHD.cs +++ b/DiscImageChef.DiscImages/CHD.cs @@ -1631,7 +1631,7 @@ namespace DiscImageChef.DiscImages Track GetTrack(ulong sector) { Track track = new Track(); - foreach(KeyValuePair kvp in offsetmap) if(sector >= kvp.Key) tracks.TryGetValue(kvp.Value, out track); + foreach(KeyValuePair kvp in offsetmap.Where(kvp => sector >= kvp.Key)) tracks.TryGetValue(kvp.Value, out track); return track; } @@ -2450,10 +2450,7 @@ namespace DiscImageChef.DiscImages if(isHdd) throw new FeaturedNotSupportedByDiscImageException("Cannot access optical tracks on a hard disk image"); - List trks = new List(); - foreach(Track track in tracks.Values) trks.Add(track); - - return trks; + return tracks.Values.ToList(); } public override List GetSessionTracks(Session session) @@ -2469,10 +2466,7 @@ namespace DiscImageChef.DiscImages if(isHdd) throw new FeaturedNotSupportedByDiscImageException("Cannot access optical tracks on a hard disk image"); - List trks = new List(); - foreach(Track track in tracks.Values) if(track.TrackSession == session) trks.Add(track); - - return trks; + return tracks.Values.Where(track => track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/CloneCD.cs b/DiscImageChef.DiscImages/CloneCD.cs index 02aa00cfb..15cfe9622 100644 --- a/DiscImageChef.DiscImages/CloneCD.cs +++ b/DiscImageChef.DiscImages/CloneCD.cs @@ -908,12 +908,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in tracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress <= _track.TrackEndSector) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in tracks where _track.TrackSequence == kvp.Key where sectorAddress <= _track.TrackEndSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -921,12 +916,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in tracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress <= _track.TrackEndSector) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in tracks where _track.TrackSequence == kvp.Key where sectorAddress <= _track.TrackEndSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -938,12 +928,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track __track in tracks) - if(__track.TrackSequence == track) - { - _track = __track; - break; - } + foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { + _track = __track; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1023,12 +1011,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track __track in tracks) - if(__track.TrackSequence == track) - { - _track = __track; - break; - } + foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { + _track = __track; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1274,12 +1260,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1 select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -1291,12 +1272,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track __track in tracks) - if(__track.TrackSequence == track) - { - _track = __track; - break; - } + foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { + _track = __track; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1434,10 +1413,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - List tracks = new List(); - foreach(Track _track in this.tracks) if(_track.TrackSession == session) tracks.Add(_track); - - return tracks; + return this.tracks.Where(_track => _track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/DiscJuggler.cs b/DiscImageChef.DiscImages/DiscJuggler.cs index 4fb01cf09..8d208ee68 100644 --- a/DiscImageChef.DiscImages/DiscJuggler.cs +++ b/DiscImageChef.DiscImages/DiscJuggler.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -700,12 +701,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in tracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress < _track.TrackEndSector) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in tracks where _track.TrackSequence == kvp.Key where sectorAddress < _track.TrackEndSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -713,12 +709,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in tracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress < _track.TrackEndSector) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in offsetmap.Where(kvp => sectorAddress >= kvp.Value).Where(kvp => tracks.Where(_track => _track.TrackSequence == kvp.Key).Any(_track => sectorAddress < _track.TrackEndSector))) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -730,12 +721,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track __track in tracks) - if(__track.TrackSequence == track) - { - _track = __track; - break; - } + foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { + _track = __track; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -828,12 +817,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track __track in tracks) - if(__track.TrackSequence == track) - { - _track = __track; - break; - } + foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { + _track = __track; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1045,12 +1032,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track track in tracks) - if(track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -1062,12 +1044,10 @@ namespace DiscImageChef.DiscImages _track.TrackSequence = 0; - foreach(Track __track in tracks) - if(__track.TrackSequence == track) - { - _track = __track; - break; - } + foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { + _track = __track; + break; + } if(_track.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1233,10 +1213,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - List _tracks = new List(); - foreach(Track _track in tracks) if(_track.TrackSession == session) _tracks.Add(_track); - - return _tracks; + return tracks.Where(_track => _track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/GDI.cs b/DiscImageChef.DiscImages/GDI.cs index dd80a2121..498d4b243 100644 --- a/DiscImageChef.DiscImages/GDI.cs +++ b/DiscImageChef.DiscImages/GDI.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text.RegularExpressions; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -294,39 +295,35 @@ namespace DiscImageChef.DiscImages { _sessions[s].SessionSequence = 1; - foreach(GdiTrack trk in discimage.Tracks) - if(!trk.HighDensity) - { - if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence; - else if(_sessions[s].StartTrack > trk.Sequence) _sessions[s].StartTrack = trk.Sequence; + foreach(GdiTrack trk in discimage.Tracks.Where(trk => !trk.HighDensity)) { + if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence; + else if(_sessions[s].StartTrack > trk.Sequence) _sessions[s].StartTrack = trk.Sequence; - if(_sessions[s].EndTrack < trk.Sequence) _sessions[s].EndTrack = trk.Sequence; + if(_sessions[s].EndTrack < trk.Sequence) _sessions[s].EndTrack = trk.Sequence; - if(_sessions[s].StartSector > trk.StartSector) - _sessions[s].StartSector = trk.StartSector; + if(_sessions[s].StartSector > trk.StartSector) + _sessions[s].StartSector = trk.StartSector; - if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) - _sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; - } + if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) + _sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; + } } else { _sessions[s].SessionSequence = 2; - foreach(GdiTrack trk in discimage.Tracks) - if(trk.HighDensity) - { - if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence; - else if(_sessions[s].StartTrack > trk.Sequence) _sessions[s].StartTrack = trk.Sequence; + foreach(GdiTrack trk in discimage.Tracks.Where(trk => trk.HighDensity)) { + if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence; + else if(_sessions[s].StartTrack > trk.Sequence) _sessions[s].StartTrack = trk.Sequence; - if(_sessions[s].EndTrack < trk.Sequence) _sessions[s].EndTrack = trk.Sequence; + if(_sessions[s].EndTrack < trk.Sequence) _sessions[s].EndTrack = trk.Sequence; - if(_sessions[s].StartSector > trk.StartSector) - _sessions[s].StartSector = trk.StartSector; + if(_sessions[s].StartSector > trk.StartSector) + _sessions[s].StartSector = trk.StartSector; - if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) - _sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; - } + if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) + _sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; + } } discimage.Sessions.Add(_sessions[0]); @@ -407,17 +404,15 @@ namespace DiscImageChef.DiscImages ImageInfo.SectorSize = 2352; // All others - foreach(GdiTrack track in discimage.Tracks) - if((track.Flags & 0x40) == 0x40 && track.Bps == 2352) - { - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync); - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorHeader); - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubHeader); - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEcc); - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccP); - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccQ); - ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEdc); - } + foreach(GdiTrack track in discimage.Tracks.Where(track => (track.Flags & 0x40) == 0x40 && track.Bps == 2352)) { + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync); + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorHeader); + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubHeader); + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEcc); + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccP); + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccQ); + ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEdc); + } ImageInfo.ImageCreationTime = imageFilter.GetCreationTime(); ImageInfo.ImageLastModificationTime = imageFilter.GetLastWriteTime(); @@ -488,12 +483,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(GdiTrack gdiTrack in discimage.Tracks) - if(gdiTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < gdiTrack.Sectors) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from gdiTrack in discimage.Tracks where gdiTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < gdiTrack.Sectors select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); ulong transitionStart; offsetmap.TryGetValue(0, out transitionStart); @@ -505,12 +495,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(GdiTrack gdiTrack in discimage.Tracks) - if(gdiTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < gdiTrack.Sectors) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from gdiTrack in discimage.Tracks where gdiTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < gdiTrack.Sectors select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); ulong transitionStart; offsetmap.TryGetValue(0, out transitionStart); @@ -535,12 +520,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(GdiTrack gdiTrack in discimage.Tracks) - if(gdiTrack.Sequence == track) - { - _track = gdiTrack; - break; - } + foreach(GdiTrack gdiTrack in discimage.Tracks.Where(gdiTrack => gdiTrack.Sequence == track)) { + _track = gdiTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -641,12 +624,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(GdiTrack gdiTrack in discimage.Tracks) - if(gdiTrack.Sequence == track) - { - _track = gdiTrack; - break; - } + foreach(GdiTrack gdiTrack in discimage.Tracks.Where(gdiTrack => gdiTrack.Sequence == track)) { + _track = gdiTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -796,12 +777,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(GdiTrack gdiTrack in discimage.Tracks) - if(gdiTrack.Sequence == kvp.Key) - if(sectorAddress - kvp.Value < gdiTrack.Sectors) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from gdiTrack in discimage.Tracks where gdiTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < gdiTrack.Sectors select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } @@ -821,12 +797,10 @@ namespace DiscImageChef.DiscImages _track.Sequence = 0; - foreach(GdiTrack gdiTrack in discimage.Tracks) - if(gdiTrack.Sequence == track) - { - _track = gdiTrack; - break; - } + foreach(GdiTrack gdiTrack in discimage.Tracks.Where(gdiTrack => gdiTrack.Sequence == track)) { + _track = gdiTrack; + break; + } if(_track.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); diff --git a/DiscImageChef.DiscImages/HDCopy.cs b/DiscImageChef.DiscImages/HDCopy.cs index b226d1646..0e24c1a10 100644 --- a/DiscImageChef.DiscImages/HDCopy.cs +++ b/DiscImageChef.DiscImages/HDCopy.cs @@ -66,6 +66,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -367,11 +368,7 @@ namespace DiscImageChef.DiscImages public override MediaType GetMediaType() { - foreach(MediaTypeTableEntry ent in mediaTypes) - if(ent.Tracks == ImageInfo.Cylinders && ent.SectorsPerTrack == ImageInfo.SectorsPerTrack) - return ent.MediaType; - - return MediaType.Unknown; + return (from ent in mediaTypes where ent.Tracks == ImageInfo.Cylinders && ent.SectorsPerTrack == ImageInfo.SectorsPerTrack select ent.MediaType).FirstOrDefault(); } void ReadTrackIntoCache(Stream stream, int tracknum) diff --git a/DiscImageChef.DiscImages/KryoFlux.cs b/DiscImageChef.DiscImages/KryoFlux.cs index 8ce3d0d23..99c6ee008 100644 --- a/DiscImageChef.DiscImages/KryoFlux.cs +++ b/DiscImageChef.DiscImages/KryoFlux.cs @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -283,11 +284,7 @@ namespace DiscImageChef.DiscImages DateTime blockTime = DateTime.Now; bool foundDate = false; - foreach(string line in lines) - { - string[] kvp = line.Split('='); - if(kvp.Length != 2) continue; - + foreach(string[] kvp in lines.Select(line => line.Split('=')).Where(kvp => kvp.Length == 2)) { kvp[0] = kvp[0].Trim(); kvp[1] = kvp[1].Trim(); DicConsole.DebugWriteLine("KryoFlux plugin", "\"{0}\" = \"{1}\"", kvp[0], kvp[1]); diff --git a/DiscImageChef.DiscImages/NDIF.cs b/DiscImageChef.DiscImages/NDIF.cs index 1a32fb284..d43169dc5 100644 --- a/DiscImageChef.DiscImages/NDIF.cs +++ b/DiscImageChef.DiscImages/NDIF.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using Claunia.RsrcFork; @@ -268,10 +269,7 @@ namespace DiscImageChef.DiscImages catch(InvalidCastException) { return false; } ImageInfo.Sectors = 0; - foreach(short id in bcems) - { - byte[] bcem = rsrc.GetResource(NDIF_RESOURCEID); - + foreach(byte[] bcem in bcems.Select(id => rsrc.GetResource(NDIF_RESOURCEID))) { if(bcem.Length < 128) return false; header = BigEndianMarshal.ByteArrayToStructureBigEndian(bcem); @@ -479,13 +477,11 @@ namespace DiscImageChef.DiscImages bool chunkFound = false; ulong chunkStartSector = 0; - foreach(KeyValuePair kvp in chunks) - if(sectorAddress >= kvp.Key) - { - currentChunk = kvp.Value; - chunkFound = true; - chunkStartSector = kvp.Key; - } + foreach(KeyValuePair kvp in chunks.Where(kvp => sectorAddress >= kvp.Key)) { + currentChunk = kvp.Value; + chunkFound = true; + chunkStartSector = kvp.Key; + } long relOff = ((long)sectorAddress - (long)chunkStartSector) * SECTOR_SIZE; diff --git a/DiscImageChef.DiscImages/Nero.cs b/DiscImageChef.DiscImages/Nero.cs index 585f9f0fc..f8dbf4f29 100644 --- a/DiscImageChef.DiscImages/Nero.cs +++ b/DiscImageChef.DiscImages/Nero.cs @@ -1834,12 +1834,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in imageTracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector) - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in imageTracks where _track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -1847,12 +1842,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in imageTracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector) - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in imageTracks where _track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -2200,12 +2190,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in offsetmap) - if(sectorAddress >= kvp.Value) - foreach(Track _track in imageTracks) - if(_track.TrackSequence == kvp.Key) - if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector) - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in imageTracks where _track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), string.Format("Sector address {0} not found", sectorAddress)); @@ -2347,10 +2332,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - List sessionTracks = new List(); - foreach(Track _track in imageTracks) if(_track.TrackSession == session) sessionTracks.Add(_track); - - return sessionTracks; + return imageTracks.Where(_track => _track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/UDIF.cs b/DiscImageChef.DiscImages/UDIF.cs index 4183e5b45..77c3af1d5 100644 --- a/DiscImageChef.DiscImages/UDIF.cs +++ b/DiscImageChef.DiscImages/UDIF.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using Claunia.PropertyList; using Claunia.RsrcFork; @@ -291,7 +292,7 @@ namespace DiscImageChef.DiscImages throw new ImageNotSupportedException("Image resource fork doesn't contain UDIF block chunks. Please fill an issue and send it to us."); - foreach(short blkxId in blkxRez.GetIds()) blkxList.Add(blkxRez.GetResource(blkxId)); + blkxList.AddRange(blkxRez.GetIds().Select(blkxId => blkxRez.GetResource(blkxId))); Resource versRez = rsrc.GetResource(0x76657273); @@ -322,9 +323,7 @@ namespace DiscImageChef.DiscImages NSObject[] blkx = ((NSArray)blkxObj).GetArray(); - foreach(NSObject partObj in blkx) - { - NSDictionary part = (NSDictionary)partObj; + foreach(NSDictionary part in blkx.Cast()) { NSObject nameObj, dataObj; if(!part.TryGetValue("Name", out nameObj)) throw new Exception("Could not retrieve Name"); @@ -518,13 +517,11 @@ namespace DiscImageChef.DiscImages bool chunkFound = false; ulong chunkStartSector = 0; - foreach(KeyValuePair kvp in chunks) - if(sectorAddress >= kvp.Key) - { - currentChunk = kvp.Value; - chunkFound = true; - chunkStartSector = kvp.Key; - } + foreach(KeyValuePair kvp in chunks.Where(kvp => sectorAddress >= kvp.Key)) { + currentChunk = kvp.Value; + chunkFound = true; + chunkStartSector = kvp.Key; + } long relOff = ((long)sectorAddress - (long)chunkStartSector) * SECTOR_SIZE; diff --git a/DiscImageChef.DiscImages/VHD.cs b/DiscImageChef.DiscImages/VHD.cs index fa5531417..68a3edd9a 100644 --- a/DiscImageChef.DiscImages/VHD.cs +++ b/DiscImageChef.DiscImages/VHD.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.CommonTypes; @@ -1207,8 +1208,7 @@ namespace DiscImageChef.DiscImages #region private methods static uint VhdChecksum(byte[] data) { - uint checksum = 0; - foreach(byte b in data) checksum += b; + uint checksum = data.Aggregate(0, (current, b) => current + b); return ~checksum; } diff --git a/DiscImageChef.DiscImages/VHDX.cs b/DiscImageChef.DiscImages/VHDX.cs index 73bf1a6ee..df073ed77 100644 --- a/DiscImageChef.DiscImages/VHDX.cs +++ b/DiscImageChef.DiscImages/VHDX.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.CommonTypes; @@ -900,8 +901,7 @@ namespace DiscImageChef.DiscImages #region private methods static uint VhdxChecksum(byte[] data) { - uint checksum = 0; - foreach(byte b in data) checksum += b; + uint checksum = data.Aggregate(0, (current, b) => current + b); return ~checksum; } diff --git a/DiscImageChef.DiscImages/VMware.cs b/DiscImageChef.DiscImages/VMware.cs index b72a026e4..61819707b 100644 --- a/DiscImageChef.DiscImages/VMware.cs +++ b/DiscImageChef.DiscImages/VMware.cs @@ -725,13 +725,11 @@ namespace DiscImageChef.DiscImages bool extentFound = false; ulong extentStartSector = 0; - foreach(KeyValuePair kvp in extents) - if(sectorAddress >= kvp.Key) - { - currentExtent = kvp.Value; - extentFound = true; - extentStartSector = kvp.Key; - } + foreach(KeyValuePair kvp in extents.Where(kvp => sectorAddress >= kvp.Key)) { + currentExtent = kvp.Value; + extentFound = true; + extentStartSector = kvp.Key; + } if(!extentFound) throw new ArgumentOutOfRangeException(nameof(sectorAddress), diff --git a/DiscImageChef.Filesystems/AmigaDOS.cs b/DiscImageChef.Filesystems/AmigaDOS.cs index ecb5ac06a..a1a0e486e 100644 --- a/DiscImageChef.Filesystems/AmigaDOS.cs +++ b/DiscImageChef.Filesystems/AmigaDOS.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.CommonTypes; @@ -261,10 +262,7 @@ namespace DiscImageChef.Filesystems RootBlock rblk = new RootBlock(); // So to handle even number of sectors - foreach(ulong root_ptr in root_ptrs) - { - if(root_ptr >= partition.End || root_ptr < partition.Start) continue; - + foreach(ulong root_ptr in root_ptrs.Where(root_ptr => root_ptr < partition.End && root_ptr >= partition.Start)) { DicConsole.DebugWriteLine("AmigaDOS plugin", "Searching for Rootblock in sector {0}", root_ptr); sector = imagePlugin.ReadSector(root_ptr); @@ -346,10 +344,7 @@ namespace DiscImageChef.Filesystems uint blockSize = 0; // So to handle even number of sectors - foreach(ulong root_ptr in root_ptrs) - { - if(root_ptr >= partition.End || root_ptr < partition.Start) continue; - + foreach(ulong root_ptr in root_ptrs.Where(root_ptr => root_ptr < partition.End && root_ptr >= partition.Start)) { DicConsole.DebugWriteLine("AmigaDOS plugin", "Searching for Rootblock in sector {0}", root_ptr); RootBlockSector = imagePlugin.ReadSector(root_ptr); diff --git a/DiscImageChef.Filesystems/AppleDOS/Dir.cs b/DiscImageChef.Filesystems/AppleDOS/Dir.cs index 3f6f97bfb..3cb85fee8 100644 --- a/DiscImageChef.Filesystems/AppleDOS/Dir.cs +++ b/DiscImageChef.Filesystems/AppleDOS/Dir.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; namespace DiscImageChef.Filesystems.AppleDOS @@ -63,8 +64,7 @@ namespace DiscImageChef.Filesystems.AppleDOS if(!string.IsNullOrEmpty(path) && string.Compare(path, "/", StringComparison.OrdinalIgnoreCase) != 0) return Errno.NotSupported; - contents = new List(); - foreach(string ent in catalogCache.Keys) contents.Add(ent); + contents = catalogCache.Keys.ToList(); if(debug) { @@ -103,31 +103,29 @@ namespace DiscImageChef.Filesystems.AppleDOS catSector = (CatalogSector)Marshal.PtrToStructure(catPtr, typeof(CatalogSector)); Marshal.FreeHGlobal(catPtr); - foreach(FileEntry entry in catSector.entries) - if(entry.extentTrack > 0) - { - track1UsedByFiles |= entry.extentTrack == 1; - track2UsedByFiles |= entry.extentTrack == 2; + foreach(FileEntry entry in catSector.entries.Where(entry => entry.extentTrack > 0)) { + track1UsedByFiles |= entry.extentTrack == 1; + track2UsedByFiles |= entry.extentTrack == 2; - byte[] filenameB = new byte[30]; - ushort ts = (ushort)((entry.extentTrack << 8) | entry.extentSector); + byte[] filenameB = new byte[30]; + ushort ts = (ushort)((entry.extentTrack << 8) | entry.extentSector); - // Apple DOS has high byte set over ASCII. - for(int i = 0; i < 30; i++) filenameB[i] = (byte)(entry.filename[i] & 0x7F); + // Apple DOS has high byte set over ASCII. + for(int i = 0; i < 30; i++) filenameB[i] = (byte)(entry.filename[i] & 0x7F); - string filename = StringHandlers.SpacePaddedToString(filenameB, CurrentEncoding); + string filename = StringHandlers.SpacePaddedToString(filenameB, CurrentEncoding); - if(!catalogCache.ContainsKey(filename)) catalogCache.Add(filename, ts); + if(!catalogCache.ContainsKey(filename)) catalogCache.Add(filename, ts); - if(!fileTypeCache.ContainsKey(filename)) - fileTypeCache.Add(filename, (byte)(entry.typeAndFlags & 0x7F)); + if(!fileTypeCache.ContainsKey(filename)) + fileTypeCache.Add(filename, (byte)(entry.typeAndFlags & 0x7F)); - if(!fileSizeCache.ContainsKey(filename)) - fileSizeCache.Add(filename, entry.length * vtoc.bytesPerSector); + if(!fileSizeCache.ContainsKey(filename)) + fileSizeCache.Add(filename, entry.length * vtoc.bytesPerSector); - if((entry.typeAndFlags & 0x80) == 0x80 && !lockedFiles.Contains(filename)) - lockedFiles.Add(filename); - } + if((entry.typeAndFlags & 0x80) == 0x80 && !lockedFiles.Contains(filename)) + lockedFiles.Add(filename); + } lba = (ulong)(catSector.trackOfNext * sectorsPerTrack + catSector.sectorOfNext); diff --git a/DiscImageChef.Filesystems/AppleMFS/Dir.cs b/DiscImageChef.Filesystems/AppleMFS/Dir.cs index a1fd7713f..46c0d5b47 100644 --- a/DiscImageChef.Filesystems/AppleMFS/Dir.cs +++ b/DiscImageChef.Filesystems/AppleMFS/Dir.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using DiscImageChef.Console; namespace DiscImageChef.Filesystems.AppleMFS @@ -46,8 +47,7 @@ namespace DiscImageChef.Filesystems.AppleMFS if(!string.IsNullOrEmpty(path) && string.Compare(path, "/", StringComparison.OrdinalIgnoreCase) != 0) return Errno.NotSupported; - contents = new List(); - foreach(KeyValuePair kvp in idToFilename) contents.Add(kvp.Value); + contents = idToFilename.Select(kvp => kvp.Value).ToList(); if(debug) { diff --git a/DiscImageChef.Filesystems/CPM/Info.cs b/DiscImageChef.Filesystems/CPM/Info.cs index d67e55558..89b727532 100644 --- a/DiscImageChef.Filesystems/CPM/Info.cs +++ b/DiscImageChef.Filesystems/CPM/Info.cs @@ -790,13 +790,7 @@ namespace DiscImageChef.Filesystems.CPM definitions.definitions.Count > 0) { DicConsole.DebugWriteLine("CP/M Plugin", "Trying all known definitions."); - foreach(CpmDefinition def in definitions.definitions) - { - ulong sectors = (ulong)(def.cylinders * def.sides * def.sectorsPerTrack); - - if(sectors != imagePlugin.GetSectors() || def.bytesPerSector != imagePlugin.GetSectorSize()) - continue; - + foreach(CpmDefinition def in from def in definitions.definitions let sectors = (ulong)(def.cylinders * def.sides * def.sectorsPerTrack) where sectors == imagePlugin.GetSectors() && def.bytesPerSector == imagePlugin.GetSectorSize() select def) { // Definition seems to describe current disk, at least, same number of volume sectors and bytes per sector DicConsole.DebugWriteLine("CP/M Plugin", "Trying definition \"{0}\"", def.comment); ulong offset; diff --git a/DiscImageChef.Filesystems/CPM/Super.cs b/DiscImageChef.Filesystems/CPM/Super.cs index 94a81d730..98f1191b5 100644 --- a/DiscImageChef.Filesystems/CPM/Super.cs +++ b/DiscImageChef.Filesystems/CPM/Super.cs @@ -35,6 +35,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.Console; @@ -282,7 +283,7 @@ namespace DiscImageChef.Filesystems.CPM // because that's where the directory resides. // There is also a field telling how many bytes are used in the last block, but its meaning is non-standard so // we must ignore it. - foreach(ushort blk in entry.allocations) if(!blocks.Contains(blk) && blk != 0) blocks.Add(blk); + foreach(ushort blk in entry.allocations.Where(blk => !blocks.Contains(blk) && blk != 0)) blocks.Add(blk); // Save the file fInfo.UID = (ulong)user; @@ -376,7 +377,7 @@ namespace DiscImageChef.Filesystems.CPM // because that's where the directory resides. // There is also a field telling how many bytes are used in the last block, but its meaning is non-standard so // we must ignore it. - foreach(ushort blk in entry.allocations) if(!blocks.Contains(blk) && blk != 0) blocks.Add(blk); + foreach(ushort blk in entry.allocations.Cast().Where(blk => !blocks.Contains(blk) && blk != 0)) blocks.Add(blk); // Save the file fInfo.UID = (ulong)user; diff --git a/DiscImageChef.Filesystems/FAT.cs b/DiscImageChef.Filesystems/FAT.cs index 132e7484b..0274bc1c0 100644 --- a/DiscImageChef.Filesystems/FAT.cs +++ b/DiscImageChef.Filesystems/FAT.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.CommonTypes; @@ -240,11 +241,8 @@ namespace DiscImageChef.Filesystems bool equal_fat_ids = fat1_sector0[0] == fat2_sector0[0] && fat1_sector0[1] == fat2_sector0[1]; // Volume is software interleaved 2:1 MemoryStream rootMs = new MemoryStream(); - foreach(ulong rootSector in new[] {0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20}) - { - byte[] tmp = imagePlugin.ReadSector(rootSector); - rootMs.Write(tmp, 0, tmp.Length); - } + foreach(byte[] tmp in from ulong rootSector in new[] {0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20} select imagePlugin.ReadSector(rootSector)) + { rootMs.Write(tmp, 0, tmp.Length); } byte[] root_dir = rootMs.ToArray(); rootMs = null; @@ -606,11 +604,8 @@ namespace DiscImageChef.Filesystems bool equal_fat_ids = fat1_sector0[0] == fat2_sector0[0] && fat1_sector0[1] == fat2_sector0[1]; // Volume is software interleaved 2:1 MemoryStream rootMs = new MemoryStream(); - foreach(ulong rootSector in new[] {0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20}) - { - byte[] tmp = imagePlugin.ReadSector(rootSector); - rootMs.Write(tmp, 0, tmp.Length); - } + foreach(byte[] tmp in from ulong rootSector in new[] {0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20} select imagePlugin.ReadSector(rootSector)) + { rootMs.Write(tmp, 0, tmp.Length); } byte[] root_dir = rootMs.ToArray(); rootMs = null; @@ -1310,11 +1305,8 @@ namespace DiscImageChef.Filesystems if(useDecRainbowBPB) { MemoryStream rootMs = new MemoryStream(); - foreach(ulong rootSector in new[] {0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20}) - { - byte[] tmp = imagePlugin.ReadSector(rootSector); - rootMs.Write(tmp, 0, tmp.Length); - } + foreach(byte[] tmp in from ulong rootSector in new[] {0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20} select imagePlugin.ReadSector(rootSector)) + { rootMs.Write(tmp, 0, tmp.Length); } root_directory = rootMs.ToArray(); rootMs = null; diff --git a/DiscImageChef.Filesystems/FFS.cs b/DiscImageChef.Filesystems/FFS.cs index 587e25eb9..096f5e54a 100644 --- a/DiscImageChef.Filesystems/FFS.cs +++ b/DiscImageChef.Filesystems/FFS.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.CommonTypes; @@ -86,16 +87,14 @@ namespace DiscImageChef.Filesystems 262144 / imagePlugin.GetSectorSize() }; - foreach(ulong loc in locations) - if(partition.End > partition.Start + loc + sb_size_in_sectors) - { - ufs_sb_sectors = imagePlugin.ReadSectors(partition.Start + loc, sb_size_in_sectors); - magic = BitConverter.ToUInt32(ufs_sb_sectors, 0x055C); + foreach(ulong loc in locations.Where(loc => partition.End > partition.Start + loc + sb_size_in_sectors)) { + ufs_sb_sectors = imagePlugin.ReadSectors(partition.Start + loc, sb_size_in_sectors); + magic = BitConverter.ToUInt32(ufs_sb_sectors, 0x055C); - if(magic == UFS_MAGIC || magic == UFS_CIGAM || magic == UFS_MAGIC_BW || magic == UFS_CIGAM_BW || - magic == UFS2_MAGIC || magic == UFS2_CIGAM || magic == UFS_BAD_MAGIC || - magic == UFS_BAD_CIGAM) return true; - } + if(magic == UFS_MAGIC || magic == UFS_CIGAM || magic == UFS_MAGIC_BW || magic == UFS_CIGAM_BW || + magic == UFS2_MAGIC || magic == UFS2_CIGAM || magic == UFS_BAD_MAGIC || + magic == UFS_BAD_CIGAM) return true; + } return false; } @@ -129,22 +128,20 @@ namespace DiscImageChef.Filesystems 262144 / imagePlugin.GetSectorSize() }; - foreach(ulong loc in locations) - if(partition.End > partition.Start + loc + sb_size_in_sectors) + foreach(ulong loc in locations.Where(loc => partition.End > partition.Start + loc + sb_size_in_sectors)) { + ufs_sb_sectors = imagePlugin.ReadSectors(partition.Start + loc, sb_size_in_sectors); + magic = BitConverter.ToUInt32(ufs_sb_sectors, 0x055C); + + if(magic == UFS_MAGIC || magic == UFS_CIGAM || magic == UFS_MAGIC_BW || magic == UFS_CIGAM_BW || + magic == UFS2_MAGIC || magic == UFS2_CIGAM || magic == UFS_BAD_MAGIC || magic == UFS_BAD_CIGAM) { - ufs_sb_sectors = imagePlugin.ReadSectors(partition.Start + loc, sb_size_in_sectors); - magic = BitConverter.ToUInt32(ufs_sb_sectors, 0x055C); - - if(magic == UFS_MAGIC || magic == UFS_CIGAM || magic == UFS_MAGIC_BW || magic == UFS_CIGAM_BW || - magic == UFS2_MAGIC || magic == UFS2_CIGAM || magic == UFS_BAD_MAGIC || magic == UFS_BAD_CIGAM) - { - sb_offset = partition.Start + loc; - break; - } - - magic = 0; + sb_offset = partition.Start + loc; + break; } + magic = 0; + } + if(magic == 0) { information = "Not a UFS filesystem, I shouldn't have arrived here!"; diff --git a/DiscImageChef.Filesystems/LisaFS/Dir.cs b/DiscImageChef.Filesystems/LisaFS/Dir.cs index 33a77007a..4d5c859e0 100644 --- a/DiscImageChef.Filesystems/LisaFS/Dir.cs +++ b/DiscImageChef.Filesystems/LisaFS/Dir.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using DiscImageChef.Decoders; using DiscImageChef.DiscImages; @@ -89,12 +90,9 @@ namespace DiscImageChef.Filesystems.LisaFS Errno ReadDir(short dirId, ref List contents) { - contents = new List(); - foreach(CatalogEntry entry in catalogCache) - if(entry.parentID == dirId) - // Do same trick as Mac OS X, replace filesystem '/' with '-', - // as '-' is the path separator in Lisa OS - contents.Add(StringHandlers.CToString(entry.filename, CurrentEncoding).Replace('/', '-')); + // Do same trick as Mac OS X, replace filesystem '/' with '-', + // as '-' is the path separator in Lisa OS + contents = (from entry in catalogCache where entry.parentID == dirId select StringHandlers.CToString(entry.filename, CurrentEncoding).Replace('/', '-')).ToList(); return Errno.NoError; } diff --git a/DiscImageChef.Filesystems/ProDOS.cs b/DiscImageChef.Filesystems/ProDOS.cs index 95fecc40e..6f4c7cda9 100644 --- a/DiscImageChef.Filesystems/ProDOS.cs +++ b/DiscImageChef.Filesystems/ProDOS.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -115,15 +116,13 @@ namespace DiscImageChef.Filesystems { byte[] tmp = imagePlugin.ReadSectors(partition.Start, 2); - foreach(int offset in new[] {0, 0x200, 0x400, 0x600, 0x800, 0xA00}) - if(BitConverter.ToUInt16(tmp, offset) == 0 && - (byte)((tmp[offset + 0x04] & ProDOSStorageTypeMask) >> 4) == RootDirectoryType && - tmp[offset + 0x23] == ProDOSEntryLength && tmp[offset + 0x24] == ProDOSEntriesPerBlock) - { - Array.Copy(tmp, offset, rootDirectoryKeyBlock, 0, 0x200); - APMFromHDDOnCD = true; - break; - } + foreach(int offset in new[] {0, 0x200, 0x400, 0x600, 0x800, 0xA00}.Where(offset => BitConverter.ToUInt16(tmp, offset) == 0 && + (byte)((tmp[offset + 0x04] & ProDOSStorageTypeMask) >> 4) == RootDirectoryType && + tmp[offset + 0x23] == ProDOSEntryLength && tmp[offset + 0x24] == ProDOSEntriesPerBlock)) { + Array.Copy(tmp, offset, rootDirectoryKeyBlock, 0, 0x200); + APMFromHDDOnCD = true; + break; + } } ushort prePointer = BitConverter.ToUInt16(rootDirectoryKeyBlock, 0); @@ -169,15 +168,13 @@ namespace DiscImageChef.Filesystems { byte[] tmp = imagePlugin.ReadSectors(partition.Start, 2); - foreach(int offset in new[] {0, 0x200, 0x400, 0x600, 0x800, 0xA00}) - if(BitConverter.ToUInt16(tmp, offset) == 0 && - (byte)((tmp[offset + 0x04] & ProDOSStorageTypeMask) >> 4) == RootDirectoryType && - tmp[offset + 0x23] == ProDOSEntryLength && tmp[offset + 0x24] == ProDOSEntriesPerBlock) - { - Array.Copy(tmp, offset, rootDirectoryKeyBlockBytes, 0, 0x200); - APMFromHDDOnCD = true; - break; - } + foreach(int offset in new[] {0, 0x200, 0x400, 0x600, 0x800, 0xA00}.Where(offset => BitConverter.ToUInt16(tmp, offset) == 0 && + (byte)((tmp[offset + 0x04] & ProDOSStorageTypeMask) >> 4) == RootDirectoryType && + tmp[offset + 0x23] == ProDOSEntryLength && tmp[offset + 0x24] == ProDOSEntriesPerBlock)) { + Array.Copy(tmp, offset, rootDirectoryKeyBlockBytes, 0, 0x200); + APMFromHDDOnCD = true; + break; + } } ProDOSRootDirectoryKeyBlock rootDirectoryKeyBlock = new ProDOSRootDirectoryKeyBlock(); diff --git a/DiscImageChef.Filesystems/SysV.cs b/DiscImageChef.Filesystems/SysV.cs index 77da910f6..1b96f07fd 100644 --- a/DiscImageChef.Filesystems/SysV.cs +++ b/DiscImageChef.Filesystems/SysV.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using DiscImageChef.CommonTypes; @@ -132,12 +133,7 @@ namespace DiscImageChef.Filesystems spc }; - foreach(int i in locations) - { - if(i + sb_size_in_sectors >= (int)imagePlugin.ImageInfo.Sectors) break; - - byte[] sb_sector = imagePlugin.ReadSectors((ulong)i + partition.Start, sb_size_in_sectors); - + foreach(byte[] sb_sector in locations.TakeWhile(i => i + sb_size_in_sectors < (int)imagePlugin.ImageInfo.Sectors).Select(i => imagePlugin.ReadSectors((ulong)i + partition.Start, sb_size_in_sectors))) { magic = BitConverter.ToUInt32(sb_sector, 0x3F8); // XENIX magic location if(magic == XENIX_MAGIC || magic == XENIX_CIGAM || magic == SYSV_MAGIC || magic == SYSV_CIGAM) diff --git a/DiscImageChef.Filesystems/UCSDPascal/Dir.cs b/DiscImageChef.Filesystems/UCSDPascal/Dir.cs index 9f1d0740f..22ddc86c6 100644 --- a/DiscImageChef.Filesystems/UCSDPascal/Dir.cs +++ b/DiscImageChef.Filesystems/UCSDPascal/Dir.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; namespace DiscImageChef.Filesystems.UCSDPascal { @@ -45,9 +46,7 @@ namespace DiscImageChef.Filesystems.UCSDPascal if(!string.IsNullOrEmpty(path) && string.Compare(path, "/", StringComparison.OrdinalIgnoreCase) != 0) return Errno.NotSupported; - contents = new List(); - foreach(PascalFileEntry ent in fileEntries) - contents.Add(StringHandlers.PascalToString(ent.filename, CurrentEncoding)); + contents = fileEntries.Select(ent => StringHandlers.PascalToString(ent.filename, CurrentEncoding)).ToList(); if(debug) { diff --git a/DiscImageChef.Filesystems/UCSDPascal/File.cs b/DiscImageChef.Filesystems/UCSDPascal/File.cs index 733300919..e861e8909 100644 --- a/DiscImageChef.Filesystems/UCSDPascal/File.cs +++ b/DiscImageChef.Filesystems/UCSDPascal/File.cs @@ -31,6 +31,7 @@ // ****************************************************************************/ using System; +using System.Linq; namespace DiscImageChef.Filesystems.UCSDPascal { @@ -163,13 +164,11 @@ namespace DiscImageChef.Filesystems.UCSDPascal { entry = new PascalFileEntry(); - foreach(PascalFileEntry ent in fileEntries) - if(string.Compare(path, StringHandlers.PascalToString(ent.filename, CurrentEncoding), - StringComparison.InvariantCultureIgnoreCase) == 0) - { - entry = ent; - return Errno.NoError; - } + foreach(PascalFileEntry ent in fileEntries.Where(ent => string.Compare(path, StringHandlers.PascalToString(ent.filename, CurrentEncoding), + StringComparison.InvariantCultureIgnoreCase) == 0)) { + entry = ent; + return Errno.NoError; + } return Errno.NoSuchFile; } diff --git a/DiscImageChef.Filesystems/UDF.cs b/DiscImageChef.Filesystems/UDF.cs index bcc631194..c8da26171 100644 --- a/DiscImageChef.Filesystems/UDF.cs +++ b/DiscImageChef.Filesystems/UDF.cs @@ -245,10 +245,7 @@ namespace DiscImageChef.Filesystems ulong[] positions = {256, 512, partition.End - 256, partition.End}; bool anchorFound = false; - foreach(ulong position in positions) - { - if(position + partition.Start >= partition.End) continue; - + foreach(ulong position in positions.Where(position => position + partition.Start < partition.End)) { sector = imagePlugin.ReadSector(position); anchor = new AnchorVolumeDescriptorPointer(); IntPtr anchorPtr = Marshal.AllocHGlobal(Marshal.SizeOf(anchor)); diff --git a/DiscImageChef.Helpers/ArrayIsEmpty.cs b/DiscImageChef.Helpers/ArrayIsEmpty.cs index b83f8b10c..bb3769e29 100644 --- a/DiscImageChef.Helpers/ArrayIsEmpty.cs +++ b/DiscImageChef.Helpers/ArrayIsEmpty.cs @@ -30,6 +30,8 @@ // Copyright © 2011-2018 Natalia Portillo // ****************************************************************************/ +using System.Linq; + namespace DiscImageChef { public static partial class ArrayHelpers @@ -38,18 +40,14 @@ namespace DiscImageChef { if(array == null) return true; - foreach(byte b in array) if(b != 0x00 && b != 0x20) return false; - - return true; + return array.All(b => b == 0x00 || b == 0x20); } public static bool ArrayIsNullOrEmpty(byte[] array) { if(array == null) return true; - foreach(byte b in array) if(b != 0x00) return false; - - return true; + return array.All(b => b == 0x00); } } } \ No newline at end of file diff --git a/DiscImageChef.Helpers/Extents/ExtentsByte.cs b/DiscImageChef.Helpers/Extents/ExtentsByte.cs index ad6e549bf..b96b174d8 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsByte.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsByte.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(byte item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(byte item, out byte start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsInt.cs b/DiscImageChef.Helpers/Extents/ExtentsInt.cs index ad651ff6e..92d989250 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsInt.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsInt.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(int item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(int item, out int start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsLong.cs b/DiscImageChef.Helpers/Extents/ExtentsLong.cs index 85fdf56d6..e958628fa 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsLong.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsLong.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(long item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(long item, out long start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsSByte.cs b/DiscImageChef.Helpers/Extents/ExtentsSByte.cs index 2444eb27e..c5d665611 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsSByte.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsSByte.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(sbyte item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(sbyte item, out sbyte start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsShort.cs b/DiscImageChef.Helpers/Extents/ExtentsShort.cs index ac32f34b5..604eee365 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsShort.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsShort.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(short item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(short item, out short start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsUInt.cs b/DiscImageChef.Helpers/Extents/ExtentsUInt.cs index 27a0e8b00..1eb22492c 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsUInt.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsUInt.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(uint item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(uint item, out uint start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsULong.cs b/DiscImageChef.Helpers/Extents/ExtentsULong.cs index 7fcea95c2..47e5a3ef6 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsULong.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsULong.cs @@ -125,9 +125,7 @@ namespace Extents public bool Contains(ulong item) { - foreach(Tuple extent in backend) if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -196,12 +194,10 @@ namespace Extents public bool GetStart(ulong item, out ulong start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Helpers/Extents/ExtentsUShort.cs b/DiscImageChef.Helpers/Extents/ExtentsUShort.cs index e9e11d4ce..6ee29957c 100644 --- a/DiscImageChef.Helpers/Extents/ExtentsUShort.cs +++ b/DiscImageChef.Helpers/Extents/ExtentsUShort.cs @@ -125,10 +125,7 @@ namespace Extents public bool Contains(ushort item) { - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) return true; - - return false; + return backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); } public void Clear() @@ -197,12 +194,10 @@ namespace Extents public bool GetStart(ushort item, out ushort start) { start = 0; - foreach(Tuple extent in backend) - if(item >= extent.Item1 && item <= extent.Item2) - { - start = extent.Item1; - return true; - } + foreach(Tuple extent in backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) { + start = extent.Item1; + return true; + } return false; } diff --git a/DiscImageChef.Metadata/ExtentsConverter.cs b/DiscImageChef.Metadata/ExtentsConverter.cs index e8e3e71ac..b48993aad 100644 --- a/DiscImageChef.Metadata/ExtentsConverter.cs +++ b/DiscImageChef.Metadata/ExtentsConverter.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Extents; using Schemas; @@ -56,9 +57,7 @@ namespace DiscImageChef.Metadata { if(extents == null) return null; - List> tuples = new List>(); - - foreach(ExtentType extent in extents) tuples.Add(new Tuple(extent.Start, extent.End)); + List> tuples = extents.Select(extent => new Tuple(extent.Start, extent.End)).ToList(); return new ExtentsULong(tuples); } diff --git a/DiscImageChef.Partitions/DEC.cs b/DiscImageChef.Partitions/DEC.cs index b596cb9a6..d9120a9c5 100644 --- a/DiscImageChef.Partitions/DEC.cs +++ b/DiscImageChef.Partitions/DEC.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.CommonTypes; using DiscImageChef.DiscImages; @@ -68,19 +69,15 @@ namespace DiscImageChef.Partitions ulong counter = 0; - foreach(DECPartition entry in table.pt_part) + foreach(Partition part in table.pt_part.Select(entry => new Partition { - Partition part = new Partition - { - Start = entry.pi_blkoff, - Offset = (ulong)(entry.pi_blkoff * sector.Length), - Size = (ulong)entry.pi_nblocks, - Length = (ulong)(entry.pi_nblocks * sector.Length), - Sequence = counter, - Scheme = Name - }; - if(part.Size <= 0) continue; - + Start = entry.pi_blkoff, + Offset = (ulong)(entry.pi_blkoff * sector.Length), + Size = (ulong)entry.pi_nblocks, + Length = (ulong)(entry.pi_nblocks * sector.Length), + Sequence = counter, + Scheme = Name + }).Where(part => part.Size > 0)) { partitions.Add(part); counter++; } diff --git a/DiscImageChef.Partitions/GPT.cs b/DiscImageChef.Partitions/GPT.cs index 32db18213..5c7558f2f 100644 --- a/DiscImageChef.Partitions/GPT.cs +++ b/DiscImageChef.Partitions/GPT.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.Console; @@ -150,34 +151,32 @@ namespace DiscImageChef.Partitions ulong pseq = 0; - foreach(GptEntry entry in entries) - if(entry.partitionType != Guid.Empty && entry.partitionId != Guid.Empty) + foreach(GptEntry entry in entries.Where(entry => entry.partitionType != Guid.Empty && entry.partitionId != Guid.Empty)) { + DicConsole.DebugWriteLine("GPT Plugin", "entry.partitionType = {0}", entry.partitionType); + DicConsole.DebugWriteLine("GPT Plugin", "entry.partitionId = {0}", entry.partitionId); + DicConsole.DebugWriteLine("GPT Plugin", "entry.startLBA = {0}", entry.startLBA); + DicConsole.DebugWriteLine("GPT Plugin", "entry.endLBA = {0}", entry.endLBA); + DicConsole.DebugWriteLine("GPT Plugin", "entry.attributes = 0x{0:X16}", entry.attributes); + DicConsole.DebugWriteLine("GPT Plugin", "entry.name = {0}", entry.name); + + if(entry.startLBA / divisor > imagePlugin.GetSectors() || + entry.endLBA / divisor > imagePlugin.GetSectors()) return false; + + CommonTypes.Partition part = new CommonTypes.Partition { - DicConsole.DebugWriteLine("GPT Plugin", "entry.partitionType = {0}", entry.partitionType); - DicConsole.DebugWriteLine("GPT Plugin", "entry.partitionId = {0}", entry.partitionId); - DicConsole.DebugWriteLine("GPT Plugin", "entry.startLBA = {0}", entry.startLBA); - DicConsole.DebugWriteLine("GPT Plugin", "entry.endLBA = {0}", entry.endLBA); - DicConsole.DebugWriteLine("GPT Plugin", "entry.attributes = 0x{0:X16}", entry.attributes); - DicConsole.DebugWriteLine("GPT Plugin", "entry.name = {0}", entry.name); - - if(entry.startLBA / divisor > imagePlugin.GetSectors() || - entry.endLBA / divisor > imagePlugin.GetSectors()) return false; - - CommonTypes.Partition part = new CommonTypes.Partition - { - Description = string.Format("ID: {0}", entry.partitionId), - Size = (entry.endLBA - entry.startLBA + 1) * sectorSize, - Name = entry.name, - Length = (entry.endLBA - entry.startLBA + 1) / divisor, - Sequence = pseq++, - Offset = entry.startLBA * sectorSize, - Start = entry.startLBA / divisor, - Type = GetGuidTypeName(entry.partitionType), - Scheme = Name - }; - DicConsole.DebugWriteLine("GPT Plugin", "part.PartitionType = {0}", part.Type); - partitions.Add(part); - } + Description = string.Format("ID: {0}", entry.partitionId), + Size = (entry.endLBA - entry.startLBA + 1) * sectorSize, + Name = entry.name, + Length = (entry.endLBA - entry.startLBA + 1) / divisor, + Sequence = pseq++, + Offset = entry.startLBA * sectorSize, + Start = entry.startLBA / divisor, + Type = GetGuidTypeName(entry.partitionType), + Scheme = Name + }; + DicConsole.DebugWriteLine("GPT Plugin", "part.PartitionType = {0}", part.Type); + partitions.Add(part); + } return true; } diff --git a/DiscImageChef.Partitions/NeXT.cs b/DiscImageChef.Partitions/NeXT.cs index 00f664363..b0b63dbf5 100644 --- a/DiscImageChef.Partitions/NeXT.cs +++ b/DiscImageChef.Partitions/NeXT.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using DiscImageChef.Console; @@ -76,10 +77,7 @@ namespace DiscImageChef.Partitions ulong label_position = 0; - foreach(ulong i in new ulong[] {0, 4, 15, 16}) - { - if(i + sectorOffset >= imagePlugin.GetSectors()) break; - + foreach(ulong i in new ulong[] {0, 4, 15, 16}.TakeWhile(i => i + sectorOffset < imagePlugin.GetSectors())) { label_sector = imagePlugin.ReadSector(i + sectorOffset); magic = BigEndianBitConverter.ToUInt32(label_sector, 0x00); if(magic != NEXT_MAGIC1 && magic != NEXT_MAGIC2 && magic != NEXT_MAGIC3) continue; diff --git a/DiscImageChef.Partitions/Plan9.cs b/DiscImageChef.Partitions/Plan9.cs index d8bbedbed..8fffee6b2 100644 --- a/DiscImageChef.Partitions/Plan9.cs +++ b/DiscImageChef.Partitions/Plan9.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using DiscImageChef.CommonTypes; namespace DiscImageChef.Partitions @@ -60,14 +61,7 @@ namespace DiscImageChef.Partitions // While all of Plan9 is supposedly UTF-8, it uses ASCII strcmp for reading its partition table string[] really = StringHandlers.CToString(sector).Split(new[] {'\n'}); - foreach(string part in really) - { - if(part.Length < 5 || part.Substring(0, 5) != "part ") break; - - string[] tokens = part.Split(new[] {' '}); - - if(tokens.Length != 4) break; - + foreach(string[] tokens in really.TakeWhile(part => part.Length >= 5 && part.Substring(0, 5) == "part ").Select(part => part.Split(new[] {' '})).TakeWhile(tokens => tokens.Length == 4)) { if(!ulong.TryParse(tokens[2], out ulong start) || !ulong.TryParse(tokens[3], out ulong end)) break; Partition _part = new Partition diff --git a/DiscImageChef.Partitions/RDB.cs b/DiscImageChef.Partitions/RDB.cs index 153a2955a..668e92b26 100644 --- a/DiscImageChef.Partitions/RDB.cs +++ b/DiscImageChef.Partitions/RDB.cs @@ -32,7 +32,9 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; namespace DiscImageChef.Partitions @@ -1317,8 +1319,7 @@ namespace DiscImageChef.Partitions DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.dnode.priority = {0}", fshd.Dnode.Priority); DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.dnode.startup = {0}", fshd.Dnode.Startup); DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.dnode.seglist_ptr = {0}", fshd.Dnode.SeglistPtr); - DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.dnode.global_vec = 0x{0:X8}", - fshd.Dnode.GlobalVec); + DicConsole.DebugWriteLine("Amiga RDB plugin", "FSHD.dnode.global_vec = 0x{0:X8}", fshd.Dnode.GlobalVec); nextBlock = fshd.Dnode.SeglistPtr; bool thereAreLoadSegments = false; @@ -1370,24 +1371,24 @@ namespace DiscImageChef.Partitions } ulong sequence = 0; - foreach(PartitionEntry rdbEntry in partitionEntries) + foreach(Partition entry in partitionEntries.Select(rdbEntry => new CommonTypes.Partition + { + Description = AmigaDosTypeToDescriptionString(rdbEntry.DosEnvVec.DosType), + Name = rdbEntry.DriveName, + Sequence = sequence, + Length = + (rdbEntry.DosEnvVec.HighCylinder + 1 - rdbEntry.DosEnvVec.LowCylinder) * + rdbEntry.DosEnvVec.Surfaces * rdbEntry.DosEnvVec.Bpt, + Start = rdbEntry.DosEnvVec.LowCylinder * rdbEntry.DosEnvVec.Surfaces * rdbEntry.DosEnvVec.Bpt + + sectorOffset, + Type = AmigaDosTypeToString(rdbEntry.DosEnvVec.DosType), + Scheme = Name, + Offset = (rdbEntry.DosEnvVec.LowCylinder * rdbEntry.DosEnvVec.Surfaces * rdbEntry.DosEnvVec.Bpt + + sectorOffset) * rdb.BlockSize, + Size = ((rdbEntry.DosEnvVec.HighCylinder + 1 - rdbEntry.DosEnvVec.LowCylinder) * + rdbEntry.DosEnvVec.Surfaces * rdbEntry.DosEnvVec.Bpt) * rdb.BlockSize + })) { - CommonTypes.Partition entry = new CommonTypes.Partition - { - Description = AmigaDosTypeToDescriptionString(rdbEntry.DosEnvVec.DosType), - Name = rdbEntry.DriveName, - Sequence = sequence, - Length = - (rdbEntry.DosEnvVec.HighCylinder + 1 - rdbEntry.DosEnvVec.LowCylinder) * - rdbEntry.DosEnvVec.Surfaces * rdbEntry.DosEnvVec.Bpt, - Start = rdbEntry.DosEnvVec.LowCylinder * rdbEntry.DosEnvVec.Surfaces * rdbEntry.DosEnvVec.Bpt + - sectorOffset, - Type = AmigaDosTypeToString(rdbEntry.DosEnvVec.DosType), - Scheme = Name - }; - entry.Offset = entry.Start * rdb.BlockSize; - entry.Size = entry.Length * rdb.BlockSize; - partitions.Add(entry); sequence++; } @@ -1425,9 +1426,12 @@ namespace DiscImageChef.Partitions case TYPEID_FFS_MUSER: return "Amiga Fast File System with multi-user patches"; case TYPEID_OFS_INTL_MUSER: return "Amiga Original File System with international characters and multi-user patches"; - case TYPEID_FFS_INTL_MUSER: return "Amiga Fast File System with international characters and multi-user patches"; - case TYPEID_OFS_CACHE_MUSER: return "Amiga Original File System with directory cache and multi-user patches"; - case TYPEID_FFS_CACHE_MUSER: return "Amiga Fast File System with directory cache and multi-user patches"; + case TYPEID_FFS_INTL_MUSER: + return "Amiga Fast File System with international characters and multi-user patches"; + case TYPEID_OFS_CACHE_MUSER: + return "Amiga Original File System with directory cache and multi-user patches"; + case TYPEID_FFS_CACHE_MUSER: + return "Amiga Fast File System with directory cache and multi-user patches"; case TYPEID_OLD_BSD_UNUSED: return "BSD unused"; case TYPEID_OLD_BSD_SWAP: return "BSD swap"; case TYPEID_OLD_BSD42_FFS: return "BSD 4.2 FFS"; diff --git a/DiscImageChef.Partitions/RioKarma.cs b/DiscImageChef.Partitions/RioKarma.cs index 23ac90b5b..4f43c7a6a 100644 --- a/DiscImageChef.Partitions/RioKarma.cs +++ b/DiscImageChef.Partitions/RioKarma.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.CommonTypes; using DiscImageChef.DiscImages; @@ -66,20 +67,16 @@ namespace DiscImageChef.Partitions ulong counter = 0; - foreach(RioKarmaEntry entry in table.entries) + foreach(Partition part in from entry in table.entries let part = new Partition { - Partition part = new Partition - { - Start = entry.offset, - Offset = (ulong)(entry.offset * sector.Length), - Size = entry.size, - Length = (ulong)(entry.size * sector.Length), - Type = "Rio Karma", - Sequence = counter, - Scheme = Name - }; - if(entry.type != ENTRY_MAGIC) continue; - + Start = entry.offset, + Offset = (ulong)(entry.offset * sector.Length), + Size = entry.size, + Length = (ulong)(entry.size * sector.Length), + Type = "Rio Karma", + Sequence = counter, + Scheme = Name + } where entry.type == ENTRY_MAGIC select part) { partitions.Add(part); counter++; } diff --git a/DiscImageChef.Partitions/VTOC.cs b/DiscImageChef.Partitions/VTOC.cs index 0e973f3b4..c22b9a1be 100644 --- a/DiscImageChef.Partitions/VTOC.cs +++ b/DiscImageChef.Partitions/VTOC.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -64,10 +65,7 @@ namespace DiscImageChef.Partitions bool magic_found = false; bool absolute = false; - foreach(ulong i in new ulong[] {0, 1, 8, 29}) - { - if(i + sectorOffset >= imagePlugin.GetSectors()) break; - + foreach(ulong i in new ulong[] {0, 1, 8, 29}.TakeWhile(i => i + sectorOffset < imagePlugin.GetSectors())) { pdsector = imagePlugin.ReadSector(i + sectorOffset); magic = BitConverter.ToUInt32(pdsector, 4); DicConsole.DebugWriteLine("VTOC plugin", "sanity at {0} is 0x{1:X8} (should be 0x{2:X8} or 0x{3:X8})", diff --git a/DiscImageChef.Server/App_Start/ScsiMmcMode.cs b/DiscImageChef.Server/App_Start/ScsiMmcMode.cs index bb8d5b8ea..228f79efe 100644 --- a/DiscImageChef.Server/App_Start/ScsiMmcMode.cs +++ b/DiscImageChef.Server/App_Start/ScsiMmcMode.cs @@ -31,6 +31,8 @@ // ****************************************************************************/ using System.Collections.Generic; +using System.Linq; +using DiscImageChef.Decoders.SCSI; using DiscImageChef.Metadata; namespace DiscImageChef.Server.App_Start @@ -148,16 +150,13 @@ namespace DiscImageChef.Server.App_Start } if(mode.WriteSpeedPerformanceDescriptors != null) - foreach(Decoders.SCSI.Modes.ModePage_2A_WriteDescriptor descriptor in - mode.WriteSpeedPerformanceDescriptors) - if(descriptor.WriteSpeed > 0) - if(descriptor.RotationControl == 0) - mmcOneValue.Add(string.Format("Drive supports writing at {0} Kbyte/sec. in CLV mode", - descriptor.WriteSpeed)); - else if(descriptor.RotationControl == 1) - mmcOneValue - .Add(string.Format("Drive supports writing at is {0} Kbyte/sec. in pure CAV mode", - descriptor.WriteSpeed)); + foreach(Modes.ModePage_2A_WriteDescriptor descriptor in mode.WriteSpeedPerformanceDescriptors.Where(descriptor => descriptor.WriteSpeed > 0)) if(descriptor.RotationControl == 0) + mmcOneValue.Add(string.Format("Drive supports writing at {0} Kbyte/sec. in CLV mode", + descriptor.WriteSpeed)); + else if(descriptor.RotationControl == 1) + mmcOneValue + .Add(string.Format("Drive supports writing at is {0} Kbyte/sec. in pure CAV mode", + descriptor.WriteSpeed)); if(mode.TestWrite) mmcOneValue.Add("Drive supports test writing"); diff --git a/DiscImageChef.Server/Controllers/UploadStatsController.cs b/DiscImageChef.Server/Controllers/UploadStatsController.cs index efbe868d6..4acb9436e 100644 --- a/DiscImageChef.Server/Controllers/UploadStatsController.cs +++ b/DiscImageChef.Server/Controllers/UploadStatsController.cs @@ -117,18 +117,16 @@ namespace DiscImageChef.Server.Controllers OsStats removeNvs = null; OsStats addNvs = null; - foreach(OsStats oldNvs in oldStats.OperatingSystems) - if(oldNvs.name == newNvs.name && oldNvs.version == newNvs.version) + foreach(OsStats oldNvs in oldStats.OperatingSystems.Where(oldNvs => oldNvs.name == newNvs.name && oldNvs.version == newNvs.version)) { + addNvs = new OsStats { - addNvs = new OsStats - { - name = oldNvs.name, - Value = oldNvs.Value + newNvs.Value, - version = oldNvs.version - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + newNvs.Value, + version = oldNvs.version + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -147,18 +145,16 @@ namespace DiscImageChef.Server.Controllers OsStats removeNvs = null; OsStats addNvs = null; - foreach(OsStats oldNvs in oldStats.OperatingSystems) - if(oldNvs.name == "Linux") + foreach(OsStats oldNvs in oldStats.OperatingSystems.Where(oldNvs => oldNvs.name == "Linux")) { + addNvs = new OsStats { - addNvs = new OsStats - { - name = oldNvs.name, - Value = oldNvs.Value + 1, - version = oldNvs.version - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + 1, + version = oldNvs.version + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -177,17 +173,15 @@ namespace DiscImageChef.Server.Controllers NameValueStats removeNvs = null; NameValueStats addNvs = null; - foreach(NameValueStats oldNvs in oldStats.Versions) - if(oldNvs.name == newNvs.name) + foreach(NameValueStats oldNvs in oldStats.Versions.Where(oldNvs => oldNvs.name == newNvs.name)) { + addNvs = new NameValueStats { - addNvs = new NameValueStats - { - name = oldNvs.name, - Value = oldNvs.Value + newNvs.Value - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + newNvs.Value + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -209,13 +203,11 @@ namespace DiscImageChef.Server.Controllers NameValueStats removeNvs = null; NameValueStats addNvs = null; - foreach(NameValueStats oldNvs in oldStats.Versions) - if(oldNvs.name == "previous") - { - addNvs = new NameValueStats {name = oldNvs.name, Value = oldNvs.Value + 1}; - removeNvs = oldNvs; - break; - } + foreach(NameValueStats oldNvs in oldStats.Versions.Where(oldNvs => oldNvs.name == "previous")) { + addNvs = new NameValueStats {name = oldNvs.name, Value = oldNvs.Value + 1}; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -234,17 +226,15 @@ namespace DiscImageChef.Server.Controllers NameValueStats removeNvs = null; NameValueStats addNvs = null; - foreach(NameValueStats oldNvs in oldStats.Filesystems) - if(oldNvs.name == newNvs.name) + foreach(NameValueStats oldNvs in oldStats.Filesystems.Where(oldNvs => oldNvs.name == newNvs.name)) { + addNvs = new NameValueStats { - addNvs = new NameValueStats - { - name = oldNvs.name, - Value = oldNvs.Value + newNvs.Value - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + newNvs.Value + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -262,17 +252,15 @@ namespace DiscImageChef.Server.Controllers NameValueStats removeNvs = null; NameValueStats addNvs = null; - foreach(NameValueStats oldNvs in oldStats.Partitions) - if(oldNvs.name == newNvs.name) + foreach(NameValueStats oldNvs in oldStats.Partitions.Where(oldNvs => oldNvs.name == newNvs.name)) { + addNvs = new NameValueStats { - addNvs = new NameValueStats - { - name = oldNvs.name, - Value = oldNvs.Value + newNvs.Value - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + newNvs.Value + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -290,17 +278,15 @@ namespace DiscImageChef.Server.Controllers NameValueStats removeNvs = null; NameValueStats addNvs = null; - foreach(NameValueStats oldNvs in oldStats.MediaImages) - if(oldNvs.name == newNvs.name) + foreach(NameValueStats oldNvs in oldStats.MediaImages.Where(oldNvs => oldNvs.name == newNvs.name)) { + addNvs = new NameValueStats { - addNvs = new NameValueStats - { - name = oldNvs.name, - Value = oldNvs.Value + newNvs.Value - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + newNvs.Value + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -318,17 +304,15 @@ namespace DiscImageChef.Server.Controllers NameValueStats removeNvs = null; NameValueStats addNvs = null; - foreach(NameValueStats oldNvs in oldStats.Filters) - if(oldNvs.name == newNvs.name) + foreach(NameValueStats oldNvs in oldStats.Filters.Where(oldNvs => oldNvs.name == newNvs.name)) { + addNvs = new NameValueStats { - addNvs = new NameValueStats - { - name = oldNvs.name, - Value = oldNvs.Value + newNvs.Value - }; - removeNvs = oldNvs; - break; - } + name = oldNvs.name, + Value = oldNvs.Value + newNvs.Value + }; + removeNvs = oldNvs; + break; + } if(removeNvs != null && addNvs != null) { @@ -341,20 +325,16 @@ namespace DiscImageChef.Server.Controllers if(newStats.Devices != null) if(oldStats.Devices == null) oldStats.Devices = newStats.Devices; else - foreach(DeviceStats newDev in newStats.Devices) - { - bool found = false; - - foreach(DeviceStats oldDev in oldStats.Devices) - if(oldDev.Manufacturer == newDev.Manufacturer && oldDev.Model == newDev.Model && - oldDev.Revision == newDev.Revision && oldDev.Bus == newDev.Bus) - { - found = true; - break; - } - - if(!found) oldStats.Devices.Add(newDev); - } + foreach(DeviceStats newDev in from newDev in newStats.Devices + let found = + oldStats.Devices.Any(oldDev => + oldDev.Manufacturer == + newDev.Manufacturer && + oldDev.Model == newDev.Model && + oldDev.Revision == newDev.Revision && + oldDev.Bus == newDev.Bus) + where !found + select newDev) { oldStats.Devices.Add(newDev); } if(newStats.Medias != null) if(oldStats.Medias == null) oldStats.Medias = newStats.Medias; @@ -364,18 +344,16 @@ namespace DiscImageChef.Server.Controllers MediaStats removeMstat = null; MediaStats addMstat = null; - foreach(MediaStats oldMstat in oldStats.Medias) - if(oldMstat.real == newMstat.real && oldMstat.type == newMstat.type) + foreach(MediaStats oldMstat in oldStats.Medias.Where(oldMstat => oldMstat.real == newMstat.real && oldMstat.type == newMstat.type)) { + addMstat = new MediaStats { - addMstat = new MediaStats - { - real = oldMstat.real, - type = oldMstat.type, - Value = oldMstat.Value + newMstat.Value - }; - removeMstat = oldMstat; - break; - } + real = oldMstat.real, + type = oldMstat.type, + Value = oldMstat.Value + newMstat.Value + }; + removeMstat = oldMstat; + break; + } if(removeMstat != null && addMstat != null) { @@ -441,7 +419,8 @@ namespace DiscImageChef.Server.Controllers string filename = string.Format("BackupStats_{0:yyyyMMddHHmmssfff}_{1}.xml", DateTime.UtcNow, rng.Next()); while(File.Exists(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~"), "Statistics", - filename))) filename = string.Format("BackupStats_{0:yyyyMMddHHmmssfff}_{1}.xml", DateTime.UtcNow, rng.Next()); + filename))) + filename = string.Format("BackupStats_{0:yyyyMMddHHmmssfff}_{1}.xml", DateTime.UtcNow, rng.Next()); FileStream backup = new diff --git a/DiscImageChef/Commands/CreateSidecar.cs b/DiscImageChef/Commands/CreateSidecar.cs index 5401f29b9..09f76a40a 100644 --- a/DiscImageChef/Commands/CreateSidecar.cs +++ b/DiscImageChef/Commands/CreateSidecar.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using DiscImageChef.Console; using DiscImageChef.Core; @@ -156,9 +157,7 @@ namespace DiscImageChef.Commands } string[] contents = Directory.GetFiles(options.InputFile, "*", SearchOption.TopDirectoryOnly); - List files = new List(); - - foreach(string file in contents) if(new FileInfo(file).Length % options.BlockSize == 0) files.Add(file); + List files = contents.Where(file => new FileInfo(file).Length % options.BlockSize == 0).ToList(); files.Sort(StringComparer.CurrentCultureIgnoreCase); diff --git a/DiscImageChef/Commands/Entropy.cs b/DiscImageChef/Commands/Entropy.cs index 2d3e26b03..d65bcdd9d 100644 --- a/DiscImageChef/Commands/Entropy.cs +++ b/DiscImageChef/Commands/Entropy.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Linq; using DiscImageChef.Checksums; using DiscImageChef.Console; using DiscImageChef.Core; @@ -108,13 +109,7 @@ namespace DiscImageChef.Commands trackSize += (ulong)sector.LongLength; } - foreach(ulong l in entTable) - { -#pragma warning disable IDE0004 // Cast is necessary, otherwise incorrect value is created - double frequency = (double)l / (double)trackSize; -#pragma warning restore IDE0004 // Cast is necessary, otherwise incorrect value is created - entropy += -(frequency * Math.Log(frequency, 2)); - } + entropy += entTable.Select(l => (double)l / (double)trackSize).Select(frequency => -(frequency * Math.Log(frequency, 2))).Sum(); DicConsole.WriteLine("Entropy for track {0} is {1:F4}.", currentTrack.TrackSequence, entropy); @@ -163,13 +158,7 @@ namespace DiscImageChef.Commands diskSize += (ulong)sector.LongLength; } - foreach(ulong l in entTable) - { -#pragma warning disable IDE0004 // Cast is necessary, otherwise incorrect value is created - double frequency = (double)l / (double)diskSize; -#pragma warning restore IDE0004 // Cast is necessary, otherwise incorrect value is created - entropy += -(frequency * Math.Log(frequency, 2)); - } + entropy += entTable.Select(l => (double)l / (double)diskSize).Select(frequency => -(frequency * Math.Log(frequency, 2))).Sum(); DicConsole.WriteLine(); diff --git a/DiscImageChef/Commands/ListEncodings.cs b/DiscImageChef/Commands/ListEncodings.cs index d4392cee0..03eabc63a 100644 --- a/DiscImageChef/Commands/ListEncodings.cs +++ b/DiscImageChef/Commands/ListEncodings.cs @@ -46,12 +46,8 @@ namespace DiscImageChef.Commands internal static void DoList(ListEncodingsOptions encodingOptions) { - List encodings = new List(); - - foreach(System.Text.EncodingInfo info in System.Text.Encoding.GetEncodings()) - encodings.Add(new CommonEncodingInfo {Name = info.Name, DisplayName = info.GetEncoding().EncodingName}); - foreach(Claunia.Encoding.EncodingInfo info in Claunia.Encoding.Encoding.GetEncodings()) - encodings.Add(new CommonEncodingInfo {Name = info.Name, DisplayName = info.DisplayName}); + List encodings = System.Text.Encoding.GetEncodings().Select(info => new CommonEncodingInfo {Name = info.Name, DisplayName = info.GetEncoding().EncodingName}).ToList(); + encodings.AddRange(Claunia.Encoding.Encoding.GetEncodings().Select(info => new CommonEncodingInfo {Name = info.Name, DisplayName = info.DisplayName})); DicConsole.WriteLine("{0,-16} {1,-8}", "Name", "Description"); diff --git a/DiscImageChef/Commands/MediaInfo.cs b/DiscImageChef/Commands/MediaInfo.cs index 641574b45..529f08b42 100644 --- a/DiscImageChef/Commands/MediaInfo.cs +++ b/DiscImageChef/Commands/MediaInfo.cs @@ -216,8 +216,7 @@ namespace DiscImageChef.Commands if(decMode.Value.Header.BlockDescriptors != null && decMode.Value.Header.BlockDescriptors.Length >= 1) scsiDensityCode = (byte)decMode.Value.Header.BlockDescriptors[0].Density; - foreach(Decoders.SCSI.Modes.ModePage modePage in decMode.Value.Pages) - containsFloppyPage |= modePage.Page == 0x05; + containsFloppyPage = decMode.Value.Pages.Aggregate(containsFloppyPage, (current, modePage) => current | modePage.Page == 0x05); } switch(dev.ScsiType) { diff --git a/DiscImageChef/Commands/Verify.cs b/DiscImageChef/Commands/Verify.cs index 9c307c7e3..8f76239f0 100644 --- a/DiscImageChef/Commands/Verify.cs +++ b/DiscImageChef/Commands/Verify.cs @@ -152,9 +152,9 @@ namespace DiscImageChef.Commands else if(checkStatus == true && tempStatus == true) checkStatus = true; else checkStatus = null; - foreach(ulong failLba in tempfailingLbas) failingLbas.Add(failLba); + failingLbas.AddRange(tempfailingLbas); - foreach(ulong unknownLba in tempunknownLbas) unknownLbas.Add(unknownLba); + unknownLbas.AddRange(tempunknownLbas); if(remainingSectors < 512) { @@ -199,9 +199,9 @@ namespace DiscImageChef.Commands else if(checkStatus == true && tempStatus == true) checkStatus = true; else checkStatus = null; - foreach(ulong failLba in tempfailingLbas) failingLbas.Add(failLba); + failingLbas.AddRange(tempfailingLbas); - foreach(ulong unknownLba in tempunknownLbas) unknownLbas.Add(unknownLba); + unknownLbas.AddRange(tempunknownLbas); if(remainingSectors < 512) {