예제 #1
0
        public void WillCheckPreviousPage()
        {
            var scheduler = new TestScheduler();

            using (var file = new TestFile())
            {
                file.Append(Enumerable.Range(1, 20).Select(i => i.ToString()).ToArray());

                ILineProvider lineProvider = null;

                using (file.Info.Index(scheduler).Exclude(str => str.Contains("9")).Subscribe(x => lineProvider = x))
                {
                    scheduler.AdvanceByMilliSeconds(250);
                    lineProvider.Count.Should().Be(20);

                    var lines = lineProvider.ReadLines(new ScrollRequest(10)).AsArray();
                    lines.Count().Should().Be(9);

                    var expected = Enumerable.Range(1, 20)
                                   .Select(i => i.ToString())
                                   .Where(str => !str.Contains("9"))
                                   .Reverse()
                                   .Take(10);

                    //slines.Select(line => line.Text).Should().BeEquivalentTo(expected);
                }
            }
        }
예제 #2
0
        public IEnumerable <Line> ReadLinesImpl(ScrollRequest scroll)
        {
            var currentPage = _lines.ReadLines(scroll).Where(line => !_itemsToExclude(line.Text)).ToArray();

            foreach (var line in currentPage)
            {
                yield return(line);
            }

            if (currentPage.Length == scroll.PageSize)
            {
                yield break;
            }

            var deficit = scroll.PageSize - currentPage.Length;

            //work backwards through the file until we have enough lines
            var traverseUpTail = YieldTail(scroll.PageSize, scroll.FirstIndex - scroll.PageSize, deficit);

            foreach (var line in traverseUpTail)
            {
                yield return(line);
            }
        }