+void FilterConstant::configure(const xmlNode* ptr)
+{
+ m_ptr = ptr;
+
+ BOOST_CHECK_EQUAL (ptr->type, XML_ELEMENT_NODE);
+ BOOST_CHECK_EQUAL(std::string((const char *) ptr->name), "filter");
+
+ const struct _xmlAttr *attr;
+
+ for (attr = ptr->properties; attr; attr = attr->next)
+ {
+ BOOST_CHECK_EQUAL( std::string((const char *)attr->name), "type");
+ const xmlNode *val = attr->children;
+ BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE);
+ BOOST_CHECK_EQUAL(std::string((const char *)val->content), "constant");
+ }
+ const xmlNode *p = ptr->children;
+ for (; p; p = p->next)
+ {
+ if (p->type != XML_ELEMENT_NODE)
+ continue;
+
+ BOOST_CHECK_EQUAL (p->type, XML_ELEMENT_NODE);
+ BOOST_CHECK_EQUAL(std::string((const char *) p->name), "value");
+
+ const xmlNode *val = p->children;
+ BOOST_CHECK(val);
+ if (!val)
+ continue;
+
+ BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE);
+ BOOST_CHECK_EQUAL(std::string((const char *)val->content), "2");
+
+ m_constant = atoi((const char *) val->content);
+ }
+}
+
+bool FilterConstant::parse_xml_text(const xmlNode *xml_ptr, bool &val)
+{
+ std::string v;
+ if (!parse_xml_text(xml_ptr, v))
+ return false;
+ if (v.length() == 1 && v[0] == '1')
+ val = true;
+ else
+ val = false;
+ return true;
+}
+
+bool FilterConstant::parse_xml_text(const xmlNode *xml_ptr, std::string &val)
+{
+ xmlNodePtr ptr = (xmlNodePtr) xml_ptr;
+ bool found = false;
+ std::string v;
+ for(ptr = ptr->children; ptr; ptr = ptr->next)
+ if (ptr->type == XML_TEXT_NODE)
+ {
+ xmlChar *t = ptr->content;
+ if (t)
+ {
+ v += (const char *) t;
+ found = true;
+ }
+ }
+ if (found)
+ val = v;
+ return found;
+}
+
+// This filter dose not have a configure function
+
+class FilterDouble: public mp::filter::Base {