Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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. // //[....] //----------------------------------------------------------------------------- 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.
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
- TextProperties.cs
- ListCollectionView.cs
- TdsValueSetter.cs
- IdentityValidationException.cs
- DesignTableCollection.cs
- GeneralTransform3DGroup.cs
- MetabaseSettings.cs
- XmlDeclaration.cs
- UnmanagedMemoryStream.cs
- FormViewInsertedEventArgs.cs
- ValidatorCompatibilityHelper.cs
- Rotation3DAnimation.cs
- FactoryId.cs
- compensatingcollection.cs
- MarkupCompilePass2.cs
- LineMetrics.cs
- Stylesheet.cs
- ViewStateModeByIdAttribute.cs
- MimeObjectFactory.cs
- DefaultEventAttribute.cs
- InvalidEnumArgumentException.cs
- WebBrowserPermission.cs
- EncryptedKeyIdentifierClause.cs
- BaseDataBoundControl.cs
- OperatingSystem.cs
- SvcMapFile.cs
- HtmlInputRadioButton.cs
- Point3DConverter.cs
- OleDbEnumerator.cs
- DefaultValueConverter.cs
- FormatConvertedBitmap.cs
- XmlResolver.cs
- CompilerGeneratedAttribute.cs
- SqlDataSourceCustomCommandEditor.cs
- PopOutPanel.cs
- QueryExpr.cs
- OdbcConnectionHandle.cs
- MailMessageEventArgs.cs
- BigInt.cs
- DocumentSequenceHighlightLayer.cs
- XmlSchemaSubstitutionGroup.cs
- Stackframe.cs
- PropertyConverter.cs
- Setter.cs
- GridItemPattern.cs
- ProfilePropertySettingsCollection.cs
- TemplatePropertyEntry.cs
- ButtonFlatAdapter.cs
- PeerResolverSettings.cs
- ControlParameter.cs
- TreeView.cs
- SecurityValidationBehavior.cs
- Literal.cs
- AsyncStreamReader.cs
- DataGridViewRowHeaderCell.cs
- IdentityValidationException.cs
- EventMappingSettingsCollection.cs
- TextInfo.cs
- XPathDocument.cs
- EntityCommandExecutionException.cs
- SecurityHeaderTokenResolver.cs
- Header.cs
- PeerResolverElement.cs
- OrderPreservingPipeliningMergeHelper.cs
- GeneralTransformGroup.cs
- RenamedEventArgs.cs
- VectorCollection.cs
- EventProxy.cs
- XmlSchemaComplexContentExtension.cs
- GreenMethods.cs
- ProfileManager.cs
- RecipientInfo.cs
- DateTimeConverter2.cs
- WebPartManager.cs
- RoleService.cs
- AutomationAttributeInfo.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- ThreadBehavior.cs
- DateTimeConstantAttribute.cs
- IFlowDocumentViewer.cs
- PackagePart.cs
- ByteStream.cs
- MenuItemBinding.cs
- validationstate.cs
- ImplicitInputBrush.cs
- LazyTextWriterCreator.cs
- EventDescriptor.cs
- CustomExpressionEventArgs.cs
- DetailsViewInsertedEventArgs.cs
- HtmlTitle.cs
- WebBrowser.cs
- Context.cs
- DataGridViewMethods.cs
- QueryPrefixOp.cs
- SortDescription.cs
- SerializationFieldInfo.cs
- RetriableClipboard.cs
- RecognizeCompletedEventArgs.cs
- OperationInvokerTrace.cs
- _ListenerAsyncResult.cs