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
- ConnectionAcceptor.cs
- VisualBasicReference.cs
- SchemaTableColumn.cs
- ToolStripArrowRenderEventArgs.cs
- PagesChangedEventArgs.cs
- PresentationSource.cs
- precedingquery.cs
- DragEventArgs.cs
- WmpBitmapEncoder.cs
- AuthStoreRoleProvider.cs
- OlePropertyStructs.cs
- ClientApiGenerator.cs
- SoapReflectionImporter.cs
- HWStack.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- Sentence.cs
- CultureMapper.cs
- SqlFileStream.cs
- Stacktrace.cs
- SolidColorBrush.cs
- LinqDataSourceInsertEventArgs.cs
- Int16AnimationUsingKeyFrames.cs
- WasEndpointConfigContainer.cs
- DBConnection.cs
- DataQuery.cs
- ToolStripContainerDesigner.cs
- SerializationAttributes.cs
- LostFocusEventManager.cs
- MatrixAnimationUsingKeyFrames.cs
- DbConnectionPoolGroup.cs
- ExecutionScope.cs
- MessageQueue.cs
- ColorMatrix.cs
- PreloadedPackages.cs
- KeyInfo.cs
- PackageRelationship.cs
- CompositeClientFormatter.cs
- SqlAggregateChecker.cs
- HyperLink.cs
- TextLineBreak.cs
- MailSettingsSection.cs
- Stylus.cs
- PeerObject.cs
- ManifestBasedResourceGroveler.cs
- ComponentRenameEvent.cs
- WebPartCancelEventArgs.cs
- XmlILIndex.cs
- ListMarkerLine.cs
- Hyperlink.cs
- BindingListCollectionView.cs
- HttpListenerRequest.cs
- DataGridView.cs
- CFStream.cs
- StateRuntime.cs
- InfoCardRSACryptoProvider.cs
- WebPartDisplayModeCollection.cs
- XmlSchemaValidator.cs
- Token.cs
- OdbcDataReader.cs
- activationcontext.cs
- EnumerableCollectionView.cs
- TextFormatterContext.cs
- TimeStampChecker.cs
- Switch.cs
- XamlSerializerUtil.cs
- DataGridColumnCollection.cs
- DataTableReader.cs
- ProfileModule.cs
- ProfileGroupSettings.cs
- RuntimeHandles.cs
- EventLogTraceListener.cs
- EndpointInfo.cs
- ArrayTypeMismatchException.cs
- EncoderFallback.cs
- ListViewInsertEventArgs.cs
- Label.cs
- ObjectDataSource.cs
- ProfileGroupSettings.cs
- WebPartConnectionsConnectVerb.cs
- EllipseGeometry.cs
- Animatable.cs
- Set.cs
- TraceSwitch.cs
- XmlQueryOutput.cs
- TreeBuilderXamlTranslator.cs
- _ConnectOverlappedAsyncResult.cs
- OLEDB_Util.cs
- SmiGettersStream.cs
- ReadOnlyDictionary.cs
- SvcFileManager.cs
- BaseParaClient.cs
- SqlClientWrapperSmiStreamChars.cs
- DataGridColumnCollection.cs
- DbConnectionPoolIdentity.cs
- AppearanceEditorPart.cs
- WorkflowMarkupSerializationManager.cs
- BitmapEffectGeneralTransform.cs
- JoinCqlBlock.cs
- SqlNodeTypeOperators.cs
- SingleAnimation.cs