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
- RadioButton.cs
- NamedPipeConnectionPool.cs
- ResourceDefaultValueAttribute.cs
- KeyMatchBuilder.cs
- XmlSchemaObject.cs
- LinqDataSourceInsertEventArgs.cs
- ServiceDurableInstance.cs
- XPathExpr.cs
- SiteMapSection.cs
- SmiRecordBuffer.cs
- PhotoPrintingIntent.cs
- ResourceAssociationSet.cs
- CompilerTypeWithParams.cs
- DependencyPropertyConverter.cs
- PropertyToken.cs
- RepeaterItem.cs
- ArraySet.cs
- BulletedList.cs
- InputMethodStateTypeInfo.cs
- PropertyFilterAttribute.cs
- CustomGrammar.cs
- SchemaElement.cs
- DiscoveryReferences.cs
- TrackingConditionCollection.cs
- Util.cs
- MeshGeometry3D.cs
- XsltException.cs
- LinkedList.cs
- SmtpTransport.cs
- TextFormatter.cs
- DSACryptoServiceProvider.cs
- SemanticBasicElement.cs
- ScriptControl.cs
- StylusPointDescription.cs
- OptimalTextSource.cs
- SecurityContextSecurityToken.cs
- VerificationException.cs
- HtmlElementCollection.cs
- ViewCellSlot.cs
- SecurityElement.cs
- EmptyCollection.cs
- RoleService.cs
- ErrorLog.cs
- DispatcherOperation.cs
- DefaultBinder.cs
- SelectingProviderEventArgs.cs
- OleDbEnumerator.cs
- UrlPropertyAttribute.cs
- Duration.cs
- SspiHelper.cs
- RunClient.cs
- Parser.cs
- TrackingServices.cs
- SQLMoneyStorage.cs
- ValuePatternIdentifiers.cs
- ReadOnlyMetadataCollection.cs
- Vector.cs
- EntityDataSourceContainerNameConverter.cs
- TypefaceCollection.cs
- SocketManager.cs
- Point3DCollection.cs
- PropertyGridCommands.cs
- IssuedTokenParametersEndpointAddressElement.cs
- FtpWebResponse.cs
- MsmqReceiveHelper.cs
- CodeTypeDelegate.cs
- BasicExpandProvider.cs
- HttpPostedFile.cs
- NamedPipeHostedTransportConfiguration.cs
- SqlWorkflowInstanceStoreLock.cs
- EventLogger.cs
- DefaultAsyncDataDispatcher.cs
- RowToParametersTransformer.cs
- TextTreeObjectNode.cs
- GiveFeedbackEvent.cs
- ArrayList.cs
- VisualTreeHelper.cs
- DefaultParameterValueAttribute.cs
- IItemContainerGenerator.cs
- KeyPullup.cs
- EditCommandColumn.cs
- SessionParameter.cs
- ArraySortHelper.cs
- Version.cs
- AncestorChangedEventArgs.cs
- MultiAsyncResult.cs
- MaskInputRejectedEventArgs.cs
- ArrayTypeMismatchException.cs
- AQNBuilder.cs
- CqlParserHelpers.cs
- XmlAtomicValue.cs
- QuotedPairReader.cs
- MSAAWinEventWrap.cs
- MachineKeyConverter.cs
- CommonObjectSecurity.cs
- Quaternion.cs
- SapiAttributeParser.cs
- TableLayout.cs
- ObjectStateManager.cs
- HttpHandlersSection.cs