Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / Runtime / Serialization / BitFlagsGenerator.cs / 1 / 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;
//
// Critical - works on CodeGenerator objects, which require Critical access
//
[SecurityRequiresReview(SecurityCriticalScope.Everything)]
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DbDataRecord.cs
- ScrollBar.cs
- UnsafeNativeMethods.cs
- PrivilegeNotHeldException.cs
- HijriCalendar.cs
- FileReservationCollection.cs
- DigitShape.cs
- RequestDescription.cs
- DocumentSchemaValidator.cs
- ClientTargetSection.cs
- DocumentsTrace.cs
- TypeConverterMarkupExtension.cs
- HtmlInputReset.cs
- DataServiceRequestException.cs
- SqlResolver.cs
- Identifier.cs
- CompilerGeneratedAttribute.cs
- InputLanguageProfileNotifySink.cs
- AbsoluteQuery.cs
- SystemDiagnosticsSection.cs
- CrossAppDomainChannel.cs
- HMACRIPEMD160.cs
- SiteMapHierarchicalDataSourceView.cs
- BitmapFrameEncode.cs
- GridViewUpdateEventArgs.cs
- IteratorDescriptor.cs
- CryptoKeySecurity.cs
- DataGridViewBand.cs
- Int32Storage.cs
- HtmlWindow.cs
- FormViewUpdatedEventArgs.cs
- SafeNativeMethods.cs
- ConnectionManagementElement.cs
- StylusPlugInCollection.cs
- XmlSchemaImport.cs
- ChooseAction.cs
- HostingPreferredMapPath.cs
- PatternMatchRules.cs
- CheckBoxList.cs
- FunctionMappingTranslator.cs
- TypedTableBaseExtensions.cs
- StringAnimationUsingKeyFrames.cs
- GenericQueueSurrogate.cs
- NativeMethods.cs
- ISAPIWorkerRequest.cs
- ListControl.cs
- SqlCachedBuffer.cs
- ExpanderAutomationPeer.cs
- HtmlTableCellCollection.cs
- UnsafeNativeMethodsPenimc.cs
- WorkingDirectoryEditor.cs
- FrameworkRichTextComposition.cs
- objectresult_tresulttype.cs
- GetReadStreamResult.cs
- IQueryable.cs
- DefaultConfirmation.cs
- WindowsToolbarItemAsMenuItem.cs
- MarkupProperty.cs
- ParamArrayAttribute.cs
- DataGridViewCellStyleConverter.cs
- TypeUnloadedException.cs
- ServiceObjectContainer.cs
- ZipIOCentralDirectoryBlock.cs
- TextBoxBase.cs
- EmptyControlCollection.cs
- EncodingDataItem.cs
- AspNetHostingPermission.cs
- AttachmentService.cs
- AdvancedBindingPropertyDescriptor.cs
- ISAPIRuntime.cs
- TdsParserSafeHandles.cs
- StaticFileHandler.cs
- UnauthorizedAccessException.cs
- EventWaitHandle.cs
- EventLogPermission.cs
- RuleAttributes.cs
- Types.cs
- Utils.cs
- DataGridClipboardCellContent.cs
- KnownIds.cs
- TextEditorDragDrop.cs
- ViewSimplifier.cs
- ChangeNode.cs
- DebuggerAttributes.cs
- PackageRelationship.cs
- ManagementException.cs
- GB18030Encoding.cs
- ReflectionTypeLoadException.cs
- RbTree.cs
- ConfigurationSectionHelper.cs
- DebugController.cs
- EndpointIdentityExtension.cs
- WsatServiceCertificate.cs
- ExpressionValueEditor.cs
- AnonymousIdentificationSection.cs
- CqlIdentifiers.cs
- ServiceHttpModule.cs
- NamespaceExpr.cs
- RemotingConfiguration.cs
- counter.cs