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
- ReferencedAssembly.cs
- MessageQueuePermission.cs
- DataServiceCollectionOfT.cs
- ItemsControl.cs
- CheckBox.cs
- AspNetHostingPermission.cs
- OciHandle.cs
- LoginAutoFormat.cs
- SqlDataSourceCache.cs
- BasicKeyConstraint.cs
- KeyToListMap.cs
- BitmapCodecInfo.cs
- BitmapMetadataEnumerator.cs
- ListenerServiceInstallComponent.cs
- ToolStripSystemRenderer.cs
- SqlCacheDependencySection.cs
- Itemizer.cs
- EventListenerClientSide.cs
- TransformValueSerializer.cs
- CustomAttributeFormatException.cs
- DependencyPropertyChangedEventArgs.cs
- AssemblyAttributes.cs
- AsymmetricKeyExchangeDeformatter.cs
- InstanceOwnerQueryResult.cs
- Parser.cs
- GroupByExpressionRewriter.cs
- LayoutExceptionEventArgs.cs
- InlinedAggregationOperator.cs
- XPathDocument.cs
- DataGridViewAutoSizeModeEventArgs.cs
- ContentElementCollection.cs
- RequestBringIntoViewEventArgs.cs
- HelloMessageApril2005.cs
- VariantWrapper.cs
- CompositeTypefaceMetrics.cs
- TemplateXamlParser.cs
- TraceSection.cs
- WebBrowserNavigatedEventHandler.cs
- ImageSourceConverter.cs
- BrowserCapabilitiesCompiler.cs
- InternalConfigRoot.cs
- HttpRuntimeSection.cs
- PersonalizationProvider.cs
- DataGridViewElement.cs
- ListBoxItem.cs
- CompilerResults.cs
- TextTrailingWordEllipsis.cs
- BCLDebug.cs
- SmiConnection.cs
- GetPageCompletedEventArgs.cs
- HostProtectionPermission.cs
- ModelChangedEventArgsImpl.cs
- PngBitmapEncoder.cs
- JsonFormatGeneratorStatics.cs
- ToolStripPanelCell.cs
- XmlBaseReader.cs
- SolidColorBrush.cs
- HMACSHA1.cs
- wgx_commands.cs
- MultipleViewPattern.cs
- SqlGatherConsumedAliases.cs
- CellPartitioner.cs
- TableLayoutStyleCollection.cs
- TextViewSelectionProcessor.cs
- LinqToSqlWrapper.cs
- RightNameExpirationInfoPair.cs
- HostProtectionException.cs
- TrustSection.cs
- WindowsMenu.cs
- UndirectedGraph.cs
- WebPageTraceListener.cs
- DefaultObjectMappingItemCollection.cs
- ArrangedElement.cs
- Quad.cs
- WorkflowQueueInfo.cs
- SAPIEngineTypes.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- CompiledQuery.cs
- XmlMembersMapping.cs
- FragmentNavigationEventArgs.cs
- HotCommands.cs
- sapiproxy.cs
- nulltextnavigator.cs
- TreeNodeCollection.cs
- PrintDialog.cs
- SqlCacheDependencyDatabase.cs
- WindowsStreamSecurityElement.cs
- AnimationLayer.cs
- HttpPostedFileWrapper.cs
- control.ime.cs
- SvcMapFile.cs
- GroupBox.cs
- DataGridViewRow.cs
- WebScriptMetadataMessageEncoderFactory.cs
- VisualStyleInformation.cs
- KnownIds.cs
- PointIndependentAnimationStorage.cs
- SqlInternalConnectionSmi.cs
- XhtmlBasicLabelAdapter.cs
- SemaphoreSecurity.cs