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
- TraceFilter.cs
- CatalogZone.cs
- MonthCalendar.cs
- HostedElements.cs
- PerspectiveCamera.cs
- OleDbConnection.cs
- LayoutEvent.cs
- UseAttributeSetsAction.cs
- RtType.cs
- HealthMonitoringSection.cs
- Parameter.cs
- EntityDataReader.cs
- rsa.cs
- Matrix3DConverter.cs
- TextViewSelectionProcessor.cs
- ColumnMapProcessor.cs
- PackageRelationshipCollection.cs
- ThumbButtonInfo.cs
- NamedPipeChannelFactory.cs
- AudioSignalProblemOccurredEventArgs.cs
- WebPartCancelEventArgs.cs
- IndexedSelectQueryOperator.cs
- DSACryptoServiceProvider.cs
- X509RawDataKeyIdentifierClause.cs
- WebPartDesigner.cs
- SqlTriggerContext.cs
- ILGenerator.cs
- DataSpaceManager.cs
- InstanceCollisionException.cs
- DesignConnection.cs
- MessagePartSpecification.cs
- PassportAuthentication.cs
- CaseStatementProjectedSlot.cs
- ContentElement.cs
- ImageBrush.cs
- Journal.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ECDsaCng.cs
- InvalidateEvent.cs
- AnnotationAdorner.cs
- ThrowHelper.cs
- CodeMemberEvent.cs
- WebServiceEnumData.cs
- Vector3DCollectionConverter.cs
- RecognizerInfo.cs
- WmlCommandAdapter.cs
- MouseGesture.cs
- HttpProfileBase.cs
- MemberJoinTreeNode.cs
- odbcmetadatacolumnnames.cs
- SecondaryIndexDefinition.cs
- ColumnResult.cs
- RequestContextBase.cs
- MenuItemStyle.cs
- DataBinding.cs
- PageCopyCount.cs
- VideoDrawing.cs
- ContainerControl.cs
- ParallelRangeManager.cs
- RootCodeDomSerializer.cs
- SerializationFieldInfo.cs
- unitconverter.cs
- MemberAssignmentAnalysis.cs
- PreservationFileWriter.cs
- TdsParserStaticMethods.cs
- SR.cs
- RowToParametersTransformer.cs
- CodeAttachEventStatement.cs
- ListViewItem.cs
- DataMisalignedException.cs
- LayoutManager.cs
- SafeArrayTypeMismatchException.cs
- ListenerElementsCollection.cs
- DrawingCollection.cs
- TextDecorationUnitValidation.cs
- OSFeature.cs
- FieldBuilder.cs
- WindowsTokenRoleProvider.cs
- RectangleF.cs
- ManagementQuery.cs
- TrackingParameters.cs
- DateTimeValueSerializer.cs
- IIS7UserPrincipal.cs
- TableRow.cs
- DbConnectionStringBuilder.cs
- EncodingTable.cs
- UserMapPath.cs
- RefreshEventArgs.cs
- RenamedEventArgs.cs
- ThicknessKeyFrameCollection.cs
- CacheOutputQuery.cs
- ProtocolsConfigurationHandler.cs
- BindingsSection.cs
- FaultDescription.cs
- RowCache.cs
- Query.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- SafeArrayTypeMismatchException.cs
- Vector.cs
- OverrideMode.cs