Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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 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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Int32Animation.cs
- ToolStripMenuItem.cs
- TableLayoutPanel.cs
- HandlerBase.cs
- WSDualHttpSecurity.cs
- ValueTypeFixupInfo.cs
- SecurityUniqueId.cs
- UnknownBitmapEncoder.cs
- ObjectDataSource.cs
- xml.cs
- MenuStrip.cs
- GridViewRowPresenterBase.cs
- streamingZipPartStream.cs
- DrawingContextDrawingContextWalker.cs
- WebControlsSection.cs
- TokenBasedSetEnumerator.cs
- CommentEmitter.cs
- SponsorHelper.cs
- SaveFileDialog.cs
- BamlLocalizableResourceKey.cs
- TypeGeneratedEventArgs.cs
- ResourceManagerWrapper.cs
- ExpressionNode.cs
- SystemInformation.cs
- HtmlEmptyTagControlBuilder.cs
- UInt64Converter.cs
- iisPickupDirectory.cs
- Button.cs
- NegationPusher.cs
- NotifyIcon.cs
- XPathNodeInfoAtom.cs
- SQLDecimal.cs
- ImageFormatConverter.cs
- SoapSchemaImporter.cs
- AggregateException.cs
- VisualTreeHelper.cs
- SecurityBindingElement.cs
- OpenFileDialog.cs
- HtmlInputText.cs
- OleDbParameter.cs
- PackWebResponse.cs
- BufferAllocator.cs
- TemplateContent.cs
- MimeObjectFactory.cs
- CustomAttribute.cs
- OracleRowUpdatingEventArgs.cs
- SspiNegotiationTokenProvider.cs
- DependentList.cs
- XmlDigitalSignatureProcessor.cs
- TraceData.cs
- Viewport2DVisual3D.cs
- Table.cs
- AsymmetricAlgorithm.cs
- PenThreadPool.cs
- CodeComment.cs
- PersonalizationProviderCollection.cs
- SerializationTrace.cs
- TagElement.cs
- FileDialogPermission.cs
- BufferModesCollection.cs
- AliasedSlot.cs
- EventDrivenDesigner.cs
- DbConnectionPool.cs
- MenuItemBinding.cs
- MetadataItemCollectionFactory.cs
- DebugHandleTracker.cs
- CodeAccessPermission.cs
- MetadataSet.cs
- Filter.cs
- IPHostEntry.cs
- Shape.cs
- RsaSecurityTokenAuthenticator.cs
- TableLayoutSettings.cs
- AbstractDataSvcMapFileLoader.cs
- Function.cs
- XmlSchemaChoice.cs
- UrlRoutingModule.cs
- ChangeToolStripParentVerb.cs
- EntityDataSourceStatementEditorForm.cs
- FrameworkName.cs
- FrameworkTextComposition.cs
- __Filters.cs
- VectorKeyFrameCollection.cs
- RTLAwareMessageBox.cs
- ProbeMatchesCD1.cs
- XmlEncoding.cs
- RightNameExpirationInfoPair.cs
- MouseActionConverter.cs
- HtmlTableCellCollection.cs
- Walker.cs
- XmlNodeChangedEventArgs.cs
- JapaneseLunisolarCalendar.cs
- BezierSegment.cs
- RtfToXamlLexer.cs
- RMPublishingDialog.cs
- _BasicClient.cs
- OperatingSystem.cs
- NotifyParentPropertyAttribute.cs
- FormViewModeEventArgs.cs
- WebBrowserContainer.cs