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
- MemberAssignment.cs
- AttributeQuery.cs
- MarkupWriter.cs
- Currency.cs
- XMLSyntaxException.cs
- BasePattern.cs
- EntityContainer.cs
- XmlIncludeAttribute.cs
- DirtyTextRange.cs
- Oid.cs
- InfoCardBaseException.cs
- InternalBase.cs
- WebPartEditorApplyVerb.cs
- MdImport.cs
- ImageCodecInfoPrivate.cs
- WebPartZoneCollection.cs
- MulticastNotSupportedException.cs
- HttpCacheVaryByContentEncodings.cs
- RenderDataDrawingContext.cs
- IsolatedStorageFile.cs
- ToolBar.cs
- TokenBasedSet.cs
- AudioBase.cs
- SmtpAuthenticationManager.cs
- CapabilitiesAssignment.cs
- IfElseDesigner.xaml.cs
- LayoutEditorPart.cs
- PhysicalFontFamily.cs
- ImageSource.cs
- Model3D.cs
- ObjectDataSource.cs
- HttpChannelListener.cs
- FactoryGenerator.cs
- ColorConvertedBitmap.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- UnmanagedBitmapWrapper.cs
- Encoder.cs
- EntityAdapter.cs
- SafePointer.cs
- TemplateXamlTreeBuilder.cs
- AppDomainShutdownMonitor.cs
- ResourceReferenceExpressionConverter.cs
- DrawItemEvent.cs
- GZipDecoder.cs
- FixedSchema.cs
- SafeViewOfFileHandle.cs
- SqlExpressionNullability.cs
- ArraySubsetEnumerator.cs
- DataContractSerializerSection.cs
- ConvertBinder.cs
- DesignerValidatorAdapter.cs
- QueryOperationResponseOfT.cs
- DbParameterCollectionHelper.cs
- XmlChildNodes.cs
- Exceptions.cs
- EmptyControlCollection.cs
- TranslateTransform3D.cs
- TypeConverter.cs
- CipherData.cs
- TransactionFlowAttribute.cs
- DiscreteKeyFrames.cs
- DataObjectPastingEventArgs.cs
- OleDbFactory.cs
- XamlReaderHelper.cs
- DataGridViewRowCancelEventArgs.cs
- HtmlInputText.cs
- WebPartChrome.cs
- SymbolTable.cs
- PersonalizationStateInfoCollection.cs
- ColorConverter.cs
- ResXResourceSet.cs
- HttpContextServiceHost.cs
- XmlLanguageConverter.cs
- FunctionQuery.cs
- FocusTracker.cs
- TransformedBitmap.cs
- UnsafeMethods.cs
- ManagedWndProcTracker.cs
- ZoomingMessageFilter.cs
- NotFiniteNumberException.cs
- DNS.cs
- WinFormsSpinner.cs
- Zone.cs
- EntityDesignPluralizationHandler.cs
- DataGridViewRowCollection.cs
- HttpVersion.cs
- PageThemeParser.cs
- WebPartCloseVerb.cs
- ApplicationFileCodeDomTreeGenerator.cs
- StreamWriter.cs
- FileSystemEnumerable.cs
- WebPartConnectionsConfigureVerb.cs
- UnsafeNativeMethods.cs
- SizeChangedInfo.cs
- GrammarBuilderWildcard.cs
- SqlMethodAttribute.cs
- TableLayoutPanelDesigner.cs
- FormViewDeletedEventArgs.cs
- AbandonedMutexException.cs
- Automation.cs