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
- HtmlTable.cs
- WebExceptionStatus.cs
- WebPartTracker.cs
- MessageTransmitTraceRecord.cs
- ConfigXmlAttribute.cs
- TextDecorations.cs
- Pen.cs
- ProcessModelSection.cs
- InternalConfigSettingsFactory.cs
- KeyPullup.cs
- GregorianCalendarHelper.cs
- RSAOAEPKeyExchangeDeformatter.cs
- MenuItemCollection.cs
- DataGrid.cs
- ISCIIEncoding.cs
- EntityContainerAssociationSet.cs
- IPAddress.cs
- FixedSOMLineRanges.cs
- DriveInfo.cs
- RoleManagerModule.cs
- ExpressionVisitor.cs
- DataKey.cs
- CngKey.cs
- MissingMethodException.cs
- StringArrayConverter.cs
- SpellerHighlightLayer.cs
- QilXmlWriter.cs
- OleServicesContext.cs
- OSFeature.cs
- UnsafePeerToPeerMethods.cs
- Visitors.cs
- Int32CAMarshaler.cs
- RequestCacheManager.cs
- formatstringdialog.cs
- AtomPub10ServiceDocumentFormatter.cs
- QilFunction.cs
- XmlAttributes.cs
- DataException.cs
- Assert.cs
- WebServiceAttribute.cs
- Asn1IntegerConverter.cs
- ConfigurationConverterBase.cs
- NativeMethods.cs
- NonDualMessageSecurityOverHttp.cs
- StreamResourceInfo.cs
- PolicyImporterElementCollection.cs
- ScrollChangedEventArgs.cs
- StylusSystemGestureEventArgs.cs
- JavaScriptString.cs
- X509ChainPolicy.cs
- ModuleConfigurationInfo.cs
- SizeValueSerializer.cs
- PrivateFontCollection.cs
- FormatterServices.cs
- HttpDictionary.cs
- WindowClosedEventArgs.cs
- MachineSettingsSection.cs
- BrowserTree.cs
- TypeUsageBuilder.cs
- OpCodes.cs
- CharacterString.cs
- FormViewPagerRow.cs
- SvcMapFile.cs
- Calendar.cs
- JsonEncodingStreamWrapper.cs
- ProcessModule.cs
- TabletDeviceInfo.cs
- Shared.cs
- TemplateControlParser.cs
- CoTaskMemUnicodeSafeHandle.cs
- DesignTimeSiteMapProvider.cs
- ViewValidator.cs
- MatcherBuilder.cs
- CompiledELinqQueryState.cs
- RegisteredDisposeScript.cs
- BinHexEncoder.cs
- Label.cs
- __ConsoleStream.cs
- ContentFileHelper.cs
- ListBase.cs
- PropertyChangeTracker.cs
- BaseParser.cs
- RegularExpressionValidator.cs
- Stacktrace.cs
- RuleSettings.cs
- TrustSection.cs
- PrimitiveOperationFormatter.cs
- OutputCacheSection.cs
- RowBinding.cs
- DocumentViewerHelper.cs
- WindowsBrush.cs
- URLString.cs
- ButtonChrome.cs
- MediaPlayer.cs
- ColumnReorderedEventArgs.cs
- XmlUTF8TextWriter.cs
- HtmlWindow.cs
- RuleProcessor.cs
- NetMsmqBinding.cs
- TreeViewBindingsEditorForm.cs