Пример #1
0
        //public static IEnumerable<ReadOnlyGrandparent> SomeAlgorithm(IEnumerable<ReadOnlyGrandparent> input,
        //    Func<ReadOnlyGrandparent, string> parentSelector, Func<ReadOnlyParent, bool> parentSelector,
        //    Func<ReadOnlyParent, bool> removeParentSelector, ImmutableSupport support) {
        //    foreach (var p in input) {
        //        string markerToAdd = parentSelector(p);
        //        if (markerToAdd != null) {
        //            //p.Variable++;
        //            p.GetOrCreateMutable(support).Variable++;
        //        }
        //        if (parentSelector(p.Parent)) {
        //            p.Parent.GetOrCreateMutable(support).Variable++;
        //        }
        //        foreach (var c in p.Parentren.Where(c => parentSelector(c))) {
        //            c.GetOrCreateMutable(support).Variable++;
        //        }
        //        p.GetOrCreateMutable(support).Parentren.RemoveAll(c => removeParentSelector(c));
        //    }
        //
        //    return input.Immutify<ReadOnlyGrandparent, ReadWriteGrandparent>(support);
        //}

        protected override ReadOnlyGrandparent Immutify(ReadWriteGrandparent mutable, ImmutableSupport support)
        {
            IGrandparent   source   = mutable ?? (IGrandparent)this;
            int            variable = source.Variable;
            ReadOnlyParent parent   = support.Immutify <ReadOnlyParent, ReadWriteParent>(Parent);

            return(Equals(variable, Variable) && Equals(parent, Parent)
                ? this
                : new ReadOnlyGrandparent(FixedName, variable, parent));
        }
Пример #2
0
        public void ParentWithNonchangingChild()
        {
            var p  = new ReadOnlyParent("p", 1000, null, null, new ReadOnlyChild[0]);
            var gp = new ReadOnlyGrandparent("g", 100, p);

            var s = new ImmutableSupport();

            p.GetOrCreateMutable(s).Variable = p.Variable;

            ReadOnlyGrandparent gp2 = s.Immutify <ReadOnlyGrandparent, ReadWriteGrandparent>(gp);

            Assert.AreSame(gp, gp2);
            Assert.AreEqual(1000, p.Variable);
            Assert.AreEqual(100, gp.Variable);
        }
Пример #3
0
 public ReadWriteGrandparent(string fixedName, int variable, ReadOnlyParent parent)
 {
     FixedName = fixedName;
     Variable  = variable;
     Parent    = parent;
 }