Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Util / SimpleBitVector32.cs / 1305376 / SimpleBitVector32.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System; // // This is a cut down copy of System.Collections.Specialized.BitVector32. The // reason this is here is because it is used rather intensively by Control and // WebControl. As a result, being able to inline this operations results in a // measurable performance gain, at the expense of some maintainability. // [Serializable] internal struct SimpleBitVector32 { private int data; internal SimpleBitVector32(int data) { this.data = data; } internal int IntegerValue { get { return data; } set { data = value; } } internal bool this[int bit] { get { return (data & bit) == bit; } set { int _data = data; if(value) { data = _data | bit; } else { data = _data & ~bit; } } } // Stores and retrieves a positive integer in the bit vector. The "mask" parameter selects the bits // to use in the vector, and the "offset" parameter is the index of the rightmost bit in the // mask. The offset could be calculated from the mask, but is passed in as a separate constant // for improved performance. NOTE: Because the data field is a signed integer, only 31 of the 32 // available bits may be used. // Example: To store a 4-bit integer in bits 4-7, use mask=0x000000F0 and offset=4. internal int this[int mask, int offset] { get { #if DEBUG VerifyMaskAndOffset(mask, offset); #endif return ((data & mask) >> offset); } set { #if DEBUG VerifyMaskAndOffset(mask, offset); #endif Debug.Assert(value >= 0, "Value must be non-negative."); Debug.Assert(((value << offset) & ~mask) == 0, "Value must fit within the mask."); data = (data & ~mask) | (value << offset); } } #if DEBUG private void VerifyMaskAndOffset(int mask, int offset) { Debug.Assert(mask > 0, "Mask must be nonempty and non-negative."); // Offset must be between 0 and 30 inclusive, since only 31 bits are available and at least one bit must be used. Debug.Assert(offset >= 0 && offset <= 30, "Offset must be between 0 and 30 inclusive."); Debug.Assert((mask & ((1 << offset) - 1)) == 0, "All mask bits to the right of the offset index must be zero."); Debug.Assert(((mask >> offset) & 1) == 1, "The mask bit at the offset index must be one."); } #endif internal void Set(int bit) { data |= bit; } internal void Clear(int bit) { data &= ~bit; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System; // // This is a cut down copy of System.Collections.Specialized.BitVector32. The // reason this is here is because it is used rather intensively by Control and // WebControl. As a result, being able to inline this operations results in a // measurable performance gain, at the expense of some maintainability. // [Serializable] internal struct SimpleBitVector32 { private int data; internal SimpleBitVector32(int data) { this.data = data; } internal int IntegerValue { get { return data; } set { data = value; } } internal bool this[int bit] { get { return (data & bit) == bit; } set { int _data = data; if(value) { data = _data | bit; } else { data = _data & ~bit; } } } // Stores and retrieves a positive integer in the bit vector. The "mask" parameter selects the bits // to use in the vector, and the "offset" parameter is the index of the rightmost bit in the // mask. The offset could be calculated from the mask, but is passed in as a separate constant // for improved performance. NOTE: Because the data field is a signed integer, only 31 of the 32 // available bits may be used. // Example: To store a 4-bit integer in bits 4-7, use mask=0x000000F0 and offset=4. internal int this[int mask, int offset] { get { #if DEBUG VerifyMaskAndOffset(mask, offset); #endif return ((data & mask) >> offset); } set { #if DEBUG VerifyMaskAndOffset(mask, offset); #endif Debug.Assert(value >= 0, "Value must be non-negative."); Debug.Assert(((value << offset) & ~mask) == 0, "Value must fit within the mask."); data = (data & ~mask) | (value << offset); } } #if DEBUG private void VerifyMaskAndOffset(int mask, int offset) { Debug.Assert(mask > 0, "Mask must be nonempty and non-negative."); // Offset must be between 0 and 30 inclusive, since only 31 bits are available and at least one bit must be used. Debug.Assert(offset >= 0 && offset <= 30, "Offset must be between 0 and 30 inclusive."); Debug.Assert((mask & ((1 << offset) - 1)) == 0, "All mask bits to the right of the offset index must be zero."); Debug.Assert(((mask >> offset) & 1) == 1, "The mask bit at the offset index must be one."); } #endif internal void Set(int bit) { data |= bit; } internal void Clear(int bit) { data &= ~bit; } } } // 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
- ProxyGenerator.cs
- SqlComparer.cs
- StylusButtonEventArgs.cs
- XmlILStorageConverter.cs
- ListSortDescription.cs
- OperandQuery.cs
- TreeViewImageKeyConverter.cs
- DataGridItem.cs
- FormViewAutoFormat.cs
- ToolBarButton.cs
- GridItemCollection.cs
- ResourceDictionaryCollection.cs
- HtmlGenericControl.cs
- XmlSchemaFacet.cs
- PersianCalendar.cs
- SystemIPv6InterfaceProperties.cs
- UntrustedRecipientException.cs
- GeneralTransform3DGroup.cs
- ClientConfigurationHost.cs
- MappedMetaModel.cs
- ServicePointManager.cs
- HScrollProperties.cs
- XmlBoundElement.cs
- PathFigure.cs
- BufferAllocator.cs
- Crc32Helper.cs
- XmlComment.cs
- GrabHandleGlyph.cs
- ToolboxItem.cs
- ApplicationHost.cs
- FileDialog.cs
- SourceInterpreter.cs
- DockPatternIdentifiers.cs
- FamilyTypefaceCollection.cs
- SqlParameterCollection.cs
- OleDbMetaDataFactory.cs
- ListChangedEventArgs.cs
- PropertyItem.cs
- WindowsHyperlink.cs
- MasterPage.cs
- Vector3DKeyFrameCollection.cs
- XmlSchemaAnnotation.cs
- ProcessHost.cs
- fixedPageContentExtractor.cs
- SQLCharsStorage.cs
- QilInvoke.cs
- UnaryNode.cs
- ErrorHandlingReceiver.cs
- ItemType.cs
- TextServicesLoader.cs
- PartBasedPackageProperties.cs
- MessageSmuggler.cs
- sqlpipe.cs
- HttpListenerRequest.cs
- HttpProfileBase.cs
- RawTextInputReport.cs
- TemplateControlBuildProvider.cs
- PagerSettings.cs
- BehaviorEditorPart.cs
- CleanUpVirtualizedItemEventArgs.cs
- Qualifier.cs
- DocumentPageTextView.cs
- ApplicationDirectory.cs
- SafeHandles.cs
- translator.cs
- ReferentialConstraintRoleElement.cs
- RIPEMD160Managed.cs
- PersonalizationStateInfoCollection.cs
- ServiceDeploymentInfo.cs
- Predicate.cs
- PackagePart.cs
- WebPartAddingEventArgs.cs
- ForeignKeyConstraint.cs
- Rethrow.cs
- DropShadowEffect.cs
- HttpCacheVaryByContentEncodings.cs
- TreeNodeBinding.cs
- XmlDictionaryWriter.cs
- PackagingUtilities.cs
- DataMemberFieldConverter.cs
- TransformationRules.cs
- PropertySourceInfo.cs
- DesignerOptions.cs
- BufferedReceiveManager.cs
- SrgsElementFactory.cs
- XmlNotation.cs
- LifetimeServices.cs
- FixedBufferAttribute.cs
- ObjectQuery.cs
- ApplicationFileCodeDomTreeGenerator.cs
- SessionPageStatePersister.cs
- QueryIntervalOp.cs
- TextRunCacheImp.cs
- DataServiceBehavior.cs
- NamespaceDecl.cs
- AnimationLayer.cs
- SqlDelegatedTransaction.cs
- MetadataArtifactLoader.cs
- SqlLiftIndependentRowExpressions.cs
- AttributeCollection.cs