Esempio n. 1
0
 protected abstract IEnumerable <TStoredItem> EnumerateForGet(DiskBlockPosRange range);
Esempio n. 2
0
 public IEnumerable <StoredBlock> Enumerate(Stream stream, uint fileIndex = 0, DiskBlockPosRange range = null, bool headersOnly = false)
 {
     using (HeaderOnlyScope(headersOnly))
     {
         foreach (var r in Enumerate(stream, fileIndex, range))
         {
             yield return(r);
         }
     }
 }
Esempio n. 3
0
 protected override IEnumerable <StoredBlock> EnumerateForIndex(DiskBlockPosRange range)
 {
     return(Store.Enumerate(true, range));
 }
Esempio n. 4
0
 protected override IEnumerable <StoredBlock> EnumerateForGet(DiskBlockPosRange range)
 {
     return(Store.Enumerate(false, range));
 }
Esempio n. 5
0
 public static IEnumerable <StoredBlock> EnumerateFile(string file, uint fileIndex = 0, DiskBlockPosRange range = null)
 {
     return(new BlockStore(Path.GetDirectoryName(file), Network.Main).EnumerateFile(file, fileIndex, range));
 }
Esempio n. 6
0
 public static IEnumerable <StoredBlock> EnumerateFolder(string folder, DiskBlockPosRange range = null)
 {
     return(new BlockStore(folder, Network.Main).EnumerateFolder(range));
 }
Esempio n. 7
0
 protected override IEnumerable <StoredItem <BlockUndo> > EnumerateForGet(DiskBlockPosRange range)
 {
     return(Store.Enumerate(range));
 }
Esempio n. 8
0
 public IEnumerable <TStoredItem> EnumerateFile(string fileName, uint fileIndex = 0, DiskBlockPosRange range = null)
 {
     if (range == null)
     {
         range = DiskBlockPosRange.All;
     }
     return(EnumerateFile(new FileInfo(fileName), fileIndex, range));
 }
Esempio n. 9
0
 public IEnumerable <TStoredItem> EnumerateFile(FileInfo file, uint fileIndex = 0, DiskBlockPosRange range = null)
 {
     if (range == null)
     {
         range = DiskBlockPosRange.All;
     }
     using (var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, BufferSize))
     {
         fs.Position = range.Begin.Position;
         foreach (var block in Enumerate(fs, fileIndex, range))
         {
             yield return(block);
         }
     }
 }
Esempio n. 10
0
        public IEnumerable <TStoredItem> Enumerate(Stream stream, uint fileIndex = 0, DiskBlockPosRange range = null)
        {
            if (range == null)
            {
                range = DiskBlockPosRange.All;
            }

            if (fileIndex < range.Begin.File || range.End.File < fileIndex)
            {
                yield break;
            }
            if (range.Begin.File < fileIndex)
            {
                var start = DiskBlockPos.Begin.OfFile(fileIndex);
                if (start >= range.End)
                {
                    yield break;
                }
                range = new DiskBlockPosRange(start, range.End);
            }
            if (range.End.File > fileIndex)
            {
                var end = DiskBlockPos.End.OfFile(fileIndex);
                if (range.Begin >= end)
                {
                    yield break;
                }
                range = new DiskBlockPosRange(range.Begin, end);
            }

            stream.Position = range.Begin.Position;
            var len = stream.Length;

            while (stream.Position < len)
            {
                var storedItem = ReadStoredItem(stream, new DiskBlockPos(fileIndex, (uint)stream.Position));
                if (storedItem.Header.Magic == 0)
                {
                    break;
                }
                yield return(storedItem);

                if (stream.Position >= range.End.Position)
                {
                    break;
                }
            }
        }
Esempio n. 11
0
        public IEnumerable <TStoredItem> Enumerate(Stream stream, uint fileIndex = 0, DiskBlockPosRange range = null)
        {
            if (range == null)
            {
                range = DiskBlockPosRange.All;
            }

            if (fileIndex < range.Begin.File || range.End.File < fileIndex)
            {
                yield break;
            }
            if (range.Begin.File < fileIndex)
            {
                range = new DiskBlockPosRange(DiskBlockPos.Begin.OfFile(fileIndex), range.End);
            }
            if (range.End.File > fileIndex)
            {
                range = new DiskBlockPosRange(range.Begin, DiskBlockPos.End.OfFile(fileIndex));
            }

            stream.Position = range.Begin.Position;
            while (stream.Position < stream.Length)
            {
                yield return(ReadStoredItem(stream, new DiskBlockPos(fileIndex, (uint)stream.Position)));

                if (stream.Position >= range.End.Position)
                {
                    break;
                }
            }
        }