Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / schema / ChameleonKey.cs / 1305376 / ChameleonKey.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml.Schema { using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Xml.Serialization; // Case insensitive file name key for use in a hashtable. internal class ChameleonKey { internal string targetNS; internal Uri chameleonLocation; // Original schema (used for reference equality only) // stored only when the chameleonLocation is an empty URI in which case the location // is not a good enough identification of the schema internal XmlSchema originalSchema; int hashCode; ////// Creates a new chameleon key - an identification for a chameleon schema instance /// /// The target namespace of the instance of the chameleon schema /// The original (chameleon) schema (the one without the target namespace). /// This is used to get the location (base uri) and to identify the schema. public ChameleonKey(string ns, XmlSchema originalSchema) { targetNS = ns; chameleonLocation = originalSchema.BaseUri; if (chameleonLocation.OriginalString.Length == 0) { // Only store the original schema when the location is empty URI // by doing this we effectively allow multiple chameleon schemas for the same target namespace // and URI, but that only makes sense for empty URI (not specified) this.originalSchema = originalSchema; } } public override int GetHashCode() { if (hashCode == 0) { hashCode = targetNS.GetHashCode() + chameleonLocation.GetHashCode() + (originalSchema == null ? 0 : originalSchema.GetHashCode()); } return hashCode; } public override bool Equals(object obj) { if (Ref.ReferenceEquals(this,obj)) { return true; } ChameleonKey cKey = obj as ChameleonKey; if (cKey != null) { // We want to compare the target NS and the schema location. // If the location is empty (but only then) we also want to compare the original schema instance. // As noted above the originalSchema is null if the chameleonLocation is non-empty. As a result we // can simply compare the reference to the original schema always (regardless of the schemalocation). Debug.Assert((chameleonLocation.OriginalString.Length == 0 && originalSchema != null) || (chameleonLocation.OriginalString.Length != 0 && originalSchema == null)); return this.targetNS.Equals(cKey.targetNS) && this.chameleonLocation.Equals(cKey.chameleonLocation) && Ref.ReferenceEquals(originalSchema, cKey.originalSchema); } return false; } } } // 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
- Maps.cs
- RowToFieldTransformer.cs
- DataColumnCollection.cs
- MultipartContentParser.cs
- PrintPreviewDialog.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- UpdatePanelControlTrigger.cs
- DataGridViewColumnConverter.cs
- ToolStripItemImageRenderEventArgs.cs
- Parameter.cs
- SchemaMapping.cs
- RoutedCommand.cs
- webbrowsersite.cs
- JsonEnumDataContract.cs
- Misc.cs
- LassoHelper.cs
- ExpressionBindings.cs
- JsonStringDataContract.cs
- CacheChildrenQuery.cs
- ViewUtilities.cs
- ObjectQuery.cs
- AdCreatedEventArgs.cs
- DataGridCommandEventArgs.cs
- ToolTipService.cs
- HScrollProperties.cs
- BufferedOutputStream.cs
- SplitterPanel.cs
- FileStream.cs
- DataGridViewButtonColumn.cs
- StatusBarItem.cs
- Mapping.cs
- TypeExtension.cs
- HuffmanTree.cs
- Converter.cs
- ControlEvent.cs
- DomNameTable.cs
- DataObjectCopyingEventArgs.cs
- EnumType.cs
- LinqDataView.cs
- SecureConversationVersion.cs
- DictationGrammar.cs
- WindowsListBox.cs
- OverflowException.cs
- DetailsViewInsertEventArgs.cs
- GeometryModel3D.cs
- SmiEventSink_Default.cs
- mactripleDES.cs
- EdmComplexTypeAttribute.cs
- PointConverter.cs
- OleDbStruct.cs
- ClosableStream.cs
- SchemaImporter.cs
- xml.cs
- EmptyEnumerator.cs
- AutomationProperties.cs
- ResourcesGenerator.cs
- RectangleGeometry.cs
- FileFormatException.cs
- ComPersistableTypeElementCollection.cs
- ExpressionBindings.cs
- Certificate.cs
- PostBackOptions.cs
- ParseElement.cs
- SafeCryptContextHandle.cs
- DllNotFoundException.cs
- DataBindingHandlerAttribute.cs
- ContextMarshalException.cs
- FileLogRecord.cs
- SByteConverter.cs
- DrawListViewSubItemEventArgs.cs
- SerializationObjectManager.cs
- OutputCacheSettingsSection.cs
- OracleConnectionString.cs
- MSHTMLHostUtil.cs
- _Connection.cs
- DocComment.cs
- ContentType.cs
- SingleObjectCollection.cs
- CompoundFileDeflateTransform.cs
- ResourceDefaultValueAttribute.cs
- X509Chain.cs
- BrowserInteropHelper.cs
- WindowsScrollBar.cs
- Component.cs
- SqlBulkCopyColumnMapping.cs
- CompilationUtil.cs
- GridViewRowCollection.cs
- RepeaterDesigner.cs
- SmtpReplyReaderFactory.cs
- TrackBarRenderer.cs
- AccessKeyManager.cs
- TreeNodeBindingCollection.cs
- RuntimeConfigurationRecord.cs
- ObjectDataProvider.cs
- DefaultObjectMappingItemCollection.cs
- TransformedBitmap.cs
- isolationinterop.cs
- InputLangChangeRequestEvent.cs
- OrderedEnumerableRowCollection.cs
- FunctionImportMapping.cs