## Xalan-C++ API Documentation

### The Xalan C++ XSLT Processor Version 1.9

Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

# XalanQName.hpp

Go to the documentation of this file.

    00001 /*
    00002  * Copyright 1999-2004 The Apache Software Foundation.
    00003  *
    00004  * Licensed under the Apache License, Version 2.0 (the "License");
    00005  * you may not use this file except in compliance with the License.
    00006  * You may obtain a copy of the License at
    00007  *
    00008  *     http://www.apache.org/licenses/LICENSE-2.0
    00009  *
    00010  * Unless required by applicable law or agreed to in writing, software
    00011  * distributed under the License is distributed on an "AS IS" BASIS,
    00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    00013  * See the License for the specific language governing permissions and
    00014  * limitations under the License.
    00015  */
    00016 #if !defined(XALANQNAME_HEADER_GUARD_1357924680)
    00017 #define XALANQNAME_HEADER_GUARD_1357924680
    00018
    00019
    00020
    00021 // Base header file.  Must be first.
    00022 #include <xalanc/XPath/XPathDefinitions.hpp>
    00023
    00024
    00025
    00026 #include <xalanc/Include/XalanMap.hpp>
    00027 #include <xalanc/Include/XalanDeque.hpp>
    00028 #include <xalanc/Include/STLHelper.hpp>
    00029
    00030
    00031
    00032 #include <xalanc/XalanDOM/XalanDOMString.hpp>
    00033
    00034
    00035
    00036 #include <xalanc/PlatformSupport/DOMStringHelper.hpp>
    00037 #include <xalanc/PlatformSupport/PrefixResolver.hpp>
    00038 #include <xalanc/PlatformSupport/XSLException.hpp>
    00039
    00040
    00041
    00042 #include <xalanc/XPath/NameSpace.hpp>
    00043
    00044
    00045
    00046 XALAN_CPP_NAMESPACE_BEGIN
    00047
    00048
    00049
    00050 class XalanElement;
    00051 class XPathEnvSupport;
    00052
    00053
    00054
    00068 class XALAN_XPATH_EXPORT XalanQName
    00069 {
    00070 public:
    00071
    00072     typedef XalanDeque<NameSpace, ConstructWithMemoryManagerTraits<NameSpace> >
    00073                                                             NamespaceVectorType;
    00074     typedef XalanDeque<NamespaceVectorType, ConstructWithMemoryManagerTraits<NamespaceVectorType> >
    00075                                                             NamespacesStackType;
    00076
    00081     explicit
    00082     XalanQName()
    00083     {
    00084     }
    00085
    00086     virtual
    00087     ~XalanQName()
    00088     {
    00089     }
    00090
    00096     virtual const XalanDOMString&
    00097     getLocalPart() const = 0;
    00098
    00104     virtual const XalanDOMString&
    00105     getNamespace() const = 0;
    00106
    00112     bool
    00113     isValid() const
    00114     {
    00115         return isValidNCName(getLocalPart());
    00116     }
    00117
    00123     bool
    00124     isEmpty() const
    00125     {
    00126         return getNamespace().empty() && getLocalPart().empty();
    00127     }
    00128
    00136     bool
    00137     equals(const XalanQName&    theRHS) const
    00138     {
    00139         // Note that we do not use our member variables here.  See
    00140         // class QNameReference for details...
    00141         return getLocalPart() == theRHS.getLocalPart() &&
    00142                getNamespace() == theRHS.getNamespace();
    00143     }
    00144
    00145     XalanDOMString::size_type
    00146     hash() const
    00147     {
    00148         return getLocalPart().hash() % (getNamespace().hash() + 1);
    00149     }
    00150
    00151     class XALAN_XPATH_EXPORT PrefixResolverProxy : public PrefixResolver
    00152     {
    00153     public:
    00154
    00163         PrefixResolverProxy(
    00164                 const NamespacesStackType&  theStack,
    00165                 const XalanDOMString&       theURI);
    00166
    00167         virtual
    00168         ~PrefixResolverProxy();
    00169
    00170         virtual const XalanDOMString*
    00171         getNamespaceForPrefix(const XalanDOMString&     prefix) const;
    00172
    00173         virtual const XalanDOMString&
    00174         getURI() const;
    00175
    00176     private:
    00177
    00178         const NamespacesStackType&  m_stack;
    00179
    00180         const XalanDOMString&       m_uri;
    00181     };
    00182
    00190     static const XalanDOMString*
    00191     getNamespaceForPrefix(
    00192             const NamespaceVectorType&  namespaces,
    00193             const XalanDOMString&       prefix);
    00194
    00203     static const XalanDOMString*
    00204     getNamespaceForPrefix(
    00205             const NamespacesStackType&  nsStack,
    00206             const XalanDOMString&       prefix);
    00207
    00208     static const XalanDOMString*
    00209     getNamespaceForPrefix(
    00210             const NamespacesStackType&  nsStack,
    00211             const XalanDOMChar*         prefix);
    00212
    00223     static const XalanDOMString*
    00224     getNamespaceForPrefix(
    00225             NamespacesStackType::const_iterator     theBegin,
    00226             NamespacesStackType::const_iterator     theEnd,
    00227             const XalanDOMString&                   prefix);
    00228
    00237     static const XalanDOMString*
    00238     getPrefixForNamespace(
    00239             const NamespaceVectorType&  namespaces,
    00240             const XalanDOMString&       uri);
    00241
    00242     static const XalanDOMString*
    00243     getNamespaceForPrefix(
    00244             const NamespaceVectorType&  namespaces,
    00245             const XalanDOMChar*         prefix);
    00246
    00255     static const XalanDOMString*
    00256     getPrefixForNamespace(
    00257             const NamespacesStackType&  nsStack,
    00258             const XalanDOMString&       uri);
    00259
    00270     static const XalanDOMString*
    00271     getPrefixForNamespace(
    00272             NamespacesStackType::const_iterator     theBegin,
    00273             NamespacesStackType::const_iterator     theEnd,
    00274             const XalanDOMString&                   uri);
    00275
    00276     static const XalanDOMString*
    00277     getNamespaceForPrefix(
    00278             NamespacesStackType::const_iterator     theBegin,
    00279             NamespacesStackType::const_iterator     theEnd,
    00280             const XalanDOMChar*                     prefix);
    00288     static bool
    00289     isValidNCName(const XalanDOMString&     theNCName);
    00290
    00299     static bool
    00300     isValidNCName(
    00301             const XalanDOMChar*         theNCName,
    00302             XalanDOMString::size_type   theLength = XalanDOMString::npos);
    00303
    00312     static bool
    00313     isValidQName(const XalanDOMString&  theQName);
    00314
    00324     static bool
    00325     isValidQName(
    00326             const XalanDOMChar*         theQName,
    00327             XalanDOMString::size_type   theLength = XalanDOMString::npos);
    00328
    00329     class InvalidQNameException : public XSLException
    00330     {
    00331     public:
    00332
    00343         InvalidQNameException(
    00344                 const XalanDOMChar*         theQName,
    00345                 XalanDOMString::size_type   theQNameLength,
    00346                 const XalanDOMString&       theURI,
    00347                 int                         theLineNumber,
    00348                 int                         theColumnNumber,
    00349                 XalanDOMString&             theResult);
    00350
    00359         InvalidQNameException(
    00360                 const LocatorType&          theLocator,
    00361                 const XalanDOMChar*         theQName,
    00362                 XalanDOMString::size_type   theQNameLength,
    00363                 XalanDOMString&             theResult);
    00364
    00372         InvalidQNameException(
    00373                 const XalanDOMChar*         theQName,
    00374                 XalanDOMString::size_type   theQNameLength,
    00375                 XalanDOMString&             theResult);
    00376
    00377         virtual
    00378         ~InvalidQNameException();
    00379
    00380         virtual const XalanDOMChar*
    00381         getType() const
    00382         {
    00383             return m_type;
    00384         }
    00385
    00386     private:
    00387
    00388         static const XalanDOMChar   m_type[];
    00389
    00390         static const XalanDOMString&
    00391         format(
    00392                 const XalanDOMChar*         theQName,
    00393                 XalanDOMString::size_type   theQNameLength,
    00394                 XalanDOMString&             theResult);
    00395     };
    00396
    00397 protected:
    00398
    00399     static const XalanDOMString     s_emptyString;
    00400 };
    00401
    00402
    00403 inline bool
    00404 operator==(
    00405             const XalanQName&   theLHS,
    00406             const XalanQName&   theRHS)
    00407 {
    00408     return theLHS.equals(theRHS);
    00409 }
    00410
    00411
    00412
    00413 inline bool
    00414 operator!=(
    00415             const XalanQName&   theLHS,
    00416             const XalanQName&   theRHS)
    00417 {
    00418     return !(theLHS == theRHS);
    00419 }
    00420
    00421
    00422
    00423 inline bool
    00424 operator<(
    00425             const XalanQName&   theLHS,
    00426             const XalanQName&   theRHS)
    00427 {
    00428     if (theLHS.getNamespace() < theRHS.getNamespace())
    00429     {
    00430         return true;
    00431     }
    00432     else if (equals(theLHS.getNamespace(), theRHS.getNamespace()))
    00433     {
    00434         return theLHS.getLocalPart() < theRHS.getLocalPart();
    00435     }
    00436     else
    00437     {
    00438         return false;
    00439     }
    00440 }
    00441
    00442 template<>
    00443 struct XalanMapKeyTraits<XalanQName>
    00444 {
    00445     typedef XalanHashMemberReference<XalanQName>        Hasher;
    00446     typedef XALAN_STD_QUALIFIER equal_to<XalanQName>    Comparator;
    00447 };
    00448
    00449 template<>
    00450 struct XalanMapKeyTraits<const XalanQName*>
    00451 {
    00452     typedef XalanHashMemberPointer<XalanQName>      Hasher;
    00453     typedef pointer_equal<XalanQName>               Comparator;
    00454 };
    00455
    00456
    00457 XALAN_CPP_NAMESPACE_END
    00458
    00459
    00460
    00461 #endif  // XALANQNAME_HEADER_GUARD_1357924680

Interpreting class diagrams

Doxygen and GraphViz are used to generate this API documentation from the Xalan-C header files.

Xalan-C++ XSLT Processor Version 1.9 Copyright © 1999-2004 The Apache Software Foundation. All Rights Reserved.