source: NonGTP/Xerces/xercesc/util/regx/RangeTokenMap.hpp @ 188

Revision 188, 10.1 KB checked in by mattausch, 19 years ago (diff)

added xercesc to support

Line 
1/*
2 * The Apache Software License, Version 1.1
3 *
4 * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
5 * reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in
16 *    the documentation and/or other materials provided with the
17 *    distribution.
18 *
19 * 3. The end-user documentation included with the redistribution,
20 *    if any, must include the following acknowledgment:
21 *       "This product includes software developed by the
22 *        Apache Software Foundation (http://www.apache.org/)."
23 *    Alternately, this acknowledgment may appear in the software itself,
24 *    if and wherever such third-party acknowledgments normally appear.
25 *
26 * 4. The names "Xerces" and "Apache Software Foundation" must
27 *    not be used to endorse or promote products derived from this
28 *    software without prior written permission. For written
29 *    permission, please contact apache\@apache.org.
30 *
31 * 5. Products derived from this software may not be called "Apache",
32 *    nor may "Apache" appear in their name, without prior written
33 *    permission of the Apache Software Foundation.
34 *
35 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46 * SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This software consists of voluntary contributions made by many
50 * individuals on behalf of the Apache Software Foundation, and was
51 * originally based on software copyright (c) 2001, International
52 * Business Machines, Inc., http://www.ibm.com .  For more information
53 * on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 */
56
57/*
58 * $Id: RangeTokenMap.hpp,v 1.5 2003/05/15 18:42:54 knoaman Exp $
59 */
60
61#if !defined(RANGETOKENMAP_HPP)
62#define RANGETOKENMAP_HPP
63
64// ---------------------------------------------------------------------------
65//  Includes
66// ---------------------------------------------------------------------------
67#include <xercesc/util/Mutexes.hpp>
68#include <xercesc/util/RefHashTableOf.hpp>
69
70XERCES_CPP_NAMESPACE_BEGIN
71
72// ---------------------------------------------------------------------------
73//  Forward Declaration
74// ---------------------------------------------------------------------------
75class RangeToken;
76class RangeFactory;
77class TokenFactory;
78class XMLStringPool;
79
80class XMLUTIL_EXPORT RangeTokenElemMap : public XMemory
81{
82
83public:
84    RangeTokenElemMap(unsigned int categoryId);
85    ~RangeTokenElemMap();
86
87    // -----------------------------------------------------------------------
88    //  Getter methods
89    // -----------------------------------------------------------------------
90        unsigned int getCategoryId() const;
91        RangeToken*  getRangeToken(const bool complement = false) const;
92
93        // -----------------------------------------------------------------------
94    //  Setter methods
95    // -----------------------------------------------------------------------
96        void setRangeToken(RangeToken* const tok, const bool complement = false);
97        void setCategoryId(const unsigned int categId);
98
99private:
100    // -----------------------------------------------------------------------
101    //  Unimplemented constructors and operators
102    // -----------------------------------------------------------------------
103    RangeTokenElemMap(const RangeTokenElemMap&);
104    RangeTokenElemMap& operator=(const RangeTokenElemMap&);
105
106    // Data members
107    unsigned int fCategoryId;
108    RangeToken*  fRange;
109    RangeToken*  fNRange;
110};
111
112
113class XMLUTIL_EXPORT RangeTokenMap : public XMemory
114{
115public:
116    // -----------------------------------------------------------------------
117    //  Putter methods
118    // -----------------------------------------------------------------------
119    void addCategory(const XMLCh* const categoryName);
120        void addRangeMap(const XMLCh* const categoryName,
121                     RangeFactory* const rangeFactory);
122    void addKeywordMap(const XMLCh* const keyword,
123                       const XMLCh* const categoryName);
124
125    // -----------------------------------------------------------------------
126    //  Instance methods
127    // -----------------------------------------------------------------------
128        static RangeTokenMap* instance();
129
130    // -----------------------------------------------------------------------
131    //  Setter methods
132    // -----------------------------------------------------------------------
133        void setRangeToken(const XMLCh* const keyword, RangeToken* const tok,
134                       const bool complement = false);
135
136    // -----------------------------------------------------------------------
137    //  Getter methods
138    // -----------------------------------------------------------------------
139        TokenFactory* getTokenFactory() const;
140
141        // -----------------------------------------------------------------------
142    //  Notification that lazy data has been deleted
143    // -----------------------------------------------------------------------
144        static void reinitInstance();
145
146protected:
147    // -----------------------------------------------------------------------
148    //  Constructor and destructors
149    // -----------------------------------------------------------------------
150    RangeTokenMap();
151    ~RangeTokenMap();
152
153    // -----------------------------------------------------------------------
154    //  Getter methods
155    // -----------------------------------------------------------------------
156    /*
157     *  Gets a commonly used RangeToken from the token registry based on the
158     *  range name - Called by TokenFactory.
159     */
160         RangeToken* getRange(const XMLCh* const name,
161                          const bool complement = false);
162
163     RefHashTableOf<RangeTokenElemMap>* getTokenRegistry() const;
164     RefHashTableOf<RangeFactory>* getRangeMap() const;
165         XMLStringPool* getCategories() const;
166
167private:
168        // -----------------------------------------------------------------------
169    //  Unimplemented constructors and operators
170    // -----------------------------------------------------------------------
171    RangeTokenMap(const RangeTokenMap&);
172    RangeTokenMap& operator=(const RangeTokenMap&);
173
174    // -----------------------------------------------------------------------
175    //  Private Helpers methods
176    // -----------------------------------------------------------------------
177    /*
178     *  Initializes the registry with a set of commonly used RangeToken
179     *  objects.
180     */
181     void initializeRegistry();
182         friend class TokenFactory;
183
184    // -----------------------------------------------------------------------
185    //  Private data members
186    //
187    //  fTokenRegistry
188    //      Contains a set of commonly used tokens
189        //
190    //  fRangeMap
191    //      Contains a map between a category name and a RangeFactory object.
192    //
193    //  fCategories
194    //      Contains range categories names
195    //
196    //  fTokenFactory
197    //      Token factory object
198    //
199    //  fInstance
200    //      A RangeTokenMap instance
201    //
202    //  fMutex
203    //      A mutex object for synchronization
204    // -----------------------------------------------------------------------
205    bool                               fRegistryInitialized;   
206    RefHashTableOf<RangeTokenElemMap>* fTokenRegistry;
207    RefHashTableOf<RangeFactory>*      fRangeMap;
208        XMLStringPool*                     fCategories;
209    TokenFactory*                      fTokenFactory;
210    XMLMutex                           fMutex;
211    static RangeTokenMap*              fInstance;
212};
213
214// ---------------------------------------------------------------------------
215//  RangeTokenElemMap: Getter methods
216// ---------------------------------------------------------------------------
217inline unsigned int RangeTokenElemMap::getCategoryId() const {
218
219    return fCategoryId;
220}
221
222inline RangeToken* RangeTokenElemMap::getRangeToken(const bool complement) const {
223
224        return complement ? fNRange : fRange;
225}
226
227// ---------------------------------------------------------------------------
228//  RangeTokenElemMap: Setter methods
229// ---------------------------------------------------------------------------
230inline void RangeTokenElemMap::setCategoryId(const unsigned int categId) {
231
232    fCategoryId = categId;
233}
234
235inline void RangeTokenElemMap::setRangeToken(RangeToken* const tok,
236                                      const bool complement) {
237
238    if (complement)
239        fNRange = tok;
240        else
241        fRange = tok;
242}
243
244// ---------------------------------------------------------------------------
245//  RangeTokenMap: Getter methods
246// ---------------------------------------------------------------------------
247inline RefHashTableOf<RangeTokenElemMap>* RangeTokenMap::getTokenRegistry() const {
248
249    return fTokenRegistry;
250}
251
252inline RefHashTableOf<RangeFactory>* RangeTokenMap::getRangeMap() const {
253
254    return fRangeMap;
255}
256
257inline XMLStringPool* RangeTokenMap::getCategories() const {
258
259    return fCategories;
260}
261
262inline TokenFactory* RangeTokenMap::getTokenFactory() const {
263
264    return fTokenFactory;
265}
266
267XERCES_CPP_NAMESPACE_END
268
269#endif
270
271/**
272  *     End file RangeToken.hpp
273  */
Note: See TracBrowser for help on using the repository browser.