# PSVIAttributeList.hpp

Go to the documentation of this file.

    00001 /*
    00002  * Licensed to the Apache Software Foundation (ASF) under one or more
    00003  * contributor license agreements.  See the NOTICE file distributed with
    00004  * this work for additional information regarding copyright ownership.
    00005  * The ASF licenses this file to You under the Apache License, Version 2.0
    00006  * (the "License"); you may not use this file except in compliance with
    00007  * the License.  You may obtain a copy of the License at
    00008  *
    00009  *      http://www.apache.org/licenses/LICENSE-2.0
    00010  *
    00011  * Unless required by applicable law or agreed to in writing, software
    00012  * distributed under the License is distributed on an "AS IS" BASIS,
    00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    00014  * See the License for the specific language governing permissions and
    00015  * limitations under the License.
    00016  */
    00017
    00018 /*
    00019  * $Id: PSVIAttributeList.hpp 674012 2008-07-04 11:18:21Z borisk $
    00020  */
    00021
    00022 #if !defined(XERCESC_INCLUDE_GUARD_PSVIATTRIBUTE_LIST_HPP)
    00023 #define XERCESC_INCLUDE_GUARD_PSVIATTRIBUTE_LIST_HPP
    00024
    00025 #include <xercesc/util/PlatformUtils.hpp>
    00026 #include <xercesc/framework/psvi/PSVIAttribute.hpp>
    00027 #include <xercesc/util/RefVectorOf.hpp>
    00028
    00029 XERCES_CPP_NAMESPACE_BEGIN
    00030
    00039 class XMLPARSER_EXPORT PSVIAttributeStorage : public XMemory
    00040 {
    00041 public:
    00042     PSVIAttributeStorage() :
    00043         fPSVIAttribute(0)
    00044       , fAttributeName(0)
    00045       , fAttributeNamespace(0)
    00046     {
    00047     }
    00048
    00049     ~PSVIAttributeStorage()
    00050     {
    00051         delete fPSVIAttribute;
    00052     }
    00053
    00054     PSVIAttribute* fPSVIAttribute;
    00055     const XMLCh*   fAttributeName;
    00056     const XMLCh*   fAttributeNamespace;
    00057 };
    00058
    00059 class XMLPARSER_EXPORT PSVIAttributeList : public XMemory
    00060 {
    00061 public:
    00062
    00063     //  Constructors and Destructor
    00064     // -----------------------------------------------------------------------
    00067
    00073     PSVIAttributeList( MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
    00074
    00076
    00079     ~PSVIAttributeList();
    00081
    00082     //---------------------
    00086
    00087     /*
    00088      * Get the number of attributes whose PSVI contributions
    00089      * are contained in this list.
    00090      */
    00091     XMLSize_t getLength() const;
    00092
    00093     /*
    00094      * Get the PSVI contribution of attribute at position i
    00095      * in this list.  Indeces start from 0.
    00096      * @param index index from which the attribute PSVI contribution
    00097      * is to come.
    00098      * @return PSVIAttribute containing the attributes PSVI contributions;
    00099      * null is returned if the index is out of range.
    00100      */
    00101     PSVIAttribute *getAttributePSVIAtIndex(const XMLSize_t index);
    00102
    00103     /*
    00104      * Get local part of attribute name at position index in the list.
    00105      * Indeces start from 0.
    00106      * @param index index from which the attribute name
    00107      * is to come.
    00108      * @return local part of the attribute's name; null is returned if the index
    00109      * is out of range.
    00110      */
    00111     const XMLCh *getAttributeNameAtIndex(const XMLSize_t index);
    00112
    00113     /*
    00114      * Get namespace of attribute at position index in the list.
    00115      * Indeces start from 0.
    00116      * @param index index from which the attribute namespace
    00117      * is to come.
    00118      * @return namespace of the attribute;
    00119      * null is returned if the index is out of range.
    00120      */
    00121     const XMLCh *getAttributeNamespaceAtIndex(const XMLSize_t index);
    00122
    00123     /*
    00124      * Get the PSVI contribution of attribute with given
    00125      * local name and namespace.
    00126      * @param attrName  local part of the attribute's name
    00127      * @param attrNamespace  namespace of the attribute
    00128      * @return null if the attribute PSVI does not exist
    00129      */
    00130     PSVIAttribute *getAttributePSVIByName(const XMLCh *attrName
    00131                     , const XMLCh * attrNamespace);
    00132
    00134
    00135     //----------------------------------
    00139
    00148     PSVIAttribute *getPSVIAttributeToFill(
    00149             const XMLCh * attrName
    00150             , const XMLCh * attrNS);
    00151
    00155     void reset();
    00156
    00158
    00159 private:
    00160
    00161     // -----------------------------------------------------------------------
    00162     //  Unimplemented constructors and operators
    00163     // -----------------------------------------------------------------------
    00164     PSVIAttributeList(const PSVIAttributeList&);
    00165     PSVIAttributeList & operator=(const PSVIAttributeList &);
    00166
    00167
    00168     // -----------------------------------------------------------------------
    00169     //  data members
    00170     // -----------------------------------------------------------------------
    00171     // fMemoryManager
    00172     //  handler to provide dynamically-need memory
    00173     // fAttrList
    00174     //  list of PSVIAttributes contained by this object
    00175     // fAttrPos
    00176     //  current number of initialized PSVIAttributes in fAttrList
    00177     MemoryManager*                      fMemoryManager;
    00178     RefVectorOf<PSVIAttributeStorage>*  fAttrList;
    00179     XMLSize_t                           fAttrPos;
    00180 };
    00181
    00182 inline PSVIAttributeList::~PSVIAttributeList()
    00183 {
    00184     delete fAttrList;
    00185 }
    00186
    00187 inline PSVIAttribute *PSVIAttributeList::getPSVIAttributeToFill(
    00188             const XMLCh *attrName
    00189             , const XMLCh * attrNS)
    00190 {
    00191     PSVIAttributeStorage* storage = 0;
    00192     if(fAttrPos == fAttrList->size())
    00193     {
    00194         storage = new (fMemoryManager) PSVIAttributeStorage();
    00195         storage->fPSVIAttribute = new (fMemoryManager) PSVIAttribute(fMemoryManager);
    00196         fAttrList->addElement(storage);
    00197     }
    00198     else
    00199     {
    00200         storage = fAttrList->elementAt(fAttrPos);
    00201     }
    00202     storage->fAttributeName = attrName;
    00203     storage->fAttributeNamespace = attrNS;
    00204     fAttrPos++;
    00205     return storage->fPSVIAttribute;
    00206 }
    00207
    00208 inline void PSVIAttributeList::reset()
    00209 {
    00210     fAttrPos = 0;
    00211 }
    00212
    00213 XERCES_CPP_NAMESPACE_END
    00214
    00215 #endif