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
- MarshalDirectiveException.cs
- DiagnosticStrings.cs
- CodeVariableReferenceExpression.cs
- DataGridViewLinkColumn.cs
- Timer.cs
- SqlNotificationRequest.cs
- PropertyEmitterBase.cs
- Mapping.cs
- AppSettingsExpressionBuilder.cs
- FieldAccessException.cs
- ContentDesigner.cs
- DropDownButton.cs
- CatalogPart.cs
- CroppedBitmap.cs
- JoinCqlBlock.cs
- TypeUtil.cs
- SynchronizationContext.cs
- ConversionContext.cs
- ListViewTableCell.cs
- ProgressBarAutomationPeer.cs
- SmtpFailedRecipientsException.cs
- TableCellAutomationPeer.cs
- XmlDataFileEditor.cs
- AudienceUriMode.cs
- Helper.cs
- XsdValidatingReader.cs
- DesigntimeLicenseContext.cs
- BitVector32.cs
- MouseButton.cs
- FlowchartDesignerCommands.cs
- UserNameSecurityToken.cs
- DataGridItem.cs
- Header.cs
- ResetableIterator.cs
- CqlBlock.cs
- ReflectionPermission.cs
- NamedObject.cs
- ValueQuery.cs
- XmlQueryType.cs
- FormsAuthenticationEventArgs.cs
- ItemContainerGenerator.cs
- DebugView.cs
- TypeLoadException.cs
- VariableExpressionConverter.cs
- OperatingSystem.cs
- CommandPlan.cs
- ControlAdapter.cs
- BrowserCapabilitiesFactoryBase.cs
- FamilyTypefaceCollection.cs
- GatewayDefinition.cs
- CodeCatchClause.cs
- MimeFormImporter.cs
- FillRuleValidation.cs
- SingleResultAttribute.cs
- EntityReference.cs
- QueryMath.cs
- PolicyStatement.cs
- BitmapFrameEncode.cs
- TransportContext.cs
- AxHost.cs
- BamlMapTable.cs
- DataBindingHandlerAttribute.cs
- MessageEnumerator.cs
- UIPermission.cs
- streamingZipPartStream.cs
- IPPacketInformation.cs
- ColumnMapProcessor.cs
- HtmlElementEventArgs.cs
- MDIWindowDialog.cs
- HierarchicalDataSourceControl.cs
- DefaultEventAttribute.cs
- WorkflowDataContext.cs
- ProviderSettingsCollection.cs
- StylusPointProperties.cs
- WebPartEditVerb.cs
- MediaCommands.cs
- BindingManagerDataErrorEventArgs.cs
- EditorPart.cs
- XmlQueryContext.cs
- SuppressIldasmAttribute.cs
- CustomError.cs
- DataGridPagerStyle.cs
- ContextMenuStrip.cs
- ArgIterator.cs
- HttpFileCollection.cs
- RoleManagerModule.cs
- StreamUpdate.cs
- TemplateControlParser.cs
- securitycriticaldataClass.cs
- XmlChildEnumerator.cs
- UnitySerializationHolder.cs
- AuthorizationSection.cs
- DetailsViewInsertEventArgs.cs
- ItemCheckEvent.cs
- unsafeIndexingFilterStream.cs
- MinimizableAttributeTypeConverter.cs
- CursorConverter.cs
- LocatorBase.cs
- SqlFlattener.cs
- ExternalCalls.cs