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
- LinkLabel.cs
- Rectangle.cs
- TiffBitmapEncoder.cs
- PropertyOverridesDialog.cs
- PropertyValue.cs
- Quad.cs
- LicenseProviderAttribute.cs
- EdgeProfileValidation.cs
- AdornerDecorator.cs
- ListBoxItem.cs
- MemberCollection.cs
- Expressions.cs
- IntSecurity.cs
- TypeDescriptionProvider.cs
- EntityParameter.cs
- UICuesEvent.cs
- SafeNativeMethods.cs
- XsdBuilder.cs
- FixedSOMGroup.cs
- TableDetailsRow.cs
- SecureStringHasher.cs
- XslNumber.cs
- SettingsBase.cs
- SecurityContext.cs
- DataMisalignedException.cs
- WhitespaceReader.cs
- CompilationRelaxations.cs
- ReadOnlyCollectionBase.cs
- MailHeaderInfo.cs
- Int32Rect.cs
- ContentTypeSettingClientMessageFormatter.cs
- DataGridRowsPresenter.cs
- DoubleAnimation.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- Html32TextWriter.cs
- altserialization.cs
- CellRelation.cs
- CharEntityEncoderFallback.cs
- HttpCookie.cs
- EntityDataSourceDataSelection.cs
- DetailsViewRow.cs
- StrokeCollection2.cs
- StylusShape.cs
- KeyInfo.cs
- QilInvokeLateBound.cs
- SplineKeyFrames.cs
- BidOverLoads.cs
- RelationshipFixer.cs
- XmlSchemas.cs
- TableProviderWrapper.cs
- XmlHelper.cs
- Condition.cs
- SystemIcmpV6Statistics.cs
- HostProtectionPermission.cs
- ControlBuilderAttribute.cs
- SafeNativeMethods.cs
- DescendantBaseQuery.cs
- PropertyGridEditorPart.cs
- PrintDialog.cs
- BufferedWebEventProvider.cs
- SQLInt64Storage.cs
- FontStretch.cs
- DataSysAttribute.cs
- typedescriptorpermission.cs
- ComponentResourceKeyConverter.cs
- DrawingContext.cs
- WebAdminConfigurationHelper.cs
- Range.cs
- WindowsIdentity.cs
- AssociationSetMetadata.cs
- ImageInfo.cs
- BuildManagerHost.cs
- webeventbuffer.cs
- Preprocessor.cs
- EventMappingSettingsCollection.cs
- MailAddressCollection.cs
- LOSFormatter.cs
- DataContractSerializerFaultFormatter.cs
- ClientUtils.cs
- RsaKeyGen.cs
- ConfigurationStrings.cs
- CollectionViewGroupInternal.cs
- ResourcesChangeInfo.cs
- SmiEventStream.cs
- FindCompletedEventArgs.cs
- DictionaryContent.cs
- TypeNameConverter.cs
- WebPartHeaderCloseVerb.cs
- ListViewHitTestInfo.cs
- namescope.cs
- RemotingException.cs
- RayHitTestParameters.cs
- Operators.cs
- SecUtil.cs
- TranslateTransform3D.cs
- EntityDataSourceContextCreatedEventArgs.cs
- BinaryFormatterWriter.cs
- loginstatus.cs
- Profiler.cs
- KeyValueConfigurationCollection.cs