/// <summary>
        /// Finds the differences in properties.
        /// </summary>
        /// <returns>Number of differences found</returns>
        public int Run(ClassRecord c1, ClassRecord c2, IDiffActions actions)
        {
            int differences = 0;
            var e1          = c1.Properties.GetEnumerator();
            var e2          = c2.Properties.GetEnumerator();
            var b1          = e1.MoveNext();
            var b2          = e2.MoveNext();

            while (b1 && b2)
            {
                var p1 = e1.Current;
                var p2 = e2.Current;
                var rc = p1.Name.CompareTo(p2.Name);
                if (rc < 0)
                {
                    actions.PropertyOnlyInFirst(p1);
                    differences++;
                    b1 = e1.MoveNext();
                }
                else if (rc > 0)
                {
                    actions.PropertyOnlyInSecond(p2);
                    differences++;
                    b2 = e2.MoveNext();
                }
                else if (TypeFormat != TypeFormat.NONE && p1.Type != p2.Type)
                {
                    actions.PropertyOnlyInFirst(p1);
                    actions.PropertyOnlyInSecond(p2);
                    differences++;
                    b1 = e1.MoveNext();
                    b2 = e2.MoveNext();
                }
                else
                {
                    actions.PropertyMatch(p1);
                    b1 = e1.MoveNext();
                    b2 = e2.MoveNext();
                }
            }
            while (b1)
            {
                actions.PropertyOnlyInFirst(e1.Current);
                differences++;
                b1 = e1.MoveNext();
            }
            while (b2)
            {
                actions.PropertyOnlyInSecond(e2.Current);
                differences++;
                b2 = e2.MoveNext();
            }
            return(differences);
        }
        public int Run(ClassDatabase db1, ClassDatabase db2, IDiffActions actions)
        {
            int differences = 0;
            var e1          = db1.Classes.GetEnumerator();
            var e2          = db2.Classes.GetEnumerator();
            var b1          = e1.MoveNext();
            var b2          = e2.MoveNext();

            while (b1 && b2)
            {
                var c1 = e1.Current;
                var c2 = e2.Current;
                if (!IsAccessibleActivity(c1))
                {
                    b1 = e1.MoveNext();
                }
                else if (!IsAccessibleActivity(c2))
                {
                    b2 = e2.MoveNext();
                }
                else
                {
                    var rc = c1.Name.CompareTo(c2.Name);
                    if (rc < 0)
                    {
                        actions.ActivityOnlyInFirst(c1);
                        differences++;
                        b1 = e1.MoveNext();
                    }
                    else if (rc > 0)
                    {
                        actions.ActivityOnlyInSecond(c2);
                        differences++;
                        b2 = e2.MoveNext();
                    }
                    else
                    {
                        differences += Run(c1, c2, actions);
                        b1           = e1.MoveNext();
                        b2           = e2.MoveNext();
                    }
                }
            }
            while (b1)
            {
                var c1 = e1.Current;
                if (IsAccessibleActivity(c1))
                {
                    actions.ActivityOnlyInFirst(c1);
                    differences++;
                }
                b1 = e1.MoveNext();
            }
            while (b2)
            {
                var c2 = e2.Current;
                if (IsAccessibleActivity(c2))
                {
                    actions.ActivityOnlyInSecond(c2);
                    differences++;
                }
                b2 = e2.MoveNext();
            }
            return(differences);
        }