source: icXML/icXML-devel/src/xercesc/dom/impl/DOMNodeIDMap.hpp @ 2722

Last change on this file since 2722 was 2722, checked in by cameron, 6 years ago

Original Xerces files with import mods for icxercesc

File size: 3.2 KB
Line 
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * $Id: DOMNodeIDMap.hpp 676911 2008-07-15 13:27:32Z amassari $
20 */
21
22#if !defined(XERCESC_INCLUDE_GUARD_DOMNODEIDMAP_HPP)
23#define XERCESC_INCLUDE_GUARD_DOMNODEIDMAP_HPP
24
25//
26//  This file is part of the internal implementation of the C++ XML DOM.
27//  It should NOT be included or used directly by application programs.
28//
29//  Applications should include the file <xercesc/dom/DOM.hpp> for the entire
30//  DOM API, or xercesc/dom/DOM*.hpp for individual DOM classes, where the class
31//  name is substituded for the *.
32//
33
34#include <xercesc/util/XercesDefs.hpp>
35XERCES_CPP_NAMESPACE_BEGIN
36
37
38//
39//  Class DOMNodeIDMap is a hash table that is used in the implementation of
40//   of DOM_Document::getElementsByID().
41//
42//  Why Yet Another HashTable implementation?  Becuase it can be significantly
43//  smaller when tuned for this exact usage, and the generic RefHashTableOf
44//  from the xerces utils project is not a paricularly good fit.
45//
46class DOMAttr;
47class DOMDocument;
48
49
50class DOMNodeIDMap {
51public:
52
53    DOMNodeIDMap(XMLSize_t initialSize, DOMDocument *doc);    // Create a new hash table, sized to hold "initialSize"
54                                     //  Entries.  It will automatically grow if need be.
55
56    ~DOMNodeIDMap();
57
58private:
59    DOMNodeIDMap(const DOMNodeIDMap &other);   // No copy, assignement, comparison.
60    DOMNodeIDMap &operator = (const DOMNodeIDMap &other);
61    bool operator == (const DOMNodeIDMap &other);
62
63public:
64    void  add(DOMAttr *attr);       // Add the specified attribute to the table.
65    void  remove(DOMAttr *other);   // Remove the specified attribute.
66                                           //   Does nothing if the node is not in the table.
67    DOMAttr *find(const XMLCh *ID);   // Find the attribute node in the table with this ID
68
69private:
70    void growTable();
71
72private:
73    DOMAttr      **fTable;
74    XMLSize_t      fSizeIndex;              // Index of the current table size in the
75                                            //   array of possible table sizes.
76        XMLSize_t      fSize;                   // The current size of the table array
77                                            //   (number of slots, not bytes.)
78    XMLSize_t      fNumEntries;              // The number of entries used.
79    XMLSize_t      fMaxEntries;              // The max number of entries to use before
80                                            //   growing the table.
81    DOMDocument *fDoc;                      // The owning document.
82};
83
84XERCES_CPP_NAMESPACE_END
85
86#endif
Note: See TracBrowser for help on using the repository browser.