Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / Dom / DomNameTable.cs / 1305376 / DomNameTable.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Xml.Schema; namespace System.Xml { internal class DomNameTable { XmlName[] entries; int count; int mask; XmlDocument ownerDocument; XmlNameTable nameTable; const int InitialSize = 64; // must be a power of two public DomNameTable( XmlDocument document ) { ownerDocument = document; nameTable = document.NameTable; entries = new XmlName[InitialSize]; mask = InitialSize - 1; Debug.Assert( ( entries.Length & mask ) == 0 ); // entries.Length must be a power of two } public XmlName GetName(string prefix, string localName, string ns, IXmlSchemaInfo schemaInfo) { if (prefix == null) { prefix = string.Empty; } if (ns == null) { ns = string.Empty; } int hashCode = XmlName.GetHashCode(localName); for (XmlName e = entries[hashCode & mask]; e != null; e = e.next) { if (e.HashCode == hashCode && ((object)e.LocalName == (object)localName || e.LocalName.Equals(localName)) && ((object)e.Prefix == (object)prefix || e.Prefix.Equals(prefix)) && ((object)e.NamespaceURI == (object)ns || e.NamespaceURI.Equals(ns)) && e.Equals(schemaInfo)) { return e; } } return null; } public XmlName AddName(string prefix, string localName, string ns, IXmlSchemaInfo schemaInfo) { if (prefix == null) { prefix = string.Empty; } if (ns == null) { ns = string.Empty; } int hashCode = XmlName.GetHashCode(localName); for (XmlName e = entries[hashCode & mask]; e != null; e = e.next) { if (e.HashCode == hashCode && ((object)e.LocalName == (object)localName || e.LocalName.Equals(localName)) && ((object)e.Prefix == (object)prefix || e.Prefix.Equals(prefix)) && ((object)e.NamespaceURI == (object)ns || e.NamespaceURI.Equals(ns)) && e.Equals(schemaInfo)) { return e; } } prefix = nameTable.Add(prefix); localName = nameTable.Add(localName); ns = nameTable.Add(ns); int index = hashCode & mask; XmlName name = XmlName.Create(prefix, localName, ns, hashCode, ownerDocument, entries[index], schemaInfo); entries[index] = name; if (count++ == mask) { Grow(); } return name; } private void Grow() { int newMask = mask * 2 + 1; XmlName[] oldEntries = entries; XmlName[] newEntries = new XmlName[newMask+1]; // use oldEntries.Length to eliminate the rangecheck for ( int i = 0; i < oldEntries.Length; i++ ) { XmlName name = oldEntries[i]; while ( name != null ) { int newIndex = name.HashCode & newMask; XmlName tmp = name.next; name.next = newEntries[newIndex]; newEntries[newIndex] = name; name = tmp; } } entries = newEntries; mask = newMask; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Xml.Schema; namespace System.Xml { internal class DomNameTable { XmlName[] entries; int count; int mask; XmlDocument ownerDocument; XmlNameTable nameTable; const int InitialSize = 64; // must be a power of two public DomNameTable( XmlDocument document ) { ownerDocument = document; nameTable = document.NameTable; entries = new XmlName[InitialSize]; mask = InitialSize - 1; Debug.Assert( ( entries.Length & mask ) == 0 ); // entries.Length must be a power of two } public XmlName GetName(string prefix, string localName, string ns, IXmlSchemaInfo schemaInfo) { if (prefix == null) { prefix = string.Empty; } if (ns == null) { ns = string.Empty; } int hashCode = XmlName.GetHashCode(localName); for (XmlName e = entries[hashCode & mask]; e != null; e = e.next) { if (e.HashCode == hashCode && ((object)e.LocalName == (object)localName || e.LocalName.Equals(localName)) && ((object)e.Prefix == (object)prefix || e.Prefix.Equals(prefix)) && ((object)e.NamespaceURI == (object)ns || e.NamespaceURI.Equals(ns)) && e.Equals(schemaInfo)) { return e; } } return null; } public XmlName AddName(string prefix, string localName, string ns, IXmlSchemaInfo schemaInfo) { if (prefix == null) { prefix = string.Empty; } if (ns == null) { ns = string.Empty; } int hashCode = XmlName.GetHashCode(localName); for (XmlName e = entries[hashCode & mask]; e != null; e = e.next) { if (e.HashCode == hashCode && ((object)e.LocalName == (object)localName || e.LocalName.Equals(localName)) && ((object)e.Prefix == (object)prefix || e.Prefix.Equals(prefix)) && ((object)e.NamespaceURI == (object)ns || e.NamespaceURI.Equals(ns)) && e.Equals(schemaInfo)) { return e; } } prefix = nameTable.Add(prefix); localName = nameTable.Add(localName); ns = nameTable.Add(ns); int index = hashCode & mask; XmlName name = XmlName.Create(prefix, localName, ns, hashCode, ownerDocument, entries[index], schemaInfo); entries[index] = name; if (count++ == mask) { Grow(); } return name; } private void Grow() { int newMask = mask * 2 + 1; XmlName[] oldEntries = entries; XmlName[] newEntries = new XmlName[newMask+1]; // use oldEntries.Length to eliminate the rangecheck for ( int i = 0; i < oldEntries.Length; i++ ) { XmlName name = oldEntries[i]; while ( name != null ) { int newIndex = name.HashCode & newMask; XmlName tmp = name.next; name.next = newEntries[newIndex]; newEntries[newIndex] = name; name = tmp; } } entries = newEntries; mask = newMask; } } } // 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
- TypeDefinition.cs
- dtdvalidator.cs
- PlatformNotSupportedException.cs
- DataGridColumnStyleMappingNameEditor.cs
- SizeAnimationClockResource.cs
- LocalizationComments.cs
- HandlerBase.cs
- MessageHeaderDescription.cs
- QuaternionAnimation.cs
- SiteIdentityPermission.cs
- GridItem.cs
- ZipFileInfoCollection.cs
- SimpleWebHandlerParser.cs
- SrgsSemanticInterpretationTag.cs
- WebRequest.cs
- GeometryDrawing.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- DrawingContextWalker.cs
- SqlClientPermission.cs
- XmlILStorageConverter.cs
- HyperlinkAutomationPeer.cs
- MasterPage.cs
- DependencyPropertyHelper.cs
- CodeAttributeDeclaration.cs
- querybuilder.cs
- RepeatBehaviorConverter.cs
- InvalidEnumArgumentException.cs
- ExpressionVisitorHelpers.cs
- SynchronizedInputPattern.cs
- HealthMonitoringSectionHelper.cs
- MDIClient.cs
- RouteParameter.cs
- MessageFilterTable.cs
- WorkflowPrinting.cs
- ColorConvertedBitmapExtension.cs
- DataServiceStreamResponse.cs
- CodeTypeMember.cs
- SrgsElementFactory.cs
- FontNameEditor.cs
- WebPartConnectionsCloseVerb.cs
- Int64Converter.cs
- DefaultMemberAttribute.cs
- CheckBox.cs
- ObjectSpanRewriter.cs
- ScrollableControl.cs
- ProxyWebPartConnectionCollection.cs
- XpsStructure.cs
- SessionStateUtil.cs
- PageAction.cs
- IsolatedStorage.cs
- ResourceContainerWrapper.cs
- TextEndOfParagraph.cs
- PropertyMapper.cs
- LinqDataSourceDisposeEventArgs.cs
- SystemIPGlobalProperties.cs
- HyperLink.cs
- VisualCollection.cs
- QueryCacheEntry.cs
- ResourceProperty.cs
- Misc.cs
- WinInetCache.cs
- SelectionHighlightInfo.cs
- DataGridPageChangedEventArgs.cs
- TemplateControlCodeDomTreeGenerator.cs
- PropertyIdentifier.cs
- COM2FontConverter.cs
- NavigatorOutput.cs
- NamedPermissionSet.cs
- XmlSchemaComplexContentRestriction.cs
- InitialServerConnectionReader.cs
- RawStylusActions.cs
- PageRequestManager.cs
- CommonDialog.cs
- InternalPermissions.cs
- ModuleConfigurationInfo.cs
- ApplicationContext.cs
- UnsafeNativeMethodsPenimc.cs
- ItemList.cs
- DBProviderConfigurationHandler.cs
- TiffBitmapEncoder.cs
- RightsManagementEncryptionTransform.cs
- DataColumnMappingCollection.cs
- XmlSchemaSimpleContentExtension.cs
- UniqueIdentifierService.cs
- ObjectStateEntry.cs
- HttpModuleCollection.cs
- SqlDataSource.cs
- SafeEventHandle.cs
- UserControlParser.cs
- QilUnary.cs
- PropertyEntry.cs
- StringFunctions.cs
- BufferedGraphicsManager.cs
- DirectionalLight.cs
- BaseDataList.cs
- ObjectQuery_EntitySqlExtensions.cs
- UmAlQuraCalendar.cs
- ComEventsHelper.cs
- DataGridColumnStyleMappingNameEditor.cs
- WebPartHeaderCloseVerb.cs