Exemple #1
0
        private IEnumerator <KeyValuePair <Key, Value> > GetEnumerator()
        {
            if (NextPageIndex < 0)
            {
                StopEnumerating = true;
                yield break;
            }

            PageRecord page = ActiveManifest.FindPageForIndex(Level, NextPageIndex++);

            if (page == null)
            {
                StopEnumerating = true;
                yield break;
            }

            var sbt = new SortedBlockTable(Cache, BaseFileName, page.Level, page.Version);

            try {
                foreach (var pair in sbt.EnumerateFromKey(Cache, StartKey))
                {
                    yield return(pair);
                }
            } finally {
                sbt.Close();
            }
        }
Exemple #2
0
        public TableEnumerator(int level, RazorCache rzrCache, string baseFileName, ManifestImmutable mft, Key key)
        {
            Cache           = rzrCache;
            BaseFileName    = baseFileName;
            ActiveManifest  = mft;
            StartKey        = key;
            Level           = level;
            StopEnumerating = false;

            var firstPage = ActiveManifest.FindPageForIndex(level, 0);

            if (firstPage != null && key.CompareTo(firstPage.FirstKey) < 0)
            {
                StartPageIndex = 0;
            }
            else
            {
                StartPageIndex = ActiveManifest.FindPageIndexForKey(Level, StartKey);
            }

            InitEnumerator();
        }