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
- TransportDefaults.cs
- Serializer.cs
- IconConverter.cs
- MessageFilterTable.cs
- SerializerProvider.cs
- ListDataHelper.cs
- EmptyEnumerator.cs
- HwndKeyboardInputProvider.cs
- DataGridViewButtonCell.cs
- StringArrayConverter.cs
- CounterCreationDataConverter.cs
- ObjectPersistData.cs
- _TLSstream.cs
- Process.cs
- RegularExpressionValidator.cs
- OdbcCommand.cs
- StagingAreaInputItem.cs
- ButtonColumn.cs
- Thumb.cs
- DbConnectionPoolGroupProviderInfo.cs
- DefaultValidator.cs
- StringDictionary.cs
- MenuItemStyleCollection.cs
- UnsafeNativeMethods.cs
- AdornerPresentationContext.cs
- ApplicationSecurityManager.cs
- PowerStatus.cs
- ConfigurationElementProperty.cs
- ProgressBar.cs
- DataTableCollection.cs
- FrameworkContentElement.cs
- Int32RectValueSerializer.cs
- String.cs
- EncryptedKey.cs
- SortedList.cs
- PermissionRequestEvidence.cs
- XomlSerializationHelpers.cs
- SqlXml.cs
- TextViewBase.cs
- InteropAutomationProvider.cs
- SplashScreen.cs
- ScrollViewerAutomationPeer.cs
- DiscoveryServiceExtension.cs
- XmlSchemaValidator.cs
- oledbmetadatacolumnnames.cs
- UnmanagedHandle.cs
- CredentialManagerDialog.cs
- SessionStateItemCollection.cs
- DynamicPropertyReader.cs
- BaseCollection.cs
- Application.cs
- XmlCharacterData.cs
- StrokeCollection2.cs
- FontDifferentiator.cs
- BitmapEffectGroup.cs
- RC2.cs
- ButtonBaseAutomationPeer.cs
- DataViewManagerListItemTypeDescriptor.cs
- ModuleElement.cs
- ResourceIDHelper.cs
- DocumentOrderComparer.cs
- XhtmlBasicLinkAdapter.cs
- XmlHierarchyData.cs
- TextTreeInsertUndoUnit.cs
- UserControlCodeDomTreeGenerator.cs
- TCPListener.cs
- WebRequestModuleElement.cs
- UserCancellationException.cs
- securitycriticaldataClass.cs
- SystemWebExtensionsSectionGroup.cs
- EncryptedPackageFilter.cs
- SurrogateEncoder.cs
- OperationAbortedException.cs
- CodeConditionStatement.cs
- UserControlParser.cs
- BitmapDownload.cs
- EncryptedKeyIdentifierClause.cs
- ByteStorage.cs
- BookmarkTable.cs
- CalendarSelectionChangedEventArgs.cs
- FixedFindEngine.cs
- CharEntityEncoderFallback.cs
- PointKeyFrameCollection.cs
- IRCollection.cs
- CachedTypeface.cs
- IndexerNameAttribute.cs
- MarshalByRefObject.cs
- Itemizer.cs
- AutoResetEvent.cs
- OleStrCAMarshaler.cs
- GacUtil.cs
- KnownAssemblyEntry.cs
- ImageBrush.cs
- WindowsMenu.cs
- PropertyPathWorker.cs
- EditBehavior.cs
- _NetworkingPerfCounters.cs
- PeerTransportListenAddressValidator.cs
- SqlFileStream.cs
- COM2IProvidePropertyBuilderHandler.cs