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
- RowUpdatedEventArgs.cs
- IsolatedStorageFilePermission.cs
- PersonalizationState.cs
- DynamicUpdateCommand.cs
- PtsContext.cs
- GPRECTF.cs
- ContextActivityUtils.cs
- SettingsAttributes.cs
- TypeGeneratedEventArgs.cs
- Operator.cs
- EntitySqlQueryBuilder.cs
- XmlSortKey.cs
- ReflectEventDescriptor.cs
- DependencyPropertyValueSerializer.cs
- Label.cs
- EntityContainerEmitter.cs
- DesignerActionUI.cs
- Size3DConverter.cs
- MsmqIntegrationInputChannel.cs
- ServiceDesigner.xaml.cs
- WebPartTransformerAttribute.cs
- RegexWriter.cs
- IODescriptionAttribute.cs
- MultiBinding.cs
- FakeModelPropertyImpl.cs
- ImageEditor.cs
- MultilineStringEditor.cs
- WebPartConnectionsCancelVerb.cs
- LogConverter.cs
- CapiHashAlgorithm.cs
- Style.cs
- MouseWheelEventArgs.cs
- TextOptions.cs
- FlowLayout.cs
- Util.cs
- MessageHeaders.cs
- ReadOnlyHierarchicalDataSource.cs
- TextAction.cs
- Vertex.cs
- ListBase.cs
- AppDomainFactory.cs
- AttachmentCollection.cs
- XmlSchemaSimpleTypeRestriction.cs
- WorkflowInspectionServices.cs
- UnsafeCollabNativeMethods.cs
- InertiaExpansionBehavior.cs
- Parser.cs
- StyleSheetDesigner.cs
- FocusChangedEventArgs.cs
- DBPropSet.cs
- InlineCollection.cs
- CallbackTimeoutsBehavior.cs
- SafeViewOfFileHandle.cs
- DataBinder.cs
- OutKeywords.cs
- sqlstateclientmanager.cs
- XmlParserContext.cs
- TableAutomationPeer.cs
- LongPath.cs
- MemoryRecordBuffer.cs
- SqlProvider.cs
- DataGrid.cs
- MetabaseServerConfig.cs
- MDIWindowDialog.cs
- XmlSchemaValidationException.cs
- Preprocessor.cs
- PolyBezierSegment.cs
- oledbmetadatacollectionnames.cs
- EventMappingSettingsCollection.cs
- RtfControlWordInfo.cs
- SqlAliaser.cs
- Matrix.cs
- UmAlQuraCalendar.cs
- RowUpdatingEventArgs.cs
- MiniParameterInfo.cs
- XmlStreamStore.cs
- GridItem.cs
- KeyedCollection.cs
- LabelEditEvent.cs
- SafeFindHandle.cs
- SslStream.cs
- CheckBoxFlatAdapter.cs
- PassportAuthentication.cs
- EditorPartChrome.cs
- _ScatterGatherBuffers.cs
- DrawingContextDrawingContextWalker.cs
- SchemaMapping.cs
- CollectionBase.cs
- DataSourceCacheDurationConverter.cs
- XmlReturnReader.cs
- DataSourceDescriptorCollection.cs
- ConfigurationValues.cs
- RoutedCommand.cs
- ArgumentNullException.cs
- ActivationService.cs
- NullExtension.cs
- WriterOutput.cs
- ReadingWritingEntityEventArgs.cs
- TrimSurroundingWhitespaceAttribute.cs
- RowUpdatingEventArgs.cs