Code:
/ FX-1434 / FX-1434 / 1.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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ControlPaint.cs
- BindingGroup.cs
- SpotLight.cs
- RequestQueue.cs
- EllipseGeometry.cs
- XmlElement.cs
- IPipelineRuntime.cs
- FormViewUpdatedEventArgs.cs
- BindingContext.cs
- JournalEntry.cs
- TextDecorationLocationValidation.cs
- XmlCharCheckingReader.cs
- TextElementCollection.cs
- CodeSnippetStatement.cs
- TargetControlTypeCache.cs
- EntityDataSourceDesignerHelper.cs
- HtmlLink.cs
- FormViewRow.cs
- SiteMapDataSource.cs
- wmiprovider.cs
- NumericUpDownAccelerationCollection.cs
- _UncName.cs
- HwndStylusInputProvider.cs
- ColumnResizeUndoUnit.cs
- PropertyDescriptorComparer.cs
- CookieProtection.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- RepeatBehavior.cs
- XmlQualifiedName.cs
- CodeDelegateCreateExpression.cs
- HierarchicalDataBoundControlAdapter.cs
- ThousandthOfEmRealPoints.cs
- XpsS0ValidatingLoader.cs
- ContextInformation.cs
- EventMappingSettings.cs
- TimerElapsedEvenArgs.cs
- PointHitTestResult.cs
- ApplicationHost.cs
- RankException.cs
- UserValidatedEventArgs.cs
- XPathDocumentBuilder.cs
- TreeBuilderBamlTranslator.cs
- SafeFindHandle.cs
- RotateTransform3D.cs
- ContentHostHelper.cs
- ProxyWebPartConnectionCollection.cs
- Emitter.cs
- ValueHandle.cs
- Site.cs
- Timer.cs
- ComponentManagerBroker.cs
- KeyValueInternalCollection.cs
- BaseHashHelper.cs
- XmlnsDefinitionAttribute.cs
- JsonCollectionDataContract.cs
- FamilyMapCollection.cs
- SoundPlayer.cs
- EventSourceCreationData.cs
- PropertyGroupDescription.cs
- NullRuntimeConfig.cs
- PanelDesigner.cs
- DetailsViewRow.cs
- WhitespaceRuleLookup.cs
- DependencyStoreSurrogate.cs
- HandleRef.cs
- DataErrorValidationRule.cs
- PngBitmapDecoder.cs
- DockEditor.cs
- SoapTypeAttribute.cs
- XmlMembersMapping.cs
- RuleRefElement.cs
- SamlAssertion.cs
- XmlUtil.cs
- ScaleTransform3D.cs
- FastEncoder.cs
- SafeProcessHandle.cs
- OdbcErrorCollection.cs
- LiteralTextParser.cs
- StoreItemCollection.Loader.cs
- KeyboardDevice.cs
- DictionarySurrogate.cs
- DiscoveryClientProtocol.cs
- SmtpNtlmAuthenticationModule.cs
- GlobalEventManager.cs
- PointAnimation.cs
- IfAction.cs
- XmlSchemaException.cs
- SqlErrorCollection.cs
- EndpointDiscoveryMetadataCD1.cs
- Evaluator.cs
- MouseGestureConverter.cs
- Transform3DCollection.cs
- SemanticBasicElement.cs
- StringConcat.cs
- diagnosticsswitches.cs
- BaseAddressElement.cs
- CLSCompliantAttribute.cs
- DataKeyArray.cs
- TransactionTraceIdentifier.cs
- SelectorAutomationPeer.cs