*/\r
\r
/**\r
- * Validator.cpp\r
+ * ValidatorSuite.cpp\r
* \r
- * Rules checking of XMLObjects \r
+ * Groups of rule checkers of XMLObjects based on type or element name. \r
*/\r
\r
#include "internal.h"\r
-#include "validation/Validator.h"\r
+#include "validation/ValidatorSuite.h"\r
#include "util/XMLHelper.h"\r
\r
using namespace xmltooling;\r
using namespace std;\r
\r
-map< QName, vector<Validator*> > Validator::m_map;\r
+namespace {\r
+ class XMLTOOL_DLLLOCAL _clearvector {\r
+ public:\r
+ void operator()(const pair< QName, vector<Validator*> >& p) const {\r
+ for_each(p.second.begin(),p.second.end(),xmltooling::cleanup<Validator>());\r
+ }\r
+ };\r
+}\r
+\r
+void ValidatorSuite::deregisterValidators(const QName& key)\r
+{\r
+ map< QName, vector<Validator*> >::iterator i=m_map.find(key);\r
+ if (i!=m_map.end()) {\r
+ _clearvector f;\r
+ f(*i);\r
+ m_map.erase(i);\r
+ }\r
+}\r
+\r
+void ValidatorSuite::destroyValidators()\r
+{\r
+ for_each(m_map.begin(),m_map.end(),_clearvector());\r
+ m_map.clear();\r
+}\r
\r
-void Validator::checkValidity(const XMLObject* xmlObject)\r
+void ValidatorSuite::validate(const XMLObject* xmlObject) const\r
{\r
if (!xmlObject)\r
return;\r
\r
- map< QName, vector<Validator*> >::iterator i;\r
+ map< QName, vector<Validator*> >::const_iterator i;\r
if (xmlObject->getSchemaType()) {\r
i=m_map.find(*(xmlObject->getSchemaType()));\r
if (i!=m_map.end())\r
for_each(i->second.begin(),i->second.end(),bind2nd(mem_fun<void,Validator,const XMLObject*>(&Validator::validate),xmlObject));\r
\r
const list<XMLObject*>& kids=xmlObject->getOrderedChildren();\r
- for_each(kids.begin(),kids.end(),Validator::checkValidity);\r
-}\r
-\r
-class _clearvector {\r
-public:\r
- void operator()(const pair< QName, vector<Validator*> >& p) const {\r
- for_each(p.second.begin(),p.second.end(),xmltooling::cleanup<Validator>());\r
- }\r
-};\r
-\r
-void Validator::deregisterValidators(const QName& key)\r
-{\r
- map< QName, vector<Validator*> >::iterator i=m_map.find(key);\r
- if (i!=m_map.end()) {\r
- _clearvector f;\r
- f(*i);\r
- m_map.erase(i);\r
- }\r
-}\r
-\r
-void Validator::destroyValidators()\r
-{\r
- for_each(m_map.begin(),m_map.end(),_clearvector());\r
- m_map.clear();\r
+ for (list<XMLObject*>::const_iterator j=kids.begin(); j!=kids.end(); j++)\r
+ validate(*j);\r
}\r