Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / ByteStack.cs / 1305376 / ByteStack.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- 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; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- 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; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Delay.cs
- HttpRequest.cs
- WinInetCache.cs
- MimeTypePropertyAttribute.cs
- RegistrySecurity.cs
- SpecialFolderEnumConverter.cs
- SqlDeflator.cs
- ExponentialEase.cs
- MetadataCache.cs
- MapPathBasedVirtualPathProvider.cs
- ColorMatrix.cs
- HtmlTableCell.cs
- InternalPolicyElement.cs
- OrderedParallelQuery.cs
- SqlTopReducer.cs
- GenericTextProperties.cs
- XmlSerializableReader.cs
- SignatureHelper.cs
- OciLobLocator.cs
- Cloud.cs
- UIPermission.cs
- WebPartEventArgs.cs
- PartialCachingControl.cs
- XamlTypeMapper.cs
- dataSvcMapFileLoader.cs
- AliasGenerator.cs
- NameTable.cs
- StringWriter.cs
- CannotUnloadAppDomainException.cs
- Debug.cs
- VirtualPathUtility.cs
- TreeNodeCollection.cs
- Lazy.cs
- Size3D.cs
- XmlNotation.cs
- BatchWriter.cs
- TimeZoneNotFoundException.cs
- CaseCqlBlock.cs
- ColorTransform.cs
- DataPager.cs
- StylusPlugin.cs
- OleDbRowUpdatingEvent.cs
- XmlQueryCardinality.cs
- XmlChoiceIdentifierAttribute.cs
- ToolStripItemTextRenderEventArgs.cs
- DataGridCellClipboardEventArgs.cs
- InvalidCommandTreeException.cs
- FontInfo.cs
- FilterException.cs
- PersianCalendar.cs
- GroupItemAutomationPeer.cs
- XmlObjectSerializer.cs
- SEHException.cs
- HttpInputStream.cs
- WebPartActionVerb.cs
- BitmapImage.cs
- RawStylusInputCustomDataList.cs
- PropertyContainer.cs
- MenuEventArgs.cs
- TextSerializer.cs
- CompilerParameters.cs
- InvalidPropValue.cs
- ObjectViewListener.cs
- CipherData.cs
- EditorPart.cs
- SecurityPolicySection.cs
- DelegateSerializationHolder.cs
- GacUtil.cs
- UpdatableWrapper.cs
- PropertyRecord.cs
- Span.cs
- BuilderInfo.cs
- SafeEventHandle.cs
- PropertyRef.cs
- SystemIcmpV4Statistics.cs
- SendKeys.cs
- WebConfigurationFileMap.cs
- DataGridHeaderBorder.cs
- FieldMetadata.cs
- TreeNodeEventArgs.cs
- ItemContainerGenerator.cs
- Visitors.cs
- Options.cs
- LockedHandleGlyph.cs
- TableAutomationPeer.cs
- DesignerAutoFormatStyle.cs
- AQNBuilder.cs
- BinaryFormatterWriter.cs
- WebPartTransformer.cs
- TextWriterEngine.cs
- BuildDependencySet.cs
- ByteStreamMessageEncoder.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- MaskedTextProvider.cs
- CodeIterationStatement.cs
- PersonalizableAttribute.cs
- EndOfStreamException.cs
- XmlAttributeOverrides.cs
- DoubleSumAggregationOperator.cs
- mediaclock.cs