Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-30 10:27:02

0001 /*
0002  * Licensed to the Apache Software Foundation (ASF) under one or more
0003  * contributor license agreements.  See the NOTICE file distributed with
0004  * this work for additional information regarding copyright ownership.
0005  * The ASF licenses this file to You under the Apache License, Version 2.0
0006  * (the "License"); you may not use this file except in compliance with
0007  * the License.  You may obtain a copy of the License at
0008  * 
0009  *      http://www.apache.org/licenses/LICENSE-2.0
0010  * 
0011  * Unless required by applicable law or agreed to in writing, software
0012  * distributed under the License is distributed on an "AS IS" BASIS,
0013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0014  * See the License for the specific language governing permissions and
0015  * limitations under the License.
0016  */
0017 
0018 /*
0019  * $Id$
0020  */
0021 
0022 #if !defined(XERCESC_INCLUDE_GUARD_DOMNODEIDMAP_HPP)
0023 #define XERCESC_INCLUDE_GUARD_DOMNODEIDMAP_HPP
0024 
0025 //
0026 //  This file is part of the internal implementation of the C++ XML DOM.
0027 //  It should NOT be included or used directly by application programs.
0028 //
0029 //  Applications should include the file <xercesc/dom/DOM.hpp> for the entire
0030 //  DOM API, or xercesc/dom/DOM*.hpp for individual DOM classes, where the class
0031 //  name is substituded for the *.
0032 //
0033 
0034 #include <xercesc/util/XercesDefs.hpp>
0035 XERCES_CPP_NAMESPACE_BEGIN
0036 
0037 
0038 //
0039 //  Class DOMNodeIDMap is a hash table that is used in the implementation of
0040 //   of DOM_Document::getElementsByID().
0041 //
0042 //  Why Yet Another HashTable implementation?  Becuase it can be significantly
0043 //  smaller when tuned for this exact usage, and the generic RefHashTableOf
0044 //  from the xerces utils project is not a paricularly good fit.
0045 //
0046 class DOMAttr;
0047 class DOMDocument;
0048 
0049 
0050 class DOMNodeIDMap {
0051 public:
0052 
0053     DOMNodeIDMap(XMLSize_t initialSize, DOMDocument *doc);    // Create a new hash table, sized to hold "initialSize"
0054                                      //  Entries.  It will automatically grow if need be.
0055 
0056     ~DOMNodeIDMap();
0057 
0058 private:
0059     DOMNodeIDMap(const DOMNodeIDMap &other);   // No copy, assignement, comparison.
0060     DOMNodeIDMap &operator = (const DOMNodeIDMap &other);
0061     bool operator == (const DOMNodeIDMap &other);
0062 
0063 public:
0064     void  add(DOMAttr *attr);       // Add the specified attribute to the table.
0065     void  remove(DOMAttr *other);   // Remove the specified attribute.
0066                                            //   Does nothing if the node is not in the table.
0067     DOMAttr *find(const XMLCh *ID);   // Find the attribute node in the table with this ID
0068 
0069 private:
0070     void growTable();
0071 
0072 private:
0073     DOMAttr      **fTable;
0074     XMLSize_t      fSizeIndex;              // Index of the current table size in the
0075                                             //   array of possible table sizes.
0076     XMLSize_t      fSize;                   // The current size of the table array
0077                                             //   (number of slots, not bytes.)
0078     XMLSize_t      fNumEntries;              // The number of entries used.
0079     XMLSize_t      fMaxEntries;              // The max number of entries to use before
0080                                             //   growing the table.
0081     DOMDocument *fDoc;                      // The owning document.
0082 };
0083 
0084 XERCES_CPP_NAMESPACE_END
0085 
0086 #endif