Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- IProducerConsumerCollection.cs
- IDictionary.cs
- Pool.cs
- WMIInterop.cs
- WebPartConnectionsCloseVerb.cs
- X509ChainPolicy.cs
- GenerateScriptTypeAttribute.cs
- Span.cs
- DesignerAdapterAttribute.cs
- PackUriHelper.cs
- EncoderParameter.cs
- HostingPreferredMapPath.cs
- _AuthenticationState.cs
- XmlStreamStore.cs
- MappingSource.cs
- basevalidator.cs
- ConfigurationManager.cs
- UnmanagedMarshal.cs
- ComponentRenameEvent.cs
- ProxyGenerator.cs
- AmbientProperties.cs
- NameValueSectionHandler.cs
- ProfileService.cs
- UniqueEventHelper.cs
- _SSPIWrapper.cs
- DataAdapter.cs
- COM2PictureConverter.cs
- DesignerTransaction.cs
- RectangleConverter.cs
- DecimalFormatter.cs
- SiteMapSection.cs
- controlskin.cs
- BaseAddressPrefixFilterElementCollection.cs
- XmlSchemaSimpleTypeUnion.cs
- Registry.cs
- EmptyEnumerator.cs
- TypedTableGenerator.cs
- SmtpCommands.cs
- HttpModulesInstallComponent.cs
- WebPartDescription.cs
- CorrelationScope.cs
- TransformConverter.cs
- SynchronousSendBindingElement.cs
- RegexCompilationInfo.cs
- WebPartUserCapability.cs
- PerformanceCounterManager.cs
- AssemblyInfo.cs
- Parsers.cs
- PackagePartCollection.cs
- XmlCompatibilityReader.cs
- XmlChildEnumerator.cs
- Error.cs
- TextRunProperties.cs
- WebEventCodes.cs
- TableAdapterManagerNameHandler.cs
- InvalidPropValue.cs
- ToggleProviderWrapper.cs
- PersonalizationDictionary.cs
- TraceEventCache.cs
- NavigationPropertyEmitter.cs
- DependencyObjectPropertyDescriptor.cs
- ProgressBarHighlightConverter.cs
- CssStyleCollection.cs
- WeakReferenceEnumerator.cs
- FontStyleConverter.cs
- DesignTableCollection.cs
- ToolStripSettings.cs
- SizeKeyFrameCollection.cs
- HttpCachePolicy.cs
- XmlTextWriter.cs
- Missing.cs
- UDPClient.cs
- VariableReference.cs
- InvalidDataException.cs
- DockPattern.cs
- CodeVariableDeclarationStatement.cs
- GreenMethods.cs
- ConfigXmlComment.cs
- RotateTransform3D.cs
- DataBinding.cs
- StickyNoteAnnotations.cs
- SymLanguageType.cs
- Rotation3D.cs
- CounterCreationDataCollection.cs
- TextServicesCompartmentContext.cs
- PenLineCapValidation.cs
- ConfigurationSectionCollection.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- Timeline.cs
- IPGlobalProperties.cs
- PromptStyle.cs
- SmtpFailedRecipientException.cs
- HttpListenerContext.cs
- Byte.cs
- Label.cs
- InputLanguageEventArgs.cs
- DuplicateWaitObjectException.cs
- CultureSpecificStringDictionary.cs
- SafeThreadHandle.cs
- ValidationService.cs