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
- DataControlButton.cs
- InfoCardXmlSerializer.cs
- FileDialogPermission.cs
- DispatcherHookEventArgs.cs
- SelectedDatesCollection.cs
- XamlParser.cs
- VisualStyleTypesAndProperties.cs
- ToolStripContainer.cs
- CredentialCache.cs
- FeatureAttribute.cs
- HttpCapabilitiesEvaluator.cs
- AttributeQuery.cs
- PersistChildrenAttribute.cs
- FormViewInsertedEventArgs.cs
- DataGridViewRowsRemovedEventArgs.cs
- QilTernary.cs
- DiscoveryOperationContext.cs
- CallbackHandler.cs
- TreeNodeCollection.cs
- FilteredAttributeCollection.cs
- PageAdapter.cs
- TcpClientChannel.cs
- IsolatedStoragePermission.cs
- XmlRootAttribute.cs
- SyndicationSerializer.cs
- XmlDataCollection.cs
- XPathSelfQuery.cs
- ClientCultureInfo.cs
- XDRSchema.cs
- Currency.cs
- Authorization.cs
- CompletionBookmark.cs
- WorkflowDispatchContext.cs
- Rotation3DAnimationBase.cs
- ListBox.cs
- URLEditor.cs
- SignatureToken.cs
- WindowsListViewGroupHelper.cs
- ExtensionWindow.cs
- OAVariantLib.cs
- MemoryRecordBuffer.cs
- LabelDesigner.cs
- ClientUtils.cs
- RealizationDrawingContextWalker.cs
- ServiceNameCollection.cs
- TimelineGroup.cs
- OperationContext.cs
- RtfFormatStack.cs
- MSAAEventDispatcher.cs
- GraphicsState.cs
- BeginStoryboard.cs
- DbDataSourceEnumerator.cs
- WindowsSolidBrush.cs
- OleDbParameter.cs
- CompositeFontParser.cs
- RequestCacheEntry.cs
- DES.cs
- GeneralTransform3DGroup.cs
- WindowVisualStateTracker.cs
- EntityUtil.cs
- HatchBrush.cs
- DocumentApplication.cs
- MarginsConverter.cs
- SqlAggregateChecker.cs
- TypeConverterAttribute.cs
- Enum.cs
- Component.cs
- GenericsInstances.cs
- TreeViewCancelEvent.cs
- ToolTipAutomationPeer.cs
- Int32AnimationBase.cs
- RuleRef.cs
- RowVisual.cs
- CodeBlockBuilder.cs
- GregorianCalendarHelper.cs
- Utility.cs
- QueryExpression.cs
- HierarchicalDataBoundControlAdapter.cs
- FormsAuthenticationTicket.cs
- WhitespaceRule.cs
- TreeNodeEventArgs.cs
- DataGridViewImageColumn.cs
- EditingCoordinator.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- FixedSchema.cs
- BindingList.cs
- XmlDocumentFieldSchema.cs
- Stopwatch.cs
- MailDefinition.cs
- Math.cs
- ClientCredentials.cs
- PrintPreviewDialog.cs
- MemberBinding.cs
- UTF32Encoding.cs
- StdValidatorsAndConverters.cs
- WeakHashtable.cs
- PresentationTraceSources.cs
- WebHttpBindingCollectionElement.cs
- AdRotator.cs
- CellIdBoolean.cs