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
- SslStream.cs
- CmsUtils.cs
- _HTTPDateParse.cs
- XmlConverter.cs
- OdbcErrorCollection.cs
- WebPartUserCapability.cs
- OleDbInfoMessageEvent.cs
- Relationship.cs
- ValueTypeFixupInfo.cs
- Container.cs
- FormatSettings.cs
- EventToken.cs
- MemberDomainMap.cs
- NaturalLanguageHyphenator.cs
- loginstatus.cs
- XamlInterfaces.cs
- IisTraceListener.cs
- ComUdtElementCollection.cs
- _ListenerResponseStream.cs
- WeakReadOnlyCollection.cs
- SendingRequestEventArgs.cs
- IntPtr.cs
- TextTreeTextElementNode.cs
- QueryOutputWriter.cs
- EnvelopedPkcs7.cs
- HttpRequest.cs
- XmlChoiceIdentifierAttribute.cs
- TemplateManager.cs
- FieldNameLookup.cs
- ConsoleCancelEventArgs.cs
- FontFamily.cs
- WorkflowEventArgs.cs
- SelfSignedCertificate.cs
- ManipulationInertiaStartingEventArgs.cs
- XslAst.cs
- StoragePropertyMapping.cs
- SingleObjectCollection.cs
- LocalizableAttribute.cs
- RoleGroupCollection.cs
- FormsIdentity.cs
- RegexCompilationInfo.cs
- ProcessModelSection.cs
- _RequestLifetimeSetter.cs
- SchemaNames.cs
- TreeWalkHelper.cs
- ByteRangeDownloader.cs
- ObjectStateManager.cs
- StringSource.cs
- InstanceDataCollectionCollection.cs
- Ref.cs
- ColorConvertedBitmap.cs
- Geometry.cs
- GridViewActionList.cs
- Size3D.cs
- XPathNodeList.cs
- CreateWorkflowOwnerCommand.cs
- HMACRIPEMD160.cs
- ApplicationManager.cs
- Ref.cs
- LightweightEntityWrapper.cs
- InstanceOwnerException.cs
- QueryContinueDragEvent.cs
- TextEffect.cs
- metadatamappinghashervisitor.cs
- TraceShell.cs
- _ShellExpression.cs
- RelativeSource.cs
- ObjectDataSourceEventArgs.cs
- MemberInfoSerializationHolder.cs
- ContentElement.cs
- XPathSelectionIterator.cs
- StretchValidation.cs
- RoleManagerSection.cs
- XamlReaderHelper.cs
- Trace.cs
- ResponseStream.cs
- SafeRightsManagementHandle.cs
- TextTreeInsertElementUndoUnit.cs
- Command.cs
- TableMethodGenerator.cs
- DbConnectionPoolIdentity.cs
- ViewCellRelation.cs
- ComplexBindingPropertiesAttribute.cs
- SqlBuffer.cs
- EastAsianLunisolarCalendar.cs
- Effect.cs
- MetadataItemSerializer.cs
- SyndicationDeserializer.cs
- NameTable.cs
- DbConnectionPoolOptions.cs
- SiteMapNode.cs
- FixUpCollection.cs
- PictureBox.cs
- DbDataReader.cs
- SecurityContext.cs
- HtmlTableRow.cs
- NavigationHelper.cs
- Pen.cs
- LocatorPart.cs
- XmlQualifiedName.cs