Пример #1
0
        private static void LevelOrderTraverseFolder(RootCompareObject root, int numOfPaths, IVisitor visitor, Progress syncProgress)
        {
            Queue<BaseCompareObject> levelQueue = new Queue<BaseCompareObject>();
            RootCompareObject rt;
            FolderCompareObject folder = null;

            levelQueue.Enqueue(root);

            while (levelQueue.Count > 0)
            {
                if (syncProgress != null && syncProgress.State == SyncState.Cancelled)
                    return;

                BaseCompareObject currObj = levelQueue.Dequeue();

                if ((rt = currObj as RootCompareObject) != null)
                    visitor.Visit(rt);
                else if ((folder = currObj as FolderCompareObject) != null)
                    visitor.Visit(folder, numOfPaths);
                else
                    visitor.Visit(currObj as FileCompareObject, numOfPaths);

                Dictionary<string, BaseCompareObject>.ValueCollection values;
                if (rt != null)
                {
                    values = rt.Contents.Values;
                    foreach (BaseCompareObject o in values)
                        levelQueue.Enqueue(o);
                }
                else if (folder != null)
                {
                    values = folder.Contents.Values;
                    foreach (BaseCompareObject o in values)
                        levelQueue.Enqueue(o);
                }

            }
        }
Пример #2
0
 /// <summary>
 /// Instantiates an instance of <c>SyncerVisitor</c> with the sync configuration and progress object passed in.
 /// </summary>
 /// <param name="syncConfig">The sync configuration to pass in.</param>
 /// <param name="progress">The progress object to pass in.</param>
 public SyncerVisitor(SyncConfig syncConfig, Progress progress)
 {
     _syncConfig = syncConfig;
     _syncProgress = progress;
 }
Пример #3
0
 /// <summary>
 /// Traverse the tree in post-order, starting from the <see cref="RootCompareObject"/>.
 /// </summary>
 /// <param name="root">The <see cref="RootCompareObject"/> to start level-traversal from.</param>
 /// <param name="visitor">The <see cref="IVisitor"/> that will be used to visit the tree.</param>
 /// <param name="syncProgress">The <see cref="Progress"/> object to pass in.</param>
 public static void PostTraverseFolder(RootCompareObject root, IVisitor visitor, Progress syncProgress)
 {
     TraverseFolderHelper(root, visitor, TraverseType.Post, syncProgress);
 }
Пример #4
0
 /// <summary>
 /// Traverse the tree in level order, starting from the <see cref="RootCompareObject"/>.
 /// </summary>
 /// <param name="root">The <see cref="RootCompareObject"/> to start level-traversal from.</param>
 /// <param name="visitor">The <see cref="IVisitor"/> that will be used to visit the tree.</param>
 /// <param name="syncProgress">The <see cref="Progress"/> object to pass in.</param>
 public static void LevelOrderTraverseFolder(RootCompareObject root, IVisitor visitor, Progress syncProgress)
 {
     LevelOrderTraverseFolder(root, root.Paths.Length, visitor, syncProgress);
 }
Пример #5
0
        // Method will return any time the state of the sync progress becomes cancelled.
        private static void TraverseFolderHelper(FolderCompareObject folder, int numOfPaths, IVisitor visitor, TraverseType type, Progress syncProgress)
        {
            if (syncProgress != null && syncProgress.State == SyncState.Cancelled)
                return;

            if (type == TraverseType.Pre)
                visitor.Visit(folder, numOfPaths);

            Dictionary<string, BaseCompareObject>.ValueCollection values = folder.Contents.Values;
            foreach (BaseCompareObject o in values)
            {
                if (syncProgress != null && syncProgress.State == SyncState.Cancelled)
                    return;

                FolderCompareObject fco;
                if ((fco = o as FolderCompareObject) != null)
                    TraverseFolderHelper(fco, numOfPaths, visitor, type, syncProgress);
                else
                    visitor.Visit(o as FileCompareObject, numOfPaths);
            }

            if (type == TraverseType.Post)
                visitor.Visit(folder, numOfPaths);
        }