Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Xml / XmlBinaryReaderSession.cs / 1305376 / XmlBinaryReaderSession.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
using StringHandle = System.Int64;
namespace System.Xml
{
using System.Xml;
using System.Collections.Generic;
using System.Runtime.Serialization;
public class XmlBinaryReaderSession : IXmlDictionary
{
const int MaxArrayEntries = 2048;
XmlDictionaryString[] strings;
Dictionary stringDict;
public XmlBinaryReaderSession()
{
}
public XmlDictionaryString Add(int id, string value)
{
if (id < 0)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(SR.GetString(SR.XmlInvalidID)));
if (value == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
XmlDictionaryString xmlString;
if (TryLookup(id, out xmlString))
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.XmlIDDefined)));
xmlString = new XmlDictionaryString(this, value, id);
if (id >= MaxArrayEntries)
{
if (stringDict == null)
this.stringDict = new Dictionary();
this.stringDict.Add(id, xmlString);
}
else
{
if (strings == null)
{
strings = new XmlDictionaryString[Math.Max(id + 1, 16)];
}
else if (id >= strings.Length)
{
XmlDictionaryString[] newStrings = new XmlDictionaryString[Math.Min(Math.Max(id + 1, strings.Length * 2), MaxArrayEntries)];
Array.Copy(strings, newStrings, strings.Length);
strings = newStrings;
}
strings[id] = xmlString;
}
return xmlString;
}
public bool TryLookup(int key, out XmlDictionaryString result)
{
if (strings != null && key >= 0 && key < strings.Length)
{
result = strings[key];
return result != null;
}
else if (key >= MaxArrayEntries)
{
if (this.stringDict != null)
return this.stringDict.TryGetValue(key, out result);
}
result = null;
return false;
}
public bool TryLookup(string value, out XmlDictionaryString result)
{
if (value == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
if (strings != null)
{
for (int i = 0; i < strings.Length; i++)
{
XmlDictionaryString s = strings[i];
if (s != null && s.Value == value)
{
result = s;
return true;
}
}
}
if (this.stringDict != null)
{
foreach (XmlDictionaryString s in this.stringDict.Values)
{
if (s.Value == value)
{
result = s;
return true;
}
}
}
result = null;
return false;
}
public bool TryLookup(XmlDictionaryString value, out XmlDictionaryString result)
{
if (value == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("value"));
if (value.Dictionary != this)
{
result = null;
return false;
}
result = value;
return true;
}
public void Clear()
{
if (strings != null)
Array.Clear(strings, 0, strings.Length);
if (this.stringDict != null)
this.stringDict.Clear();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WpfWebRequestHelper.cs
- OrderedDictionary.cs
- _NativeSSPI.cs
- SimpleTypeResolver.cs
- GenericNameHandler.cs
- XmlSignatureManifest.cs
- Tablet.cs
- FieldNameLookup.cs
- SharedPerformanceCounter.cs
- StringConcat.cs
- ManifestSignatureInformation.cs
- PropertySegmentSerializer.cs
- SemaphoreFullException.cs
- PrinterUnitConvert.cs
- DataSvcMapFile.cs
- SecurityTokenProvider.cs
- Scheduling.cs
- XmlSchema.cs
- TreeSet.cs
- RenderData.cs
- XmlQualifiedName.cs
- RSAPKCS1SignatureDeformatter.cs
- DiscardableAttribute.cs
- QilList.cs
- DesignerObject.cs
- ComponentSerializationService.cs
- TextBoxRenderer.cs
- KeyedCollection.cs
- XmlValueConverter.cs
- XmlEntityReference.cs
- ProcessInputEventArgs.cs
- SrgsDocument.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- StateRuntime.cs
- XmlCountingReader.cs
- VisualStyleTypesAndProperties.cs
- TypedRowGenerator.cs
- ZoneLinkButton.cs
- EncodingTable.cs
- ConnectorSelectionGlyph.cs
- Formatter.cs
- Span.cs
- RuleInfoComparer.cs
- RelatedImageListAttribute.cs
- TypeUsage.cs
- X509CertificateValidator.cs
- RichTextBox.cs
- RemotingAttributes.cs
- BasicExpandProvider.cs
- SequentialOutput.cs
- basecomparevalidator.cs
- Stylesheet.cs
- AutoResetEvent.cs
- FileAuthorizationModule.cs
- ConnectionPoolManager.cs
- TextRange.cs
- NotFiniteNumberException.cs
- BooleanProjectedSlot.cs
- StylusOverProperty.cs
- UnsafeNativeMethodsPenimc.cs
- MessageRpc.cs
- EdmValidator.cs
- StateDesigner.Layouts.cs
- GenericAuthenticationEventArgs.cs
- StringAttributeCollection.cs
- RuntimeConfigLKG.cs
- MultiBindingExpression.cs
- IgnoreFlushAndCloseStream.cs
- AxisAngleRotation3D.cs
- DataBindEngine.cs
- PropertyInformationCollection.cs
- AppDomainResourcePerfCounters.cs
- TitleStyle.cs
- _FtpControlStream.cs
- IsolatedStorageFileStream.cs
- AuthenticodeSignatureInformation.cs
- SchemeSettingElement.cs
- TableItemStyle.cs
- RadioButton.cs
- WindowsAuthenticationModule.cs
- SqlBuilder.cs
- WebBrowser.cs
- IIS7WorkerRequest.cs
- _ServiceNameStore.cs
- ScriptRegistrationManager.cs
- Cloud.cs
- EntityTypeBase.cs
- AssertValidation.cs
- Internal.cs
- SpecularMaterial.cs
- SecurityUtils.cs
- CollectionType.cs
- ReceiveReply.cs
- OdbcException.cs
- DllHostedComPlusServiceHost.cs
- PageCache.cs
- PtsHelper.cs
- ConnectionsZone.cs
- WarningException.cs
- ComponentEditorForm.cs