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);
 }