using namespace xmltooling;\r
using namespace std;\r
\r
-class _release : public unary_function<XMLCh*,void> {\r
-public:\r
- void operator()(pair<QName,XMLCh*> p) const {\r
- XMLString::release(&(p.second));\r
- }\r
-};\r
+set<QName> AttributeExtensibleXMLObject::m_idAttributeSet;\r
\r
AbstractAttributeExtensibleXMLObject::~AbstractAttributeExtensibleXMLObject()\r
{\r
- for_each(m_attributeMap.begin(),m_attributeMap.end(),_release());\r
+ for (map<QName,XMLCh*>::iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++)\r
+ XMLString::release(&(i->second));\r
+}\r
+\r
+AbstractAttributeExtensibleXMLObject::AbstractAttributeExtensibleXMLObject(const AbstractAttributeExtensibleXMLObject& src)\r
+ : AbstractXMLObject(src)\r
+{\r
+ m_idAttribute = m_attributeMap.end();\r
+ for (map<QName,XMLCh*>::const_iterator i=src.m_attributeMap.begin(); i!=src.m_attributeMap.end(); i++) {\r
+ m_attributeMap[i->first] = XMLString::replicate(i->second);\r
+ }\r
+ if (src.m_idAttribute != src.m_attributeMap.end()) {\r
+ m_idAttribute = m_attributeMap.find(src.m_idAttribute->first);\r
+ }\r
}\r
\r
-void AbstractAttributeExtensibleXMLObject::setAttribute(QName& qualifiedName, const XMLCh* value)\r
+void AbstractAttributeExtensibleXMLObject::setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID)\r
{\r
map<QName,XMLCh*>::iterator i=m_attributeMap.find(qualifiedName);\r
if (i!=m_attributeMap.end()) {\r
i->second=XMLString::replicate(value);\r
}\r
else {\r
+ if (m_idAttribute==i)\r
+ m_idAttribute=m_attributeMap.end();\r
m_attributeMap.erase(i);\r
}\r
+ \r
+ if (ID) {\r
+ m_idAttribute=i;\r
+ }\r
}\r
else if (value) {\r
releaseThisandParentDOM();\r
m_attributeMap[qualifiedName]=XMLString::replicate(value);\r
+ if (ID) {\r
+ m_idAttribute = m_attributeMap.find(qualifiedName);\r
+ } \r
}\r
}\r