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
- MeasureItemEvent.cs
- DoubleMinMaxAggregationOperator.cs
- PropertyChangingEventArgs.cs
- X509Certificate2.cs
- NotSupportedException.cs
- CompModSwitches.cs
- BoolExpression.cs
- SafeCertificateStore.cs
- SendDesigner.xaml.cs
- PolicyStatement.cs
- Transform3D.cs
- SqlBulkCopy.cs
- LinkButton.cs
- ObjectNavigationPropertyMapping.cs
- TextSpanModifier.cs
- PixelFormats.cs
- ServiceModelPerformanceCounters.cs
- AxHostDesigner.cs
- assemblycache.cs
- HtmlControl.cs
- ComplexPropertyEntry.cs
- CachedPathData.cs
- MetaData.cs
- SourceItem.cs
- VScrollBar.cs
- DependencyObjectValidator.cs
- ListViewEditEventArgs.cs
- AssemblySettingAttributes.cs
- ApplicationServicesHostFactory.cs
- TypedTableHandler.cs
- FormViewDeletedEventArgs.cs
- QilNode.cs
- RectIndependentAnimationStorage.cs
- XmlException.cs
- assertwrapper.cs
- VectorValueSerializer.cs
- CodeDirectiveCollection.cs
- DetailsViewPageEventArgs.cs
- DayRenderEvent.cs
- CompilerInfo.cs
- FileDetails.cs
- _AuthenticationState.cs
- Evidence.cs
- ParseHttpDate.cs
- QuarticEase.cs
- MulticastDelegate.cs
- FileUtil.cs
- ScrollItemPatternIdentifiers.cs
- SecurityPolicySection.cs
- OciEnlistContext.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- PasswordTextContainer.cs
- HandleRef.cs
- DependencyPropertyDescriptor.cs
- ellipse.cs
- _LazyAsyncResult.cs
- PeerIPHelper.cs
- HttpWebRequestElement.cs
- PackUriHelper.cs
- XhtmlTextWriter.cs
- SystemDropShadowChrome.cs
- HtmlTableRowCollection.cs
- SymLanguageVendor.cs
- HotCommands.cs
- TextTreeRootNode.cs
- SelectionPattern.cs
- Stack.cs
- SslStreamSecurityUpgradeProvider.cs
- KernelTypeValidation.cs
- ServiceModelActivity.cs
- Selection.cs
- LockCookie.cs
- EventLogPermissionAttribute.cs
- SequentialUshortCollection.cs
- RelatedView.cs
- QueryCoreOp.cs
- ConfigurationException.cs
- Hyperlink.cs
- Menu.cs
- ProgressBar.cs
- MatchingStyle.cs
- CorrelationQuery.cs
- PrintPreviewGraphics.cs
- SevenBitStream.cs
- HostingEnvironment.cs
- StretchValidation.cs
- ValidationSummary.cs
- TablePattern.cs
- ScaleTransform.cs
- LoginView.cs
- HttpValueCollection.cs
- ConfigUtil.cs
- PartitionResolver.cs
- HitTestFilterBehavior.cs
- WebPartCloseVerb.cs
- AdapterSwitches.cs
- DoWorkEventArgs.cs
- CqlLexer.cs
- PenLineCapValidation.cs
- AsymmetricSignatureDeformatter.cs