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
- DesignOnlyAttribute.cs
- ThicknessAnimation.cs
- OleDbMetaDataFactory.cs
- BooleanFunctions.cs
- JpegBitmapDecoder.cs
- SelectorItemAutomationPeer.cs
- DocumentGridPage.cs
- TabControlAutomationPeer.cs
- IdnMapping.cs
- Error.cs
- WorkflowDebuggerSteppingAttribute.cs
- FormsAuthenticationTicket.cs
- WindowsHyperlink.cs
- ScriptIgnoreAttribute.cs
- OutputCacheProfileCollection.cs
- ScriptComponentDescriptor.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- RecognizerInfo.cs
- LicFileLicenseProvider.cs
- ZipIOBlockManager.cs
- ScaleTransform.cs
- MarshalByRefObject.cs
- SubqueryRules.cs
- LinkClickEvent.cs
- EffectiveValueEntry.cs
- Assert.cs
- DesignColumn.cs
- LinqDataSourceSelectEventArgs.cs
- CodeMethodReturnStatement.cs
- FrameworkElementFactory.cs
- ParagraphVisual.cs
- OdbcParameter.cs
- TimeSpan.cs
- RectangleF.cs
- AssemblyAttributesGoHere.cs
- ExpandCollapseProviderWrapper.cs
- Matrix3D.cs
- hwndwrapper.cs
- Utility.cs
- XhtmlBasicValidationSummaryAdapter.cs
- ScriptServiceAttribute.cs
- XmlSerializerSection.cs
- DisplayInformation.cs
- DocumentPage.cs
- SqlStatistics.cs
- WindowsFormsSynchronizationContext.cs
- ColorMatrix.cs
- MetadataAssemblyHelper.cs
- SamlAdvice.cs
- DropDownButton.cs
- AutomationIdentifierGuids.cs
- EndOfStreamException.cs
- NetworkStream.cs
- Process.cs
- Monitor.cs
- WebProxyScriptElement.cs
- Timer.cs
- TreeViewImageIndexConverter.cs
- InitializerFacet.cs
- ToolStripPanelRow.cs
- EmptyImpersonationContext.cs
- ConstrainedDataObject.cs
- RouteValueExpressionBuilder.cs
- HttpListenerRequest.cs
- Unit.cs
- DateTimeUtil.cs
- EntityModelBuildProvider.cs
- GridViewAutomationPeer.cs
- MasterPageCodeDomTreeGenerator.cs
- JobInputBins.cs
- ClonableStack.cs
- AnimationLayer.cs
- HGlobalSafeHandle.cs
- DebuggerAttributes.cs
- ProviderUtil.cs
- CodeExporter.cs
- Page.cs
- HttpInputStream.cs
- ParameterReplacerVisitor.cs
- UnknownBitmapEncoder.cs
- X509ChainPolicy.cs
- SafePEFileHandle.cs
- SqlMethodTransformer.cs
- IgnoreSectionHandler.cs
- MailMessageEventArgs.cs
- DesignerCalendarAdapter.cs
- ActivationServices.cs
- TemplateField.cs
- ObjectRef.cs
- PackageProperties.cs
- CheckBoxBaseAdapter.cs
- StaticDataManager.cs
- RsaSecurityToken.cs
- SafeRightsManagementPubHandle.cs
- TreeSet.cs
- ApplicationDirectory.cs
- httpapplicationstate.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- XmlSchemaValidationException.cs
- ListQueryResults.cs