00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #if !defined(PSVIATTRIBUTEDERIVATION_LIST_HPP)
00022 #define PSVIATTRIBUTEDERIVATION_LIST_HPP
00023 
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 #include <xercesc/framework/psvi/PSVIAttribute.hpp>
00026 #include <xercesc/util/ValueVectorOf.hpp>
00027 
00028 XERCES_CPP_NAMESPACE_BEGIN
00029 
00039 class  PSVIAttributeList : public XMemory
00040 {
00041 public:
00042 
00043     
00044     
00047 
00053     PSVIAttributeList( MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
00054 
00056 
00059     ~PSVIAttributeList();
00061 
00062     
00066 
00067     
00068 
00069 
00070 
00071     unsigned int getLength() const;
00072 
00073     
00074 
00075 
00076 
00077 
00078 
00079 
00080 
00081     PSVIAttribute *getAttributePSVIAtIndex(const unsigned int index);
00082 
00083     
00084 
00085 
00086 
00087 
00088 
00089 
00090 
00091     const XMLCh *getAttributeNameAtIndex(const unsigned int index);
00092 
00093     
00094 
00095 
00096 
00097 
00098 
00099 
00100 
00101     const XMLCh *getAttributeNamespaceAtIndex(const unsigned int index);
00102 
00103     
00104 
00105 
00106 
00107 
00108 
00109 
00110     PSVIAttribute *getAttributePSVIByName(const XMLCh *attrName
00111                     , const XMLCh * attrNamespace);
00112 
00114 
00115     
00119 
00128     PSVIAttribute *getPSVIAttributeToFill(
00129             const XMLCh * attrName
00130             , const XMLCh * attrNS);
00131 
00135     void reset();
00136 
00138 
00139 private:
00140 
00141     
00142     
00143     
00144     PSVIAttributeList(const PSVIAttributeList&);
00145     PSVIAttributeList & operator=(const PSVIAttributeList &);
00146 
00147 
00148     
00149     
00150     
00151     
00152     
00153     
00154     
00155     
00156     
00157     
00158     
00159     
00160     
00161     
00162     
00163     MemoryManager*                  fMemoryManager;    
00164     RefVectorOf<PSVIAttribute>*     fAttrList;
00165     RefArrayVectorOf<XMLCh>*        fAttrNameList;
00166     RefArrayVectorOf<XMLCh>*        fAttrNSList;
00167     unsigned int                    fAttrPos;
00168 };
00169 inline PSVIAttributeList::~PSVIAttributeList() 
00170 {
00171     delete fAttrList;
00172     delete fAttrNameList;
00173     delete fAttrNSList;
00174 }
00175 
00176 inline PSVIAttribute *PSVIAttributeList::getPSVIAttributeToFill(
00177             const XMLCh *attrName
00178             , const XMLCh * attrNS)
00179 {
00180     PSVIAttribute *retAttr = 0;
00181     if(fAttrPos == fAttrList->size())
00182     {
00183         retAttr = new (fMemoryManager)PSVIAttribute(fMemoryManager);
00184         fAttrList->addElement(retAttr);
00185         fAttrNameList->addElement((XMLCh *)attrName);
00186         fAttrNSList->addElement((XMLCh *)attrNS);
00187     }
00188     else
00189     {
00190         retAttr = fAttrList->elementAt(fAttrPos);
00191         fAttrNameList->setElementAt((XMLCh *)attrName, fAttrPos);
00192         fAttrNSList->setElementAt((XMLCh *)attrNS, fAttrPos);
00193     }
00194     fAttrPos++;
00195     return retAttr;
00196 }
00197 
00198 inline void PSVIAttributeList::reset()
00199 {
00200     fAttrPos = 0;
00201 }
00202 
00203 XERCES_CPP_NAMESPACE_END
00204 
00205 #endif