source: icXML/icXML-devel/src/xercesc/util/regx/Token.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: 8.1 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: Token.hpp 678879 2008-07-22 20:05:05Z amassari $
20 */
21
22#if !defined(XERCESC_INCLUDE_GUARD_TOKEN_HPP)
23#define XERCESC_INCLUDE_GUARD_TOKEN_HPP
24
25// ---------------------------------------------------------------------------
26//  Includes
27// ---------------------------------------------------------------------------
28#include <xercesc/util/RuntimeException.hpp>
29#include <icxercesc/util/PlatformUtils.hpp>
30
31XERCES_CPP_NAMESPACE_BEGIN
32
33// ---------------------------------------------------------------------------
34//  Forward Declaration
35// ---------------------------------------------------------------------------
36class RangeToken;
37class TokenFactory;
38
39
40class XMLUTIL_EXPORT Token : public XMemory
41{
42public:
43    // -----------------------------------------------------------------------
44    //  Public Constants
45    // -----------------------------------------------------------------------
46    // Token types
47    typedef enum {
48        T_CHAR = 0,
49        T_CONCAT = 1,
50        T_UNION = 2,
51        T_CLOSURE = 3,
52        T_RANGE = 4,
53        T_NRANGE = 5,
54        T_PAREN = 6,
55        T_EMPTY = 7,
56        T_ANCHOR = 8,
57        T_NONGREEDYCLOSURE = 9,
58        T_STRING = 10,
59        T_DOT = 11,
60        T_BACKREFERENCE = 12
61    } tokType;
62
63    // -----------------------------------------------------------------------
64    //  Public Constructors and Destructor
65    // -----------------------------------------------------------------------
66    Token(const tokType tkType
67        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
68        );
69    virtual ~Token();
70
71    static const XMLInt32        UTF16_MAX;
72
73    typedef enum {
74        FC_CONTINUE = 0,
75        FC_TERMINAL = 1,
76        FC_ANY = 2
77    } firstCharacterOptions;
78
79    // -----------------------------------------------------------------------
80    //  Getter methods
81    // -----------------------------------------------------------------------
82    tokType              getTokenType() const;
83    XMLSize_t            getMinLength() const;
84    int                  getMaxLength() const;
85    virtual Token*       getChild(const XMLSize_t index) const;
86    virtual XMLSize_t    size() const;
87    virtual int          getMin() const;
88    virtual int          getMax() const;
89    virtual int          getNoParen() const;
90    virtual int          getReferenceNo() const;
91    virtual const XMLCh* getString() const;
92    virtual XMLInt32     getChar() const;
93
94    // -----------------------------------------------------------------------
95    //  Setter methods
96    // -----------------------------------------------------------------------
97    void setTokenType(const tokType tokType);
98    virtual void setMin(const int minVal);
99    virtual void setMax(const int maxVal);
100
101    // -----------------------------------------------------------------------
102    //  Range manipulation methods
103    // -----------------------------------------------------------------------
104    virtual void addRange(const XMLInt32 start, const XMLInt32 end);
105    virtual void mergeRanges(const Token *const tok);
106    virtual void sortRanges();
107    virtual void compactRanges();
108    virtual void subtractRanges(RangeToken* const tok);
109    virtual void intersectRanges(RangeToken* const tok);
110
111    // -----------------------------------------------------------------------
112    //  Putter methods
113    // -----------------------------------------------------------------------
114    virtual void addChild(Token* const child, TokenFactory* const tokFactory);
115
116    // -----------------------------------------------------------------------
117    //  Helper methods
118    // -----------------------------------------------------------------------
119    firstCharacterOptions analyzeFirstCharacter(RangeToken* const rangeTok, const int options,
120                                                TokenFactory* const tokFactory);
121    Token* findFixedString(int options, int& outOptions);
122
123private:
124    // -----------------------------------------------------------------------
125    //  Unimplemented constructors and operators
126    // -----------------------------------------------------------------------
127    Token(const Token&);
128    Token& operator=(const Token&);
129
130    // -----------------------------------------------------------------------
131    //  Private Helper methods
132    // -----------------------------------------------------------------------
133    bool isSet(const int options, const unsigned int flag);
134    bool isShorterThan(Token* const tok);
135
136    // -----------------------------------------------------------------------
137    //  Private data members
138    // -----------------------------------------------------------------------
139    tokType fTokenType;
140protected:
141    MemoryManager* const    fMemoryManager;
142};
143
144
145// ---------------------------------------------------------------------------
146//  Token: getter methods
147// ---------------------------------------------------------------------------
148inline Token::tokType Token::getTokenType() const {
149
150    return fTokenType;
151}
152
153inline XMLSize_t Token::size() const {
154
155    return 0;
156}
157
158inline Token* Token::getChild(const XMLSize_t) const {
159
160    return 0;
161}
162
163inline int Token::getMin() const {
164
165    return -1;
166}
167
168inline int Token::getMax() const {
169
170    return -1;
171}
172
173inline int Token::getReferenceNo() const {
174
175    return 0;
176}
177
178inline int Token::getNoParen() const {
179
180    return 0;
181}
182
183inline const XMLCh* Token::getString() const {
184
185    return 0;
186}
187
188inline XMLInt32 Token::getChar() const {
189
190    return -1;
191}
192
193// ---------------------------------------------------------------------------
194//  Token: setter methods
195// ---------------------------------------------------------------------------
196inline void Token::setTokenType(const Token::tokType tokType) {
197   
198    fTokenType = tokType;
199}
200
201inline void Token::setMax(const int) {
202    // ClosureToken
203}
204
205inline void Token::setMin(const int) {
206    // ClosureToken
207}
208
209inline bool Token::isSet(const int options, const unsigned int flag) {
210
211    return (options & flag) == flag;
212}
213
214// ---------------------------------------------------------------------------
215//  Token: setter methods
216// ---------------------------------------------------------------------------
217inline void Token::addChild(Token* const, TokenFactory* const) {
218
219    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
220}
221
222// ---------------------------------------------------------------------------
223//  Token: Range manipulation methods
224// ---------------------------------------------------------------------------
225inline void Token::addRange(const XMLInt32, const XMLInt32) {
226
227    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
228}
229
230inline void Token::mergeRanges(const Token *const) {
231
232    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
233}
234
235inline void Token::sortRanges() {
236
237    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
238}
239
240inline void Token::compactRanges() {
241
242    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
243}
244
245inline void Token::subtractRanges(RangeToken* const) {
246
247    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
248}
249
250inline void Token::intersectRanges(RangeToken* const) {
251
252    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Regex_NotSupported, fMemoryManager);
253}
254
255XERCES_CPP_NAMESPACE_END
256
257#endif
258
259/**
260  * End of file Token.hpp
261  */
262
Note: See TracBrowser for help on using the repository browser.