Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / BitFlagsGenerator.cs / 1305376 / 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; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview (Critical) - works on CodeGenerator objects, which require Critical access.")] 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. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Reflection; using System.Reflection.Emit; using System.Security; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview (Critical) - works on CodeGenerator objects, which require Critical access.")] 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OleStrCAMarshaler.cs
- TheQuery.cs
- BamlReader.cs
- WizardForm.cs
- WinCategoryAttribute.cs
- AuthenticationService.cs
- SqlCommandBuilder.cs
- TimeManager.cs
- GenericParameterDataContract.cs
- BlobPersonalizationState.cs
- complextypematerializer.cs
- OdbcEnvironment.cs
- selecteditemcollection.cs
- XmlAtomicValue.cs
- GeometryModel3D.cs
- EntityDataSourceSelectedEventArgs.cs
- wgx_render.cs
- XmlMembersMapping.cs
- AnimationClock.cs
- MasterPage.cs
- ProtocolViolationException.cs
- GraphicsPathIterator.cs
- ISFTagAndGuidCache.cs
- EdmItemError.cs
- HyperLinkField.cs
- NegotiateStream.cs
- VectorValueSerializer.cs
- ConnectionManagementElementCollection.cs
- SqlTrackingQuery.cs
- ViewgenGatekeeper.cs
- CodeRegionDirective.cs
- DesignerValidatorAdapter.cs
- DefinitionProperties.cs
- StyleSheetComponentEditor.cs
- RequestStatusBarUpdateEventArgs.cs
- Vector3DCollection.cs
- SelectionBorderGlyph.cs
- ListMarkerSourceInfo.cs
- TextSpan.cs
- ListViewHitTestInfo.cs
- CheckableControlBaseAdapter.cs
- Mouse.cs
- OletxCommittableTransaction.cs
- FrameworkTemplate.cs
- ComponentRenameEvent.cs
- NativeCompoundFileAPIs.cs
- Odbc32.cs
- dataprotectionpermissionattribute.cs
- DesignRelation.cs
- SqlConnection.cs
- XmlLoader.cs
- CompilationUtil.cs
- XPathSelfQuery.cs
- NavigationService.cs
- Helpers.cs
- MultipartIdentifier.cs
- serverconfig.cs
- StringHandle.cs
- DataException.cs
- NumericUpDownAccelerationCollection.cs
- TextPointer.cs
- NativeMethodsCLR.cs
- RuntimeHandles.cs
- ComponentChangingEvent.cs
- ForeignKeyConstraint.cs
- TextServicesManager.cs
- CryptoApi.cs
- CompilationSection.cs
- URIFormatException.cs
- CompressedStack.cs
- BinHexDecoder.cs
- ControlBuilderAttribute.cs
- TextElementCollectionHelper.cs
- InputProcessorProfiles.cs
- DoubleCollectionValueSerializer.cs
- ScrollableControl.cs
- PropertyKey.cs
- SEHException.cs
- NativeMethods.cs
- XPathDocumentNavigator.cs
- CompositeScriptReference.cs
- RectangleConverter.cs
- XdrBuilder.cs
- StorageConditionPropertyMapping.cs
- TimersDescriptionAttribute.cs
- LineInfo.cs
- ValidationUtility.cs
- RootProfilePropertySettingsCollection.cs
- ImplicitInputBrush.cs
- TdsEnums.cs
- XamlInterfaces.cs
- AttributeCollection.cs
- Canvas.cs
- BitmapEffect.cs
- RegistryPermission.cs
- SoapExtensionTypeElement.cs
- AttachmentCollection.cs
- DoubleAnimationClockResource.cs
- Facet.cs
- StringKeyFrameCollection.cs