// // This file contains the C# code from Program 6.6 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/pgm06_06.txt // public class StackAsArray : AbstractContainer, Stack { protected object[] array; private class Enumerator : IEnumerator { StackAsArray stack; protected int position = -1; internal Enumerator(StackAsArray stack) { this.stack = stack; } public bool MoveNext() { if (++position == stack.count) position = -1; return position >= 0; } public object Current { get { if (position < 0) throw new InvalidOperationException(); return stack.array[position]; } } public void Reset() { position = -1; } } public override IEnumerator GetEnumerator() { return new Enumerator(this); } // ... }