Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ //// 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
- figurelengthconverter.cs
- DelegatedStream.cs
- XPathNode.cs
- StringValidator.cs
- XmlStreamNodeWriter.cs
- DecoderExceptionFallback.cs
- JsonSerializer.cs
- PerspectiveCamera.cs
- WebConfigurationManager.cs
- LostFocusEventManager.cs
- DateTimeConverter.cs
- XmlSerializerSection.cs
- MissingMethodException.cs
- XmlDocumentSerializer.cs
- CroppedBitmap.cs
- ServiceModelTimeSpanValidator.cs
- TreeNodeStyle.cs
- UrlMappingsSection.cs
- WebPartDisplayModeCollection.cs
- MemberHolder.cs
- RootProfilePropertySettingsCollection.cs
- WindowsSysHeader.cs
- ProcessHostMapPath.cs
- TraceContext.cs
- BitmapCache.cs
- LightweightEntityWrapper.cs
- SingleAnimationUsingKeyFrames.cs
- XPathNode.cs
- SystemIPv4InterfaceProperties.cs
- SingleObjectCollection.cs
- InvalidBodyAccessException.cs
- SchemaRegistration.cs
- Timer.cs
- UpdateCommandGenerator.cs
- TreeView.cs
- ReferentialConstraint.cs
- TreeNodeBindingCollection.cs
- Matrix3DValueSerializer.cs
- SignatureToken.cs
- PropertyCondition.cs
- OdbcError.cs
- HistoryEventArgs.cs
- ScrollableControl.cs
- ProtocolsSection.cs
- SmiContext.cs
- MemberExpression.cs
- ResXResourceReader.cs
- Wizard.cs
- Int32RectConverter.cs
- ExclusiveTcpListener.cs
- DbProviderFactoriesConfigurationHandler.cs
- SystemMulticastIPAddressInformation.cs
- InternalBufferOverflowException.cs
- TextPenaltyModule.cs
- PasswordRecoveryDesigner.cs
- QilValidationVisitor.cs
- JournalNavigationScope.cs
- CompositeScriptReferenceEventArgs.cs
- DefaultValueTypeConverter.cs
- CodeSnippetCompileUnit.cs
- RoutedEventArgs.cs
- AmbientLight.cs
- CounterCreationDataCollection.cs
- ToolboxItemFilterAttribute.cs
- RawTextInputReport.cs
- BooleanFacetDescriptionElement.cs
- CutCopyPasteHelper.cs
- MappingItemCollection.cs
- TriggerAction.cs
- BoundingRectTracker.cs
- BitmapScalingModeValidation.cs
- GridItemPatternIdentifiers.cs
- log.cs
- StringConverter.cs
- TimelineCollection.cs
- RewritingSimplifier.cs
- ErrorFormatterPage.cs
- OdbcConnectionFactory.cs
- DefaultEventAttribute.cs
- SimpleType.cs
- HMAC.cs
- ObjectToken.cs
- SubMenuStyle.cs
- ControlAdapter.cs
- EntityDataSourceDataSelectionPanel.cs
- XomlCompilerParameters.cs
- RemoteEndpointMessageProperty.cs
- DynamicRendererThreadManager.cs
- TreeNodeBinding.cs
- SessionPageStateSection.cs
- SequentialOutput.cs
- NavigationEventArgs.cs
- GridViewDeletedEventArgs.cs
- TemplateControlCodeDomTreeGenerator.cs
- Constants.cs
- SequentialUshortCollection.cs
- WeakEventManager.cs
- PathStreamGeometryContext.cs
- DataBindingCollection.cs
- ValueConversionAttribute.cs