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
- RenderData.cs
- QueryStringParameter.cs
- SemanticResolver.cs
- EditorBrowsableAttribute.cs
- TrustManager.cs
- InvariantComparer.cs
- MaskDesignerDialog.cs
- ToolStripSeparatorRenderEventArgs.cs
- RemoteWebConfigurationHost.cs
- GifBitmapDecoder.cs
- cookiecontainer.cs
- MethodToken.cs
- ServiceBusyException.cs
- SessionIDManager.cs
- OutputWindow.cs
- SectionRecord.cs
- GlobalAclOperationRequirement.cs
- SingleObjectCollection.cs
- WebPartVerbsEventArgs.cs
- Util.cs
- ConnectionOrientedTransportBindingElement.cs
- StandardOleMarshalObject.cs
- SqlDataReaderSmi.cs
- EmissiveMaterial.cs
- TextEffect.cs
- PeerNearMe.cs
- OleDbTransaction.cs
- PermissionSet.cs
- ConfigurationStrings.cs
- EntityDataSourceWizardForm.cs
- FocusWithinProperty.cs
- BitmapFrame.cs
- SendMailErrorEventArgs.cs
- DebugView.cs
- ParserHooks.cs
- TreeView.cs
- LocalizedNameDescriptionPair.cs
- DataControlFieldCollection.cs
- EventBuilder.cs
- Calendar.cs
- EventWaitHandleSecurity.cs
- UnknownBitmapEncoder.cs
- XmlCDATASection.cs
- DataRowCollection.cs
- ExpressionLexer.cs
- DynamicQueryableWrapper.cs
- UntypedNullExpression.cs
- RadioButtonList.cs
- BasePattern.cs
- UriTemplateTrieNode.cs
- BamlResourceContent.cs
- ProxyFragment.cs
- SqlConnectionHelper.cs
- Zone.cs
- BufferModeSettings.cs
- DigitShape.cs
- WebPageTraceListener.cs
- x509store.cs
- DbConnectionPool.cs
- NonClientArea.cs
- ListViewTableRow.cs
- GeometryHitTestResult.cs
- PageContentCollection.cs
- ProtocolsConfiguration.cs
- XmlDataSource.cs
- PolyBezierSegment.cs
- StatusBarAutomationPeer.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- StatusBarItem.cs
- DbMetaDataFactory.cs
- XsltQilFactory.cs
- DefaultEvaluationContext.cs
- ListItemParagraph.cs
- SoundPlayerAction.cs
- XmlName.cs
- basecomparevalidator.cs
- CodeSubDirectoriesCollection.cs
- SecurityUtils.cs
- UshortList2.cs
- HiddenFieldPageStatePersister.cs
- CodeBlockBuilder.cs
- SQLDouble.cs
- BrushMappingModeValidation.cs
- ListComponentEditor.cs
- NodeLabelEditEvent.cs
- DataGridViewAccessibleObject.cs
- ModelUIElement3D.cs
- DefaultSettingsSection.cs
- _NetRes.cs
- HttpDigestClientCredential.cs
- DbConnectionInternal.cs
- Line.cs
- AttachedProperty.cs
- DataAccessException.cs
- ProgressBarRenderer.cs
- UInt16Converter.cs
- CaseInsensitiveHashCodeProvider.cs
- safemediahandle.cs
- ObfuscationAttribute.cs
- NamespaceEmitter.cs