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
- ProtectedUri.cs
- NavigationExpr.cs
- ConfigurationStrings.cs
- ChangeDirector.cs
- Authorization.cs
- RenderOptions.cs
- MexBindingElement.cs
- OperationAbortedException.cs
- CellCreator.cs
- AttachmentCollection.cs
- File.cs
- RedBlackList.cs
- WorkflowApplication.cs
- SimpleApplicationHost.cs
- DrawingContextDrawingContextWalker.cs
- SQlBooleanStorage.cs
- TextRangeProviderWrapper.cs
- SqlClientPermission.cs
- ClientApiGenerator.cs
- WriterOutput.cs
- TextServicesContext.cs
- RegexParser.cs
- DataStreamFromComStream.cs
- XamlBrushSerializer.cs
- Executor.cs
- AppDomainGrammarProxy.cs
- ICspAsymmetricAlgorithm.cs
- ObjRef.cs
- BindableTemplateBuilder.cs
- _SafeNetHandles.cs
- FusionWrap.cs
- AvTraceFormat.cs
- MetadataUtil.cs
- HttpRawResponse.cs
- TreeNodeConverter.cs
- EditingCommands.cs
- SQLByteStorage.cs
- RuleAttributes.cs
- ListViewGroup.cs
- SessionPageStateSection.cs
- KeyedCollection.cs
- Label.cs
- ChannelSinkStacks.cs
- CollaborationHelperFunctions.cs
- MetadataArtifactLoaderFile.cs
- DataTableExtensions.cs
- TrackBarRenderer.cs
- PerformanceCounterLib.cs
- NamedServiceModelExtensionCollectionElement.cs
- _SafeNetHandles.cs
- EntityParameter.cs
- GroupBoxAutomationPeer.cs
- Deflater.cs
- ConfigXmlCDataSection.cs
- GridViewEditEventArgs.cs
- Attributes.cs
- PersonalizationEntry.cs
- ExitEventArgs.cs
- UserControl.cs
- BypassElementCollection.cs
- CompoundFileDeflateTransform.cs
- SqlClientPermission.cs
- basecomparevalidator.cs
- FormViewRow.cs
- GroupBox.cs
- InlineObject.cs
- ProcessHostFactoryHelper.cs
- ResourceAttributes.cs
- RtType.cs
- SapiRecognizer.cs
- SignatureToken.cs
- Soap12FormatExtensions.cs
- CreateUserWizardAutoFormat.cs
- Transform3DCollection.cs
- DocumentOutline.cs
- _NestedMultipleAsyncResult.cs
- XamlStyleSerializer.cs
- ManagementDateTime.cs
- Tool.cs
- ResourceProperty.cs
- ReadOnlyDataSourceView.cs
- ThreadExceptionDialog.cs
- ProofTokenCryptoHandle.cs
- XmlSchemaSimpleType.cs
- SqlPersistenceProviderFactory.cs
- Scanner.cs
- DependencyPropertyKey.cs
- LocatorGroup.cs
- FileDetails.cs
- _ListenerAsyncResult.cs
- CompositeDataBoundControl.cs
- CodeObjectCreateExpression.cs
- Application.cs
- WebPartAddingEventArgs.cs
- UInt32.cs
- HtmlTernaryTree.cs
- FilteredReadOnlyMetadataCollection.cs
- Brush.cs
- TeredoHelper.cs
- _BaseOverlappedAsyncResult.cs