public override IEnumerable <StreamExtent> GetExtentsInRange(long start, long count)
        {
            CheckDisposed();

            return
                (StreamExtent.Intersect(
                     StreamExtent.Union(GetExtentsRaw(start, count), _parentStream.GetExtentsInRange(start, count)),
                     new StreamExtent(start, count)));
        }
Example #2
0
        public override IEnumerable <StreamExtent> GetExtentsInRange(long start, long count)
        {
            CheckDisposed();

            long maxCount = Math.Min(Length, start + count) - start;

            if (maxCount < 0)
            {
                return(new StreamExtent[0]);
            }

            IEnumerable <StreamExtent> parentExtents = _parentStream.GetExtentsInRange(start, maxCount);

            IEnumerable <StreamExtent> result = StreamExtent.Union(LayerExtents(start, maxCount), parentExtents);

            result = StreamExtent.Intersect(result, new[] { new StreamExtent(start, maxCount) });
            return(result);
        }
        public void Extents()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Position = 100;
            tss.WriteByte(99);

            List <StreamExtent> extents = new List <StreamExtent>(altView.Extents);

            Assert.Equal(1, extents.Count);
            Assert.Equal(100, extents[0].Start);
            Assert.Equal(1, extents[0].Length);

            extents = new List <StreamExtent>(altView.GetExtentsInRange(10, 300));
            Assert.Equal(1, extents.Count);
            Assert.Equal(100, extents[0].Start);
            Assert.Equal(1, extents[0].Length);
        }