Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / BitStack.cs / 1 / BitStack.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml { using System; using System.Diagnostics; ////// Manages a stack of bits. Exposes push, pop, and peek operations. /// internal class BitStack { private uint[] bitStack; private int stackPos; private uint curr; ////// Initialize stack. /// public BitStack() { // Set sentinel bit in 1st position. As bits are shifted onto this.curr, this sentinel // bit shifts to the left. When it's about to overflow, this.curr will be pushed // onto an unsigned int stack and the sentinel bit will be reset to 0x1. this.curr = 0x1; } ////// Push a 0 or 1 bit onto the stack. /// public void PushBit(bool bit) { if ((this.curr & 0x80000000) != 0) { // If sentinel bit has reached the last position, push this.curr PushCurr(); } // Shift new bit onto this.curr (which must have at least one open position) this.curr = (this.curr << 1) | (bit ? 1u : 0u); } ////// Pop the top bit from the stack and return it. /// public bool PopBit() { bool bit; Debug.Assert(this.curr != 0x1, "Stack empty"); // Shift rightmost bit from this.curr bit = (this.curr & 0x1) != 0; this.curr >>= 1; if (this.curr == 0x1) { // If sentinel bit has reached the rightmost position, pop this.curr PopCurr(); } return bit; } ////// Return the top bit on the stack without pushing or popping. /// public bool PeekBit() { Debug.Assert(this.curr != 0x1, "Stack empty"); return (this.curr & 0x1) != 0; } ////// Return true if there are currently no bits on the stack. /// public bool IsEmpty { get { return this.curr == 0x1; } } ////// this.curr has enough space for 31 bits (minus 1 for sentinel bit). Once this space is /// exhausted, a uint stack is created to handle the overflow. /// private void PushCurr() { int len; if (this.bitStack == null) { this.bitStack = new uint[16]; } // Push current unsigned int (which has been filled) onto a stack // and initialize this.curr to be used for future pushes. this.bitStack[this.stackPos++] = this.curr; this.curr = 0x1; // Resize stack if necessary len = this.bitStack.Length; if (this.stackPos >= len) { uint[] bitStackNew = new uint[2 * len]; Array.Copy(this.bitStack, bitStackNew, len); this.bitStack = bitStackNew; } } ////// If all bits have been popped from this.curr, then pop the previous uint value from the stack in /// order to provide another 31 bits. /// private void PopCurr() { if (this.stackPos > 0) this.curr = this.bitStack[--this.stackPos]; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SmtpTransport.cs
- CollectionViewProxy.cs
- SymbolResolver.cs
- SmtpFailedRecipientsException.cs
- BoundField.cs
- AmbientValueAttribute.cs
- DependencyObjectProvider.cs
- BatchParser.cs
- KeyValuePair.cs
- ResourceDictionaryCollection.cs
- xmlfixedPageInfo.cs
- ComplexPropertyEntry.cs
- ViewStateException.cs
- SimpleTextLine.cs
- IconBitmapDecoder.cs
- SqlTypesSchemaImporter.cs
- ServiceDescriptions.cs
- MemberAccessException.cs
- TreeWalker.cs
- cryptoapiTransform.cs
- NotificationContext.cs
- IntSecurity.cs
- SimpleWebHandlerParser.cs
- _CommandStream.cs
- Int16Converter.cs
- COM2PictureConverter.cs
- SpnegoTokenProvider.cs
- ReaderWriterLock.cs
- ManageRequest.cs
- _NetworkingPerfCounters.cs
- AssemblyContextControlItem.cs
- storepermission.cs
- DetailsView.cs
- WebRequestModulesSection.cs
- NullableFloatAverageAggregationOperator.cs
- CompilationUnit.cs
- WindowsIdentity.cs
- CharacterString.cs
- DbConnectionHelper.cs
- ReceiveActivityValidator.cs
- XmlEventCache.cs
- BindingSource.cs
- Transactions.cs
- _AutoWebProxyScriptEngine.cs
- MissingFieldException.cs
- DateTimeOffsetConverter.cs
- TraceUtils.cs
- SocketElement.cs
- PrimaryKeyTypeConverter.cs
- XmlSchemaAnyAttribute.cs
- CTreeGenerator.cs
- DbConnectionPoolGroup.cs
- PaperSize.cs
- DataBoundControlAdapter.cs
- StrokeNodeOperations2.cs
- AutoGeneratedField.cs
- ListBoxAutomationPeer.cs
- FixedLineResult.cs
- FusionWrap.cs
- XPathMessageContext.cs
- XmlBaseWriter.cs
- CreateParams.cs
- TemplateManager.cs
- MissingSatelliteAssemblyException.cs
- DPCustomTypeDescriptor.cs
- Process.cs
- SqlDataSourceStatusEventArgs.cs
- DescendentsWalkerBase.cs
- OleDbConnectionFactory.cs
- XPathPatternParser.cs
- KeyedByTypeCollection.cs
- BinaryCommonClasses.cs
- SqlServer2KCompatibilityAnnotation.cs
- DefaultBindingPropertyAttribute.cs
- OdbcStatementHandle.cs
- TableLayoutSettings.cs
- SafeNativeMethodsOther.cs
- elementinformation.cs
- PathFigureCollectionConverter.cs
- HttpProfileBase.cs
- ElementProxy.cs
- CodeExporter.cs
- SymDocumentType.cs
- ObjectSecurity.cs
- LocalizeDesigner.cs
- XmlConvert.cs
- RouteItem.cs
- DrawingGroup.cs
- PerformanceCounterPermissionAttribute.cs
- DataGridItemCollection.cs
- CodeIdentifier.cs
- VisemeEventArgs.cs
- UserControl.cs
- ArraySortHelper.cs
- CFStream.cs
- SchemaImporterExtension.cs
- cookie.cs
- ParentUndoUnit.cs
- InfiniteTimeSpanConverter.cs
- RIPEMD160Managed.cs