| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- //------------------------------------------------------------------------------
- // <copyright file="ByteStack.cs" company="Microsoft">
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- // <owner current="true" primary="true">Microsoft</owner>
- //------------------------------------------------------------------------------
- using System;
- namespace System.Xml {
- // This stack is designed to minimize object creation for the
- // objects being stored in the stack by allowing them to be
- // re-used over time. It basically pushes the objects creating
- // a high water mark then as Pop() is called they are not removed
- // so that next time Push() is called it simply returns the last
- // object that was already on the stack.
- internal class ByteStack {
- private byte[] stack;
- private int growthRate;
- private int top;
- private int size;
- public ByteStack(int growthRate) {
- this.growthRate = growthRate;
- top = 0;
- stack = new byte[growthRate];
- size = growthRate;
- }
- public void Push(byte data) {
- if (size == top) {
- byte[] newstack = new byte[size + growthRate];
- if (top > 0) {
- Buffer.BlockCopy(stack, 0, newstack, 0, top);
- }
- stack = newstack;
- size += growthRate;
- }
- stack[top++] = data;
- }
- public byte Pop() {
- if (top > 0) {
- return stack[--top];
- } else {
- return 0;
- }
- }
- public byte Peek() {
- if (top > 0) {
- return stack[top - 1];
- } else {
- return 0;
- }
- }
- public int Length {
- get {
- return top;
- }
- }
- }
- }
|