Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ServiceModelDictionary.cs / 1 / ServiceModelDictionary.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel
{
using System.Xml;
using System.Collections.Generic;
class ServiceModelDictionary : IXmlDictionary
{
static public readonly ServiceModelDictionary Version1 = new ServiceModelDictionary(new ServiceModelStringsVersion1());
ServiceModelStrings strings;
int count;
XmlDictionaryString[] dictionaryStrings1;
XmlDictionaryString[] dictionaryStrings2;
Dictionary dictionary;
XmlDictionaryString[] versionedDictionaryStrings;
public ServiceModelDictionary(ServiceModelStrings strings)
{
this.strings = strings;
this.count = strings.Count;
}
static public ServiceModelDictionary CurrentVersion
{
get
{
return Version1;
}
}
public XmlDictionaryString CreateString(string value, int key)
{
return new XmlDictionaryString(this, value, key);
}
public bool TryLookup(string key, out XmlDictionaryString value)
{
if (key == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("key"));
if (this.dictionary == null)
{
Dictionary dictionary = new Dictionary(count);
for (int i = 0; i < count; i++)
dictionary.Add(strings[i], i);
this.dictionary = dictionary;
}
int id;
if (this.dictionary.TryGetValue(key, out id))
return TryLookup(id, out value);
value = null;
return false;
}
public bool TryLookup(int key, out XmlDictionaryString value)
{
const int keyThreshold = 32;
if (key < 0 || key >= count)
{
value = null;
return false;
}
XmlDictionaryString s;
if (key < keyThreshold)
{
if (dictionaryStrings1 == null)
dictionaryStrings1 = new XmlDictionaryString[keyThreshold];
s = dictionaryStrings1[key];
if (s == null)
{
s = CreateString(strings[key], key);
dictionaryStrings1[key] = s;
}
}
else
{
if (dictionaryStrings2 == null)
dictionaryStrings2 = new XmlDictionaryString[count - keyThreshold];
s = dictionaryStrings2[key - keyThreshold];
if (s == null)
{
s = CreateString(strings[key], key);
dictionaryStrings2[key - keyThreshold] = s;
}
}
value = s;
return true;
}
public bool TryLookup(XmlDictionaryString key, out XmlDictionaryString value)
{
if (key == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("key"));
if (key.Dictionary == this)
{
value = key;
return true;
}
if (key.Dictionary == CurrentVersion)
{
if (versionedDictionaryStrings == null)
versionedDictionaryStrings = new XmlDictionaryString[CurrentVersion.count];
XmlDictionaryString s = versionedDictionaryStrings[key.Key];
if (s == null)
{
if (!TryLookup(key.Value, out s))
{
value = null;
return false;
}
versionedDictionaryStrings[key.Key] = s;
}
value = s;
return true;
}
value = null;
return false;
}
}
}
// 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
- _UriTypeConverter.cs
- CharEntityEncoderFallback.cs
- EventLogPermissionEntryCollection.cs
- DatagramAdapter.cs
- RichTextBox.cs
- UInt16Converter.cs
- DataListItemEventArgs.cs
- WindowsComboBox.cs
- QueryPageSettingsEventArgs.cs
- ContextBase.cs
- BatchStream.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- Process.cs
- Persist.cs
- SmtpLoginAuthenticationModule.cs
- UnaryNode.cs
- Psha1DerivedKeyGenerator.cs
- UndirectedGraph.cs
- MembershipPasswordException.cs
- SystemTcpConnection.cs
- LocatorPartList.cs
- CharacterBufferReference.cs
- DocumentPage.cs
- COMException.cs
- COM2PropertyBuilderUITypeEditor.cs
- CheckBoxList.cs
- ChannelEndpointElement.cs
- ToolboxBitmapAttribute.cs
- CompiledELinqQueryState.cs
- SetIterators.cs
- DbMetaDataFactory.cs
- ArrayTypeMismatchException.cs
- PrintPreviewControl.cs
- AxisAngleRotation3D.cs
- CompilerWrapper.cs
- RC2.cs
- ProtocolState.cs
- PresentationSource.cs
- GridSplitterAutomationPeer.cs
- TimeManager.cs
- SmiSettersStream.cs
- SingleTagSectionHandler.cs
- TreeViewItem.cs
- XPathNavigator.cs
- XsltContext.cs
- DataTrigger.cs
- PtsContext.cs
- HttpAsyncResult.cs
- ColumnMapCopier.cs
- AbsoluteQuery.cs
- ProcessHostMapPath.cs
- RequestSecurityToken.cs
- PrinterUnitConvert.cs
- LocationSectionRecord.cs
- Keyboard.cs
- MergeFilterQuery.cs
- SuppressMessageAttribute.cs
- OperandQuery.cs
- DataSysAttribute.cs
- BoundField.cs
- AppDomain.cs
- IListConverters.cs
- BindValidationContext.cs
- Peer.cs
- SnapshotChangeTrackingStrategy.cs
- BridgeDataRecord.cs
- CompilerScopeManager.cs
- XPathNavigatorKeyComparer.cs
- XmlSigningNodeWriter.cs
- LongValidator.cs
- CompModHelpers.cs
- DEREncoding.cs
- ElementAction.cs
- ObjectDataSourceEventArgs.cs
- Timeline.cs
- Activity.cs
- ToolStripPanel.cs
- Hashtable.cs
- DBConnection.cs
- TransformPatternIdentifiers.cs
- BackStopAuthenticationModule.cs
- KoreanCalendar.cs
- PlainXmlWriter.cs
- TextEditorContextMenu.cs
- UInt32Storage.cs
- ToolboxItemFilterAttribute.cs
- ApplicationException.cs
- BinaryUtilClasses.cs
- PersonalizationStateQuery.cs
- remotingproxy.cs
- WindowsListViewScroll.cs
- InstanceData.cs
- RectAnimationUsingKeyFrames.cs
- ClusterRegistryConfigurationProvider.cs
- ParsedRoute.cs
- TrackingProfileDeserializationException.cs
- GridViewRow.cs
- XmlDataSourceNodeDescriptor.cs
- WebConfigurationManager.cs
- TableLayout.cs