Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / Runtime / Serialization / BitFlagsGenerator.cs / 1 / BitFlagsGenerator.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Reflection; using System.Reflection.Emit; using System.Security; //// Critical - works on CodeGenerator objects, which require Critical access // [SecurityRequiresReview(SecurityCriticalScope.Everything)] class BitFlagsGenerator { int bitCount; CodeGenerator ilg; LocalBuilder[] locals; public BitFlagsGenerator(int bitCount, CodeGenerator ilg, string localName) { this.ilg = ilg; this.bitCount = bitCount; int localCount = (bitCount + 7) / 8; locals = new LocalBuilder[localCount]; for (int i = 0; i < locals.Length; i++) { locals[i] = ilg.DeclareLocal(typeof(byte), localName + i, (byte) 0); } } public static bool IsBitSet(byte[] bytes, int bitIndex) { int byteIndex = GetByteIndex(bitIndex); byte bitValue = GetBitValue(bitIndex); return (bytes[byteIndex] & bitValue) == bitValue; } public static void SetBit(byte[] bytes, int bitIndex) { int byteIndex = GetByteIndex(bitIndex); byte bitValue = GetBitValue(bitIndex); bytes[byteIndex] |= bitValue; } public int GetBitCount() { return bitCount; } public LocalBuilder GetLocal(int i) { return locals[i]; } public int GetLocalCount() { return locals.Length; } public void Load(int bitIndex) { LocalBuilder local = locals[GetByteIndex(bitIndex)]; byte bitValue = GetBitValue(bitIndex); ilg.Load(local); ilg.Load(bitValue); ilg.And(); ilg.Load(bitValue); ilg.Ceq(); } public void LoadArray() { LocalBuilder localArray = ilg.DeclareLocal(Globals.TypeOfByteArray, "localArray"); ilg.NewArray(typeof(byte), locals.Length); ilg.Store(localArray); for (int i = 0; i < locals.Length; i++) { ilg.StoreArrayElement(localArray, i, locals[i]); } ilg.Load(localArray); } public void Store(int bitIndex, bool value) { LocalBuilder local = locals[GetByteIndex(bitIndex)]; byte bitValue = GetBitValue(bitIndex); if (value) { ilg.Load(local); ilg.Load(bitValue); ilg.Or(); ilg.Stloc(local); } else { ilg.Load(local); ilg.Load(bitValue); ilg.Not(); ilg.And(); ilg.Stloc(local); } } static byte GetBitValue(int bitIndex) { return (byte)(1 << (bitIndex & 7)); } static int GetByteIndex(int bitIndex) { return bitIndex >> 3; } } } // 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
- ClickablePoint.cs
- ResolvedKeyFrameEntry.cs
- PageCodeDomTreeGenerator.cs
- ObjectDataSourceEventArgs.cs
- UserNamePasswordValidator.cs
- MapPathBasedVirtualPathProvider.cs
- namescope.cs
- SqlAliaser.cs
- XmlDeclaration.cs
- Font.cs
- ReliableMessagingVersion.cs
- PartialList.cs
- IItemProperties.cs
- VBIdentifierDesigner.xaml.cs
- SubMenuStyleCollection.cs
- DataFormat.cs
- TranslateTransform.cs
- SoapHeaderAttribute.cs
- WhitespaceRuleLookup.cs
- AlternateView.cs
- PersonalizationEntry.cs
- DeclaredTypeValidatorAttribute.cs
- EntityTypeEmitter.cs
- SelectManyQueryOperator.cs
- Monitor.cs
- DynamicDiscoveryDocument.cs
- TreeView.cs
- DatagridviewDisplayedBandsData.cs
- OperationResponse.cs
- PointAnimationUsingPath.cs
- FormatVersion.cs
- TransactionFlowOption.cs
- MethodCallExpression.cs
- XmlArrayAttribute.cs
- ThrowHelper.cs
- dbdatarecord.cs
- IsolatedStoragePermission.cs
- ADMembershipUser.cs
- InheritanceContextChangedEventManager.cs
- Metadata.cs
- TabControlEvent.cs
- ITreeGenerator.cs
- MsmqMessageProperty.cs
- HandleCollector.cs
- WebPartConnectionsEventArgs.cs
- AssemblyCollection.cs
- DbCommandTree.cs
- BridgeDataRecord.cs
- RadialGradientBrush.cs
- WSTrustFeb2005.cs
- RowUpdatingEventArgs.cs
- SignatureToken.cs
- DesignParameter.cs
- DictionaryManager.cs
- FontStretchConverter.cs
- ValueConversionAttribute.cs
- ListBindingConverter.cs
- DoubleCollection.cs
- WebBrowserUriTypeConverter.cs
- ISAPIWorkerRequest.cs
- ResourceSet.cs
- SpecialFolderEnumConverter.cs
- EntryPointNotFoundException.cs
- DrawingVisual.cs
- TrailingSpaceComparer.cs
- SelectedDatesCollection.cs
- FrameSecurityDescriptor.cs
- Ipv6Element.cs
- XmlBoundElement.cs
- RoleService.cs
- ActivityLocationReferenceEnvironment.cs
- InkPresenter.cs
- Wizard.cs
- XmlValueConverter.cs
- Monitor.cs
- BoundField.cs
- ImageMapEventArgs.cs
- XmlSignificantWhitespace.cs
- sqlcontext.cs
- DataBinder.cs
- X509KeyIdentifierClauseType.cs
- SectionXmlInfo.cs
- SizeFConverter.cs
- XmlSchemaAppInfo.cs
- EncoderReplacementFallback.cs
- ISessionStateStore.cs
- PipelineDeploymentState.cs
- ConfigXmlText.cs
- AgileSafeNativeMemoryHandle.cs
- CancelEventArgs.cs
- SortDescriptionCollection.cs
- DuplicateDetector.cs
- ListMarkerSourceInfo.cs
- InternalResources.cs
- DataGridLinkButton.cs
- TextEditorCopyPaste.cs
- ComplexType.cs
- VectorCollectionValueSerializer.cs
- BooleanFacetDescriptionElement.cs
- Asn1IntegerConverter.cs