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
- ReverseInheritProperty.cs
- BuildProvidersCompiler.cs
- XsltConvert.cs
- CompositeControlDesigner.cs
- DNS.cs
- SdlChannelSink.cs
- ActivityPreviewDesigner.cs
- ListParaClient.cs
- ManipulationStartedEventArgs.cs
- OrthographicCamera.cs
- BitmapFrameDecode.cs
- Vector3D.cs
- DictionaryEntry.cs
- JsonReader.cs
- GeneralTransform.cs
- XmlDataSource.cs
- ModuleBuilder.cs
- SqlDataReader.cs
- XmlNullResolver.cs
- SqlDeflator.cs
- RayMeshGeometry3DHitTestResult.cs
- IItemContainerGenerator.cs
- ConfigXmlComment.cs
- OptionalMessageQuery.cs
- Assign.cs
- Authorization.cs
- LicenseException.cs
- FastPropertyAccessor.cs
- ThreadPool.cs
- XmlDataDocument.cs
- ClientBuildManagerCallback.cs
- DesignTimeValidationFeature.cs
- TextTreeDeleteContentUndoUnit.cs
- DataRecordObjectView.cs
- Canvas.cs
- DefaultMemberAttribute.cs
- PenThreadWorker.cs
- RegexBoyerMoore.cs
- DateTimeValueSerializerContext.cs
- MethodSet.cs
- SimpleTypesSurrogate.cs
- TdsRecordBufferSetter.cs
- BufferedGraphics.cs
- PropertyPathConverter.cs
- _AutoWebProxyScriptWrapper.cs
- NullableFloatAverageAggregationOperator.cs
- PointCollection.cs
- PtsContext.cs
- MessageBox.cs
- AlphabeticalEnumConverter.cs
- ConfigXmlDocument.cs
- Point4D.cs
- EventBookmark.cs
- XmlNamespaceManager.cs
- CodeActivity.cs
- BufferAllocator.cs
- mediaeventargs.cs
- WaitHandle.cs
- AsyncOperation.cs
- GroupItemAutomationPeer.cs
- _DigestClient.cs
- RadialGradientBrush.cs
- SettingsPropertyValue.cs
- DoubleMinMaxAggregationOperator.cs
- UserControlCodeDomTreeGenerator.cs
- HttpModuleAction.cs
- XmlAutoDetectWriter.cs
- WinCategoryAttribute.cs
- GenerateHelper.cs
- UnsafeNetInfoNativeMethods.cs
- Context.cs
- CorrelationToken.cs
- IpcClientManager.cs
- ToolStripLabel.cs
- PersonalizationDictionary.cs
- Model3DGroup.cs
- SamlAudienceRestrictionCondition.cs
- IItemProperties.cs
- JoinGraph.cs
- PropertyManager.cs
- FormatException.cs
- DataTableMappingCollection.cs
- TextOutput.cs
- KeyTimeConverter.cs
- DataErrorValidationRule.cs
- TdsParserStateObject.cs
- XmlQueryCardinality.cs
- CanonicalXml.cs
- FixedSOMPageConstructor.cs
- JournalEntryListConverter.cs
- mactripleDES.cs
- IdentifierService.cs
- ClassData.cs
- Socket.cs
- CommandEventArgs.cs
- __Error.cs
- COM2TypeInfoProcessor.cs
- TrustManagerMoreInformation.cs
- ISessionStateStore.cs
- NativeMethods.cs