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
- Double.cs
- EnumUnknown.cs
- ActiveDocumentEvent.cs
- BasicHttpBindingElement.cs
- UInt32.cs
- ValueHandle.cs
- Keywords.cs
- LifetimeServices.cs
- ParallelEnumerableWrapper.cs
- Cursor.cs
- DelegatingTypeDescriptionProvider.cs
- StrictModeSecurityHeaderElementInferenceEngine.cs
- ClientTarget.cs
- DrawingAttributesDefaultValueFactory.cs
- IsolatedStorageFileStream.cs
- FileRecordSequenceHelper.cs
- DtdParser.cs
- SqlNodeAnnotations.cs
- DataGridViewCellParsingEventArgs.cs
- XmlILIndex.cs
- DataGridDetailsPresenter.cs
- QueryLifecycle.cs
- DataContractSet.cs
- FormsAuthenticationCredentials.cs
- Triangle.cs
- DiscreteKeyFrames.cs
- DependencyPropertyChangedEventArgs.cs
- RestHandlerFactory.cs
- XPathDocument.cs
- ReflectionTypeLoadException.cs
- DbParameterCollectionHelper.cs
- CustomErrorsSection.cs
- DataGridViewHeaderCell.cs
- COAUTHINFO.cs
- CodeValidator.cs
- WindowsSpinner.cs
- KeyManager.cs
- LogReservationCollection.cs
- PageContentCollection.cs
- DisplayNameAttribute.cs
- CrossSiteScriptingValidation.cs
- SID.cs
- EventProvider.cs
- listitem.cs
- SHA1Managed.cs
- Shared.cs
- SignHashRequest.cs
- NullableDoubleSumAggregationOperator.cs
- EditingMode.cs
- CheckBox.cs
- ArgumentValidation.cs
- MasterPageParser.cs
- PageThemeCodeDomTreeGenerator.cs
- TimerEventSubscriptionCollection.cs
- MetabaseReader.cs
- EditCommandColumn.cs
- XPathNavigator.cs
- webclient.cs
- SmiGettersStream.cs
- _ConnectStream.cs
- typedescriptorpermissionattribute.cs
- StylusPointPropertyUnit.cs
- OuterGlowBitmapEffect.cs
- DefaultPerformanceCounters.cs
- AsyncCodeActivityContext.cs
- GeometryModel3D.cs
- VectorAnimationUsingKeyFrames.cs
- EntityDesignerDataSourceView.cs
- ping.cs
- ZipIOCentralDirectoryFileHeader.cs
- UserPreferenceChangedEventArgs.cs
- OdbcConnectionStringbuilder.cs
- RouteValueDictionary.cs
- HwndTarget.cs
- EditCommandColumn.cs
- List.cs
- RankException.cs
- ComponentChangedEvent.cs
- Viewport3DAutomationPeer.cs
- DirectoryLocalQuery.cs
- ValueSerializerAttribute.cs
- TagPrefixCollection.cs
- ClientScriptManager.cs
- TextureBrush.cs
- DesignerFrame.cs
- KeyProperty.cs
- _Win32.cs
- CompilerError.cs
- MimeTypePropertyAttribute.cs
- UnmanagedHandle.cs
- HttpStreams.cs
- ToolStripButton.cs
- PeerToPeerException.cs
- FontFamily.cs
- CharKeyFrameCollection.cs
- VarInfo.cs
- ModelServiceImpl.cs
- ByeOperationCD1AsyncResult.cs
- MembershipPasswordException.cs
- ServiceDefaults.cs