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
- EventHandlerList.cs
- JsonDataContract.cs
- SingleStorage.cs
- PresentationAppDomainManager.cs
- StringBuilder.cs
- QilReplaceVisitor.cs
- IndicCharClassifier.cs
- Subordinate.cs
- EventWaitHandleSecurity.cs
- AnonymousIdentificationModule.cs
- DataGridViewHeaderCell.cs
- PolicyAssertionCollection.cs
- PowerEase.cs
- Walker.cs
- MILUtilities.cs
- JsonServiceDocumentSerializer.cs
- X509SubjectKeyIdentifierClause.cs
- SelectionPatternIdentifiers.cs
- RangeContentEnumerator.cs
- SafeTimerHandle.cs
- SqlNode.cs
- WindowsAuthenticationEventArgs.cs
- Menu.cs
- InputReport.cs
- ListBoxChrome.cs
- EventEntry.cs
- ContextMenuStrip.cs
- ParentControlDesigner.cs
- SqlCharStream.cs
- SamlSubject.cs
- OperatingSystem.cs
- SpeechRecognitionEngine.cs
- SerializerProvider.cs
- SpotLight.cs
- DateTimeValueSerializerContext.cs
- BreakRecordTable.cs
- XmlSigningNodeWriter.cs
- COMException.cs
- Point4DConverter.cs
- ExceptionUtility.cs
- PieceDirectory.cs
- IdentifierElement.cs
- OdbcEnvironmentHandle.cs
- SecurityHelper.cs
- UIElementHelper.cs
- CheckBox.cs
- KnownTypesHelper.cs
- SourceFileBuildProvider.cs
- Debugger.cs
- LinqDataView.cs
- BuildProviderAppliesToAttribute.cs
- coordinator.cs
- QueryAccessibilityHelpEvent.cs
- FragmentQueryKB.cs
- ParentQuery.cs
- BamlReader.cs
- ItemsPanelTemplate.cs
- ExtractedStateEntry.cs
- TemplateManager.cs
- DocumentOrderQuery.cs
- MtomMessageEncodingBindingElement.cs
- _CacheStreams.cs
- SessionIDManager.cs
- XmlDictionaryReaderQuotasElement.cs
- QueryRewriter.cs
- PrimitiveRenderer.cs
- RuntimeIdentifierPropertyAttribute.cs
- IgnoreFileBuildProvider.cs
- OleDbError.cs
- RelationshipType.cs
- DataGridColumnCollection.cs
- QilChoice.cs
- CreateUserWizard.cs
- RowUpdatingEventArgs.cs
- ConfigXmlDocument.cs
- StickyNoteAnnotations.cs
- StateRuntime.cs
- BooleanKeyFrameCollection.cs
- Point4D.cs
- StorageConditionPropertyMapping.cs
- SiteOfOriginContainer.cs
- Preprocessor.cs
- CodeMethodInvokeExpression.cs
- NameValueCollection.cs
- AlternateView.cs
- XslAst.cs
- WebPartTracker.cs
- ContainerFilterService.cs
- RawTextInputReport.cs
- ComponentEditorForm.cs
- SqlDataSource.cs
- FullTextBreakpoint.cs
- StandardOleMarshalObject.cs
- DeferredReference.cs
- WorkflowControlEndpoint.cs
- mediaeventshelper.cs
- SqlClientPermission.cs
- Boolean.cs
- WmlControlAdapter.cs
- InkCanvasAutomationPeer.cs