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
- WmfPlaceableFileHeader.cs
- Sql8ConformanceChecker.cs
- RuleValidation.cs
- UpdateException.cs
- UnhandledExceptionEventArgs.cs
- EncoderBestFitFallback.cs
- SspiNegotiationTokenProvider.cs
- LayoutTableCell.cs
- DispatcherEventArgs.cs
- FigureParaClient.cs
- CollectionExtensions.cs
- x509utils.cs
- TraceHandlerErrorFormatter.cs
- PersonalizationState.cs
- HttpListenerResponse.cs
- PackagePartCollection.cs
- WasAdminWrapper.cs
- StrokeIntersection.cs
- PerfCounterSection.cs
- ExternalException.cs
- StringAttributeCollection.cs
- SweepDirectionValidation.cs
- UriTemplateTable.cs
- RuntimeEnvironment.cs
- SmtpFailedRecipientException.cs
- ApplicationTrust.cs
- XmlSubtreeReader.cs
- PropertyOrder.cs
- Debug.cs
- SynchronizedCollection.cs
- TraceHandlerErrorFormatter.cs
- CannotUnloadAppDomainException.cs
- RegexReplacement.cs
- DecoratedNameAttribute.cs
- Ops.cs
- ApplicationServiceHelper.cs
- TreeViewBindingsEditor.cs
- XmlSchemaComplexContent.cs
- CreateUserErrorEventArgs.cs
- ToolStripSeparatorRenderEventArgs.cs
- SqlXml.cs
- LineBreak.cs
- TdsParser.cs
- ScriptRegistrationManager.cs
- SqlAliaser.cs
- WindowsSlider.cs
- SqlUtils.cs
- SemanticBasicElement.cs
- DesignerAdapterAttribute.cs
- XmlSchemaAttribute.cs
- FactoryGenerator.cs
- SocketInformation.cs
- FlowDocumentScrollViewer.cs
- SystemColorTracker.cs
- MiniConstructorInfo.cs
- DataGridHeaderBorder.cs
- entityreference_tresulttype.cs
- FlowDocumentView.cs
- ModelPerspective.cs
- UriTemplateVariableQueryValue.cs
- ScriptingRoleServiceSection.cs
- BufferModeSettings.cs
- SubstitutionDesigner.cs
- CompareValidator.cs
- ObjectDataSourceEventArgs.cs
- XmlDataFileEditor.cs
- OleDbReferenceCollection.cs
- SerialPort.cs
- IndicShape.cs
- versioninfo.cs
- WindowsContainer.cs
- WindowsFormsHost.cs
- UserControlFileEditor.cs
- DrawingBrush.cs
- COM2ExtendedUITypeEditor.cs
- BaseAsyncResult.cs
- ProgressBarBrushConverter.cs
- BitmapCodecInfoInternal.cs
- BaseHashHelper.cs
- ByteStreamGeometryContext.cs
- CustomErrorCollection.cs
- SystemKeyConverter.cs
- XmlAttributeProperties.cs
- Converter.cs
- ObjectQueryState.cs
- QueryCoreOp.cs
- SizeKeyFrameCollection.cs
- FixedTextSelectionProcessor.cs
- DataSourceDescriptorCollection.cs
- HuffModule.cs
- BrowserCapabilitiesFactoryBase.cs
- ArrangedElement.cs
- SamlAttribute.cs
- HtmlInputFile.cs
- SqlDataSourceEnumerator.cs
- EdmValidator.cs
- Operators.cs
- SiteOfOriginPart.cs
- Int32Storage.cs
- DateTime.cs