This file is indexed.

/usr/include/xalanc/XPath/XalanQName.hpp is in libxalan-c-dev 1.11-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the  "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#if !defined(XALANQNAME_HEADER_GUARD_1357924680)
#define XALANQNAME_HEADER_GUARD_1357924680



// Base header file.  Must be first.
#include <xalanc/XPath/XPathDefinitions.hpp>



#include <xalanc/Include/XalanMap.hpp>
#include <xalanc/Include/XalanDeque.hpp>
#include <xalanc/Include/STLHelper.hpp>



#include <xalanc/XalanDOM/XalanDOMString.hpp>



#include <xalanc/PlatformSupport/DOMStringHelper.hpp>
#include <xalanc/PlatformSupport/PrefixResolver.hpp>



#include <xalanc/XPath/NameSpace.hpp>
#include <xalanc/XPath/XalanXPathException.hpp>



XALAN_CPP_NAMESPACE_BEGIN



class XalanElement;
class XPathEnvSupport;



/**
 * Class to represent a qualified name. The name of an internal XSLT object, 
 * specifically a named template (see [7 Named Templates]), a mode (see [6.7 Modes]), 
 * an attribute set (see [8.1.4 Named Attribute Sets]), a key (see [14.2 Keys]), 
 * a locale (see [14.3 Number Formatting]), a variable or a parameter (see 
 * [12 Variables and Parameters]) is specified as a QName. If it has a prefix, 
 * then the prefix is expanded into a URI reference using the namespace declarations 
 * in effect on the attribute in which the name occurs. The expanded name 
 * consisting of the local part of the name and the possibly null URI reference 
 * is used as the name of the object. The default namespace is not used for 
 * unprefixed names.
 */

class XALAN_XPATH_EXPORT XalanQName
{
public:

    typedef XalanDeque<NameSpace, ConstructWithMemoryManagerTraits<NameSpace> >
                                                            NamespaceVectorType;
    typedef XalanDeque<NamespaceVectorType, ConstructWithMemoryManagerTraits<NamespaceVectorType> >
                                                            NamespacesStackType;

    /**
     * Construct an empty XalanQName.
     *
     */
    explicit
    XalanQName()
    {
    }

    virtual
    ~XalanQName()
    {
    }

    XalanQName(const XalanQName&)
    {
    }

    /**
     * Retrieve the local part of qualified name.
     * 
     * @return local part string
     */
    virtual const XalanDOMString&
    getLocalPart() const = 0;

    /**
     * Retrieve the namespace of qualified name.
     * 
     * @return namespace string
     */
    virtual const XalanDOMString&
    getNamespace() const = 0;

    /**
     * Determine if the qualified name is valid.
     * 
     * @return true if the instance is a valid QName, false if not.
     */
    bool
    isValid() const
    {
        return isValidNCName(getLocalPart());
    }

    /**
     * Whether the qualified name is empty.
     * 
     * @return true if namespace and local part are both empty
     */
    bool
    isEmpty() const
    {
        return getNamespace().empty() && getLocalPart().empty();
    }

    /**
     * Override equals and agree that we're equal if the passed object is a
     * string and it matches the name of the arg.
     * 
     * @param theRHS namespace to compare
     * @return true if namespace and local part are both empty
     */
    bool
    equals(const XalanQName&    theRHS) const
    {
        // Note that we do not use our member variables here.  See
        // class QNameReference for details...
        return getLocalPart() == theRHS.getLocalPart() &&
               getNamespace() == theRHS.getNamespace();
    }

    /**
     * Format the QName using the notation "{namespace-uri}local-part" or
     * "local-part" if the namespace URI is empty.  The result is appended
     * to the provided string.
     * 
     * @param theString The string to format with the
     * @return A reference to the parameter.
     */
    XalanDOMString&
    format(XalanDOMString&  theString) const;

    size_t
    hash() const
    {
        return getLocalPart().hash() % (getNamespace().hash() + 1);
    }

    class XALAN_XPATH_EXPORT PrefixResolverProxy : public PrefixResolver
    {
    public:

        /**
         * Construct a PrefixResolver from a NamespacesStackType
         * instance.
         *
         * @param theStack The stack to use for prefix resolution
         * @param theURI The namespace URI of the resolver, if any.  Only a reference is kept, so this cannot be a temporary
         * @return pointer to the string value if found, otherwise 0.
         */
        PrefixResolverProxy(
                const NamespacesStackType&  theStack,
                const XalanDOMString&       theURI);

        virtual
        ~PrefixResolverProxy();

        virtual const XalanDOMString*
        getNamespaceForPrefix(const XalanDOMString&     prefix) const;

        virtual const XalanDOMString&
        getURI() const;

    private:

        const NamespacesStackType&  m_stack;

        const XalanDOMString&       m_uri;
    };

    /**
     * Get the namespace for a prefix by searching a vector of namespaces.
     *
     * @param namespaces vector of namespaces to search
     * @param prefix     namespace prefix to find
     * @return pointer to the string value if found, otherwise null.
     */
    static const XalanDOMString*
    getNamespaceForPrefix(
            const NamespaceVectorType&  namespaces,
            const XalanDOMString&       prefix);

    /**
     * Get the namespace for a prefix by searching a stack of namespace
     * vectors.
     *
     * @param nsStack stack of namespace vectors to search
     * @param prefix  namespace prefix to find
     * @return pointer to the string value if found, otherwise null.
     */
    static const XalanDOMString*
    getNamespaceForPrefix(
            const NamespacesStackType&  nsStack,
            const XalanDOMString&       prefix);

    static const XalanDOMString*
    getNamespaceForPrefix(
            const NamespacesStackType&  nsStack,
            const XalanDOMChar*         prefix);

    /**
     * Get the namespace for a prefix by searching a range of iterators.
     * The search is done in reverse, from the end of the range to the
     * beginning.
     *
     * @param theBegin The beginning iterator for the range
     * @param theBegin The ending iterator for the range
     * @param prefix  namespace prefix to find
     * @return pointer to the string value if found, otherwise null.
     */
    static const XalanDOMString*
    getNamespaceForPrefix(
            NamespacesStackType::const_iterator     theBegin,
            NamespacesStackType::const_iterator     theEnd,
            const XalanDOMString&                   prefix);

    /**
     * Get the prefix for a namespace by searching a vector of namespaces.
     *
     * @param namespaces vector of namespaces to search
     * @param uri        URI string for namespace to find
     * @param reverse    true to search vector from last to first, default true
     * @return pointer to the string value if found, otherwise null.
     */
    static const XalanDOMString*
    getPrefixForNamespace(
            const NamespaceVectorType&  namespaces,
            const XalanDOMString&       uri);

    static const XalanDOMString*
    getNamespaceForPrefix(
            const NamespaceVectorType&  namespaces,
            const XalanDOMChar*         prefix);

    /**
     * Get the prefix for a namespace by searching a stack of namespace
     * vectors.
     *
     * @param nsStack stack of namespace vectors to search
     * @param uri     URI string for namespace to find
     * @return pointer to the string value if found, otherwise null.
     */
    static const XalanDOMString*
    getPrefixForNamespace(
            const NamespacesStackType&  nsStack,
            const XalanDOMString&       uri);

    /**
     * Get the prefix for a namespace by searching a range of iterators.
     * The search is done in reverse, from the end of the range to the
     * beginning.
     *
     * @param theBegin The beginning iterator for the range to search
     * @param theBegin The ending iterator for the range to search
     * @param uri     URI string for namespace to find
     * @return pointer to the string value if found, otherwise null.
     */
    static const XalanDOMString*
    getPrefixForNamespace(
            NamespacesStackType::const_iterator     theBegin,
            NamespacesStackType::const_iterator     theEnd,
            const XalanDOMString&                   uri);

    static const XalanDOMString*
    getNamespaceForPrefix(
            NamespacesStackType::const_iterator     theBegin,
            NamespacesStackType::const_iterator     theEnd,
            const XalanDOMChar*                     prefix);
    /**
     * Determine if the string supplied satisfies the grammar for
     * an XML NCName.
     *
     * @param theNCName The string to check
     * @return bool true if the string is a valid NCName, false if not.
     */
    static bool
    isValidNCName(const XalanDOMString&     theNCName);

    /**
     * Determine if the string supplied satisfies the grammar for
     * an XML NCName.
     *
     * @param theNCName The string to check
     * @param theLength The length of the string
     * @return bool true if the string is a valid NCName, false if not
     */
    static bool
    isValidNCName(
            const XalanDOMChar*         theNCName,
            XalanDOMString::size_type   theLength = XalanDOMString::npos);

    /**
     * Determine if the string supplied satisfies the grammar for
     * an XML QName.  Note that this function does not determine
     * if any supplied prefix is bound to a namespace URI
     *
     * @param theQName The string to check
     * @return bool true if the string is a valid QName, false if not
     */
    static bool
    isValidQName(const XalanDOMString&  theQName);

    /**
     * Determine if the string supplied satisfies the grammar for
     * an XML QName.  Note that this function does not determine
     * if any supplied prefix is bound to a namespace URI
     *
     * @param theQName The string to check
     * @param theLength The length of the string
     * @return bool true if the string is a valid QName, false if not
     */
    static bool
    isValidQName(
            const XalanDOMChar*         theQName,
            XalanDOMString::size_type   theLength = XalanDOMString::npos);

    class InvalidQNameException : public XalanXPathException
    {
    public:

        /**
         * Constructor
         * 
         * @param theQName The QName string that is not valid.
         * @param theQNameLength The length of the string.
         * @param theResult A temporary string for loading the error message.
         */
        InvalidQNameException(
                const XalanDOMChar*         theQName,
                XalanDOMString::size_type   theQNameLength,
                XalanDOMString&             theResult,
                const Locator*              theLocator);

        /**
         * Constructor
         * 
         * @param theMessage The message for the exception
         * @param theManager The MemoryManager instance to use when constructing the exception
         */
        InvalidQNameException(
                const XalanDOMString&   theMessage,
                MemoryManager&          theManager,
                const Locator*          theLocator);

        InvalidQNameException(const InvalidQNameException&  other);

        virtual
        ~InvalidQNameException();

        virtual const XalanDOMChar*
        getType() const;

    private:

        static const XalanDOMString&
        format(
                const XalanDOMChar*         theQName,
                XalanDOMString::size_type   theQNameLength,
                XalanDOMString&             theResult);
    };

protected:

    static const XalanDOMString     s_emptyString;
};


inline bool
operator==(
            const XalanQName&   theLHS,
            const XalanQName&   theRHS)
{
    return theLHS.equals(theRHS);
}



inline bool
operator!=(
            const XalanQName&   theLHS,
            const XalanQName&   theRHS)
{
    return !(theLHS == theRHS);
}



inline bool
operator<(
            const XalanQName&   theLHS,
            const XalanQName&   theRHS)
{
    if (theLHS.getNamespace() < theRHS.getNamespace())
    {
        return true;
    }
    else if (equals(theLHS.getNamespace(), theRHS.getNamespace()))
    {
        return theLHS.getLocalPart() < theRHS.getLocalPart();
    }
    else
    {
        return false;
    }
}

template<>
struct XalanMapKeyTraits<XalanQName>
{
    typedef XalanHashMemberReference<XalanQName>        Hasher;
    typedef XALAN_STD_QUALIFIER equal_to<XalanQName>    Comparator;
};

template<>
struct XalanMapKeyTraits<const XalanQName*>
{
    typedef XalanHashMemberPointer<XalanQName>      Hasher;
    typedef pointer_equal<XalanQName>               Comparator;
};


XALAN_CPP_NAMESPACE_END



#endif  // XALANQNAME_HEADER_GUARD_1357924680