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(); } }
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(); }