source: trunk/VUT/GtpVisibilityPreprocessor/support/xercesc/framework/psvi/XSTypeDefinition.hpp @ 188

Revision 188, 9.5 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) 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) 1999, 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 * $Log: XSTypeDefinition.hpp,v $
59 * Revision 1.8  2003/12/01 23:23:26  neilg
60 * fix for bug 25118; thanks to Jeroen Witmond
61 *
62 * Revision 1.7  2003/11/25 18:08:31  knoaman
63 * Misc. PSVI updates. Thanks to David Cargill.
64 *
65 * Revision 1.6  2003/11/21 17:34:04  knoaman
66 * PSVI update
67 *
68 * Revision 1.5  2003/11/15 21:19:01  neilg
69 * fixes for compilation under gcc
70 *
71 * Revision 1.4  2003/11/14 22:47:53  neilg
72 * fix bogus log message from previous commit...
73 *
74 * Revision 1.3  2003/11/14 22:33:30  neilg
75 * Second phase of schema component model implementation. 
76 * Implement XSModel, XSNamespaceItem, and the plumbing necessary
77 * to connect them to the other components.
78 * Thanks to David Cargill.
79 *
80 * Revision 1.2  2003/11/06 15:30:04  neilg
81 * first part of PSVI/schema component model implementation, thanks to David Cargill.  This covers setting the PSVIHandler on parser objects, as well as implementing XSNotation, XSSimpleTypeDefinition, XSIDCDefinition, and most of XSWildcard, XSComplexTypeDefinition, XSElementDeclaration, XSAttributeDeclaration and XSAttributeUse.
82 *
83 * Revision 1.1  2003/09/16 14:33:36  neilg
84 * PSVI/schema component model classes, with Makefile/configuration changes necessary to build them
85 *
86 */
87
88#if !defined(XSTYPEDEFINITION_HPP)
89#define XSTYPEDEFINITION_HPP
90
91#include <xercesc/framework/psvi/XSObject.hpp>
92
93XERCES_CPP_NAMESPACE_BEGIN
94
95// forward declarations
96class XSNamespaceItem;
97
98/**
99 * This class represents a complexType or simpleType definition.
100 * This is *always* owned by the validator /parser object from which
101 * it is obtained. 
102 *
103 */
104
105class XMLPARSER_EXPORT XSTypeDefinition : public XSObject
106{
107public:
108
109    enum TYPE_CATEGORY {
110        /**
111        * This constant value signifies a complex type.
112        */
113        COMPLEX_TYPE              = 15,
114            /**
115             * This constant value signifies a simple type.
116             */
117            SIMPLE_TYPE               = 16
118    };
119
120    //  Constructors and Destructor
121    // -----------------------------------------------------------------------
122    /** @name Constructors */
123    //@{
124
125    /**
126      * The default constructor
127      *
128      * @param  typeCategory
129      * @param  xsBaseType
130      * @param  xsModel
131      * @param  manager     The configurable memory manager
132      */
133    XSTypeDefinition
134    (
135        TYPE_CATEGORY             typeCategory
136        , XSTypeDefinition* const xsBaseType
137        , XSModel* const          xsModel
138        , MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
139    );
140
141    //@};
142
143    /** @name Destructor */
144    //@{
145    virtual ~XSTypeDefinition();
146    //@}
147
148    //---------------------
149    /** @name overloaded XSObject methods */
150    //@{
151
152    /**
153     * The name of type <code>NCName</code> of this declaration as defined in
154     * XML Namespaces.
155     */
156    virtual const XMLCh* getName() = 0;
157
158    /**
159     *  The [target namespace] of this object, or <code>null</code> if it is
160     * unspecified.
161     */
162    virtual const XMLCh* getNamespace() = 0;
163
164    /**
165     * A namespace schema information item corresponding to the target
166     * namespace of the component, if it's globally declared; or null
167     * otherwise.
168     */
169    virtual XSNamespaceItem *getNamespaceItem() = 0;
170
171    //@}
172
173    //---------------------
174    /** @name XSTypeDefinition methods */
175
176    //@{
177
178    /**
179     * Return whether this type definition is a simple type or complex type.
180     */
181    TYPE_CATEGORY getTypeCategory() const;
182
183    /**
184     * {base type definition}: either a simple type definition or a complex
185     * type definition.
186     */
187    virtual XSTypeDefinition *getBaseType() = 0;
188
189    /**
190     * {final}. For complex type definition it is a subset of {extension,
191     * restriction}. For simple type definition it is a subset of
192     * {extension, list, restriction, union}.
193     * @param toTest       Extension, restriction, list, union constants
194     *   (defined in <code>XSObject</code>).
195     * @return True if toTest is in the final set, otherwise false.
196     */
197    bool isFinal(short toTest);
198
199    /**
200     * For complex types the returned value is a bit combination of the subset
201     * of {<code>DERIVATION_EXTENSION, DERIVATION_RESTRICTION</code>}
202     * corresponding to <code>final</code> set of this type or
203     * <code>DERIVATION_NONE</code>. For simple types the returned value is
204     * a bit combination of the subset of {
205     * <code>DERIVATION_RESTRICTION, DERIVATION_EXTENSION, DERIVATION_UNION, DERIVATION_LIST</code>
206     * } corresponding to <code>final</code> set of this type or
207     * <code>DERIVATION_NONE</code>.
208     */
209    short getFinal() const;
210
211    /**
212     *  A boolean that specifies if the type definition is
213     * anonymous. Convenience attribute.
214     */
215    virtual bool getAnonymous() const = 0;
216
217    /**
218     * Convenience method: check if this type is derived from the given
219     * <code>ancestorType</code>.
220     * @param ancestorType  An ancestor type definition.
221     * @return  Return true if this type is derived from
222     *   <code>ancestorType</code>.
223     */
224    virtual bool derivedFromType(const XSTypeDefinition* const ancestorType) = 0;
225
226    /**
227     * Convenience method: check if this type is derived from the given
228     * ancestor type.
229     * @param typeNamespace  An ancestor type namespace.
230     * @param name  An ancestor type name.
231     * @return  Return true if this type is derived from
232     *   the ancestor defined by <code>typeNamespace</code> and <code>name</code>.
233     */
234    bool derivedFrom(const XMLCh* typeNamespace,
235                               const XMLCh* name);
236
237    //@}
238
239    //----------------------------------
240    /** methods needed by implementation */
241
242    //@{
243
244    //@}
245private:
246
247    // -----------------------------------------------------------------------
248    //  Unimplemented constructors and operators
249    // -----------------------------------------------------------------------
250    XSTypeDefinition(const XSTypeDefinition&);
251    XSTypeDefinition & operator=(const XSTypeDefinition &);
252
253protected:
254
255    // -----------------------------------------------------------------------
256    //  data members
257    // -----------------------------------------------------------------------
258    // fTypeCategory
259    //  whether this is a simpleType or complexType
260    // fFinal
261    //  the final properties which is set by the derived class.
262    TYPE_CATEGORY     fTypeCategory;
263    short             fFinal;
264    XSTypeDefinition* fBaseType; // owned by XSModel
265};
266
267inline XSTypeDefinition::TYPE_CATEGORY XSTypeDefinition::getTypeCategory() const
268{
269    return fTypeCategory;
270}
271
272inline short XSTypeDefinition::getFinal() const
273{
274    return fFinal;
275}
276
277
278XERCES_CPP_NAMESPACE_END
279
280#endif
Note: See TracBrowser for help on using the repository browser.