source: icXML/icXML-devel/src/icxmlc/XMLNamespaceUriTable.hpp @ 3563

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

Update icxmlc files

File size: 3.2 KB
Line 
1#ifndef XMLNAMESPACEURITABLE_HPP
2#define XMLNAMESPACEURITABLE_HPP
3
4/*
5 *  Copyright © 2012 International Characters.
6 *  This software is licensed to the public under the Open Software License 3.0.
7 *  icXML is a trademark of International Characters.
8 */
9
10#include <icxmlc/HashTable.hpp>
11#include <icxmlc/stringpool.h>
12#include <icxmlc/XMLStringU.hpp>
13#include <xercesc/util/XMLUni.hpp>
14#include <xercesc/util/StringPool.hpp>
15#include <icxmlc/XMLScanIterator.hpp>
16#include <icxercesc/validators/common/Grammar.hpp>
17#include <xercesc/framework/MemoryManager.hpp>
18#include <icxmlc/XMLConfig.hpp>
19
20XERCES_CPP_NAMESPACE_BEGIN
21
22class XMLNamespaceTable;
23class XMLGlobalNamespaceTable;
24class XMLNamespaceResolver;
25
26/** ---------------------------------------------------------------------------------------------------------
27
28
29** --------------------------------------------------------------------------------------------------------- **/
30class XMLNamespaceEntry
31{
32        friend class XMLNamespaceTable;
33        friend class XMLGlobalNamespaceTable;
34        friend class XMLNamespaceResolver;
35
36        public:
37
38                XMLNamespaceEntry()
39                : fId(0)
40                , fKey(NULL)
41                , fLength(0)
42                {
43
44                }
45
46                XMLNamespaceEntry(const gid_t id, const XMLCh * key, unsigned int length)
47                : fId(id)
48                , fKey(key)
49                , fLength(length)
50                {
51
52                }
53
54                const XMLCh * getKey() const { return fKey; }
55
56                unsigned int getLength() const { return fLength; }
57
58                unsigned int getId() const { return fId; }
59
60                XMLNamespaceEntry & operator=(const XMLNamespaceEntry & other)
61                {
62                        fKey = other.fKey;
63                        fLength = other.fLength;
64                        fId = other.fId;
65                        return *this;
66                }
67
68                IDISA_ALWAYS_INLINE
69                bool equals(const XMLCh * otherKey, const unsigned int length) const
70                {
71                        return (getLength() == length) && (XMLStringU::equals(getKey(), otherKey, length));
72                }
73
74        inline ~XMLNamespaceEntry()
75        {
76
77        }
78
79        protected:
80
81                gid_t                   fId;
82                const XMLCh *   fKey;
83                unsigned int    fLength;
84
85};
86
87/// ---------------------------------------------------------------------------------------------------------
88
89class XMLNamespaceTable
90{
91        public:
92
93        XMLNamespaceTable(MemoryManager * manager)
94                {
95
96                }
97
98                IDISA_ALWAYS_INLINE
99        const XMLNamespaceEntry & operator[](const size_t id) const
100                {
101                        return fHashTable[id];
102                }
103
104                IDISA_ALWAYS_INLINE
105        unsigned int find(const XMLCh * uri, const size_t length) const
106                {
107            return fHashTable.find(uri, length);
108                }
109
110                IDISA_ALWAYS_INLINE
111        const size_t count() const
112                {
113                        return fHashTable.count();
114                }
115
116        IDISA_ALWAYS_INLINE
117        const size_t capacity() const
118        {
119            return fHashTable.capacity();
120        }
121
122        void resizeToFit(const size_t size)
123        {
124            fHashTable.resizeToFit(size);
125        }
126
127        IDISA_ALWAYS_INLINE
128        unsigned int add(const unsigned int localId, const XMLCh * uri, const size_t length, XMLStringPool * globalURIPool)
129        {
130            const unsigned int uriId = globalURIPool->addOrFind(uri);
131            XMLNamespaceEntry entry(uriId, globalURIPool->getValueForId(uriId), length);
132            fHashTable.add(entry, localId);
133            return uriId;
134        }
135
136        private:
137
138                HashTable<XMLNamespaceEntry, XMLCh, sizeof(hash_t) * 16, 1>                     fHashTable;
139};
140
141XERCES_CPP_NAMESPACE_END
142
143#endif // XMLNAMESPACEURITABLE_HPP
Note: See TracBrowser for help on using the repository browser.