Code:
/ 4.0 / 4.0 / 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; DictionarystringDict; 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. //------------------------------------------------------------ // 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
- HwndStylusInputProvider.cs
- CanonicalXml.cs
- OperatingSystem.cs
- GZipUtils.cs
- ScriptControl.cs
- RuntimeIdentifierPropertyAttribute.cs
- SoapIncludeAttribute.cs
- XmlKeywords.cs
- Synchronization.cs
- TcpChannelHelper.cs
- WebPartVerbCollection.cs
- Int64.cs
- NotifyCollectionChangedEventArgs.cs
- SliderAutomationPeer.cs
- StrokeCollection.cs
- EqualityComparer.cs
- DBConcurrencyException.cs
- DataBoundControlHelper.cs
- BindingList.cs
- Baml2006SchemaContext.cs
- XmlILCommand.cs
- BitVector32.cs
- ProviderException.cs
- WsatAdminException.cs
- xmlglyphRunInfo.cs
- Profiler.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- HideDisabledControlAdapter.cs
- TokenBasedSetEnumerator.cs
- DiscoveryDocument.cs
- AdornerLayer.cs
- TextFormatter.cs
- BufferBuilder.cs
- latinshape.cs
- BitVec.cs
- PasswordBox.cs
- OpCodes.cs
- thaishape.cs
- RegexWorker.cs
- TextEditorSpelling.cs
- SegmentInfo.cs
- WebServiceMethodData.cs
- QueryContinueDragEvent.cs
- CompleteWizardStep.cs
- ActivityMarkupSerializationProvider.cs
- XmlToDatasetMap.cs
- TimeSpanValidator.cs
- ResourceDescriptionAttribute.cs
- IfElseDesigner.xaml.cs
- DataGridTable.cs
- MachineKeySection.cs
- securitymgrsite.cs
- ZoneLinkButton.cs
- OperatorExpressions.cs
- AccessControlList.cs
- SafeHandles.cs
- CharAnimationUsingKeyFrames.cs
- SchemaMerger.cs
- XmlFormatExtensionPointAttribute.cs
- TypeLibraryHelper.cs
- tooltip.cs
- XamlLoadErrorInfo.cs
- MailMessage.cs
- CompilerScopeManager.cs
- BinaryReader.cs
- TextElement.cs
- ConnectivityStatus.cs
- Listbox.cs
- SafeReversePInvokeHandle.cs
- SchemaImporterExtensionsSection.cs
- BehaviorEditorPart.cs
- MetadataArtifactLoaderCompositeResource.cs
- RoamingStoreFileUtility.cs
- ZoneIdentityPermission.cs
- ConfigViewGenerator.cs
- WmpBitmapDecoder.cs
- OdbcCommand.cs
- ParallelForEach.cs
- GridViewRowEventArgs.cs
- InputLangChangeEvent.cs
- UniformGrid.cs
- CatalogPartChrome.cs
- ValidationEventArgs.cs
- MethodBody.cs
- XmlDocument.cs
- FontDriver.cs
- WeakReference.cs
- AspNetCacheProfileAttribute.cs
- QuadraticBezierSegment.cs
- HtmlImageAdapter.cs
- EncodingConverter.cs
- DateTimePickerDesigner.cs
- SqlDataReaderSmi.cs
- ManagementOperationWatcher.cs
- DictionaryContent.cs
- TPLETWProvider.cs
- _UriTypeConverter.cs
- SystemIcons.cs
- BufferModeSettings.cs
- RowsCopiedEventArgs.cs