protected virtual IEnumerable <FolderRecWrapper> GetFolderList(EnumHierarchyFlags flags, FolderRecWrapper folderRec) { Stack <FolderRecWrapper> stack = new Stack <FolderRecWrapper>(); stack.Push(folderRec); while (stack.Count > 0) { FolderRecWrapper currentFolderRec = stack.Pop(); if (!currentFolderRec.IsSpoolerQueue) { if (FolderMap.IsValidFolderType(flags, currentFolderRec)) { yield return(currentFolderRec); } if (currentFolderRec.Children != null) { foreach (FolderRecWrapper item in currentFolderRec.Children) { stack.Push(item); } } } } yield break; }
public IEnumerator <FolderRecWrapper> GetFolderHierarchyEnumerator(EnumHierarchyFlags flags) { if (this.subtreeEnumerator == null) { this.subtreeEnumerator = this.GetFolderList(flags, this.RootRec).GetEnumerator(); } return(this.subtreeEnumerator); }
protected override IEnumerable <FolderRecWrapper> GetFolderList(EnumHierarchyFlags flags, FolderRecWrapper folderRec) { foreach (KeyValuePair <byte[], FolderRecWrapper> kvp in this.folders) { KeyValuePair <byte[], FolderRecWrapper> keyValuePair = kvp; yield return(keyValuePair.Value); } yield break; }
public override void EnumerateSubtree(EnumHierarchyFlags flags, FolderRecWrapper root, FolderMap.EnumFolderCallback callback) { FolderMap.EnumFolderContext enumFolderContext = new FolderMap.EnumFolderContext(); enumFolderContext.Result = EnumHierarchyResult.Continue; foreach (KeyValuePair <byte[], FolderRecWrapper> keyValuePair in this.folders) { callback(keyValuePair.Value, enumFolderContext); } }
protected static bool IsValidFolderType(EnumHierarchyFlags flags, FolderRecWrapper folderRec) { switch (folderRec.FolderType) { case FolderType.Root: return((flags & EnumHierarchyFlags.RootFolder) != EnumHierarchyFlags.None); case FolderType.Generic: return((flags & EnumHierarchyFlags.NormalFolders) != EnumHierarchyFlags.None); case FolderType.Search: return((flags & EnumHierarchyFlags.SearchFolders) != EnumHierarchyFlags.None); default: return(false); } }
private void EnumSingleFolder(FolderRecWrapper folderRec, FolderMap.EnumFolderContext ctx, FolderMap.EnumFolderCallback callback, EnumHierarchyFlags flags) { ctx.Result = EnumHierarchyResult.Continue; if (folderRec.IsSpoolerQueue) { return; } if (FolderMap.IsValidFolderType(flags, folderRec)) { callback(folderRec, ctx); } if (ctx.Result == EnumHierarchyResult.Cancel || ctx.Result == EnumHierarchyResult.SkipSubtree) { return; } if (folderRec.Children != null) { foreach (FolderRecWrapper folderRec2 in folderRec.Children) { ctx.Result = EnumHierarchyResult.Continue; this.EnumSingleFolder(folderRec2, ctx, callback, flags); if (ctx.Result == EnumHierarchyResult.Cancel) { break; } } } }
public virtual void EnumerateSubtree(EnumHierarchyFlags flags, FolderRecWrapper root, FolderMap.EnumFolderCallback callback) { FolderMap.EnumFolderContext ctx = new FolderMap.EnumFolderContext(); this.EnumSingleFolder(root, ctx, callback, flags); }
public void EnumerateFolderHierarchy(EnumHierarchyFlags flags, FolderMap.EnumFolderCallback callback) { this.EnumerateSubtree(flags, this.RootRec, callback); }