public IEnumerable<IMapingItem> ProcessItem(IMapingItem Item) { string[] path = Item.PackageFileName.Split(FirmwarePackage.PathSeparator); uint startAddress = UInt32.Parse(path.Last(), NumberStyles.HexNumber); byte[] data = Item.GetData(); var sections = new LinkedList<SectionPointer>(); int separatorLength = 0; int lastSignificantByteIndex = -1; for (int i = 0; i < data.Length; i++) { if (data[i] == Separator) separatorLength++; else { if (separatorLength >= MinimumSeparatorLength || sections.Count == 0) { if (sections.Count > 0) sections.Last.Value.End = lastSignificantByteIndex; sections.AddLast(new SectionPointer(i)); separatorLength = 0; } lastSignificantByteIndex = i; } } if (sections.Last.Value.End == -1) sections.Last.Value.End = lastSignificantByteIndex; return sections.Select(p => new MemoryMapingItem(string.Join(FirmwarePackage.PathSeparator + "", path.Take(path.Length - 1).Concat(new[] { (startAddress + p.Start).ToString("X") })), data, p.Start, p.Length)); }
public HexToBinMapingItem(IMapingItem HexItem, bool TrimStart) { _hexItem = HexItem; _trimStart = TrimStart; }
public IEnumerable<IMapingItem> ProcessItem(IMapingItem Item) { yield return new HexToBinMapingItem(Item, _trimStart); }