// // This file contains the C# code from Program 7.21 of // "Data Structures and Algorithms // with Object-Oriented Design Patterns in C#" // by Bruno R. Preiss. // // Copyright (c) 2001--2002 by Bruno R. Preiss, P.Eng. All rights reserved. // // http://www.brpreiss.com/books/opus6/programs/pgm07_21.txt // public class PolynomialAsOrderedList : Polynomial { OrderedList list; public PolynomialAsOrderedList() { list = new OrderedListAsLinkedList(); } public override void Add(Term term) { list.Insert(term); } internal class DifferentiatingVisitor : AbstractVisitor { public override void Visit(object obj) { Term term = obj as Term; if (term != null) term.Differentiate(); } } public override void Differentiate() { Visitor visitor = new DifferentiatingVisitor(); list.Accept(visitor); ComparableObject zeroTerm = list.Find(new Term(0, 0)); if (zeroTerm != null) list.Withdraw(zeroTerm); } // ... }