Ejemplo n.º 1
0
        public override int ReadFrom(byte[] buffer, int offset)
        {
            var itemOffset = base.ReadFrom(buffer, offset);

            Items    = new NodeItem[ItemCount];
            NodeData = new BaseItem[ItemCount];
            for (int i = 0; i < ItemCount; i++)
            {
                Items[i]    = new NodeItem();
                itemOffset += Items[i].ReadFrom(buffer, itemOffset);
                switch (Items[i].Key.ObjectId)
                {
                case (ulong)ReservedObjectId.CsumItem:
                case (ulong)ReservedObjectId.TreeReloc:
                    continue;

                default:
                    NodeData[i] = CreateItem(Items[i], buffer, Length + offset);
                    break;
                }
            }
            return(Size);
        }
Ejemplo n.º 2
0
        private BaseItem CreateItem(NodeItem item, byte[] buffer, int offset)
        {
            var      data = EndianUtilities.ToByteArray(buffer, (int)(offset + item.DataOffset), (int)item.DataSize);
            BaseItem result;

            switch (item.Key.ItemType)
            {
            case ItemType.ChunkItem:
                result = new ChunkItem(item.Key);
                break;

            case ItemType.DevItem:
                result = new DevItem(item.Key);
                break;

            case ItemType.RootItem:
                result = new RootItem(item.Key);
                break;

            case ItemType.InodeRef:
                result = new InodeRef(item.Key);
                break;

            case ItemType.InodeItem:
                result = new InodeItem(item.Key);
                break;

            case ItemType.DirItem:
                result = new DirItem(item.Key);
                break;

            case ItemType.DirIndex:
                result = new DirIndex(item.Key);
                break;

            case ItemType.ExtentData:
                result = new ExtentData(item.Key);
                break;

            case ItemType.RootRef:
                result = new RootRef(item.Key);
                break;

            case ItemType.RootBackref:
                result = new RootBackref(item.Key);
                break;

            case ItemType.XattrItem:
                result = new XattrItem(item.Key);
                break;

            case ItemType.OrphanItem:
                result = new OrphanItem(item.Key);
                break;

            default:
                throw new IOException($"Unsupported item type {item.Key.ItemType}");
            }
            result.ReadFrom(data, 0);
            return(result);
        }