+ if (route && *route)
+ {
+ //std::cout << "move to " << route << "\n";
+ m_route_it = m_p->m_routes.find(route);
+ if (m_route_it == m_p->m_routes.end())
+ {
+ std::cout << "no such route " << route << "\n";
+ throw mp::XMLError("bad route " + std::string(route));
+ }
+ m_filter_it = m_route_it->second.m_list.begin();
+ }
+ if (m_filter_it == m_route_it->second.m_list.end())
+ return 0;
+ const mp::filter::Base *f = (*m_filter_it).get();
+ m_filter_it++;
+ return f;
+}
+
+mp::RoutePos *mp::RouterFleXML::createpos() const
+{
+ mp::RouterFleXML::Pos *p = new mp::RouterFleXML::Pos;
+
+ p->m_route_it = m_p->m_routes.find(m_p->m_start_route);
+ if (p->m_route_it == m_p->m_routes.end())
+ {
+ delete p;
+ return 0;
+ }
+ p->m_filter_it = p->m_route_it->second.m_list.begin();
+ p->m_p = m_p.get();
+ return p;
+}
+
+mp::RoutePos *mp::RouterFleXML::Pos::clone()
+{
+ mp::RouterFleXML::Pos *p = new mp::RouterFleXML::Pos;
+ p->m_filter_it = m_filter_it;
+ p->m_route_it = m_route_it;
+ p->m_p = m_p;
+ return p;
+}
+
+mp::RouterFleXML::Pos::~Pos()
+{
+}
+
+
+void mp::RouterFleXML::start()
+{
+ std::map<std::string,RouterFleXML::Route>::iterator route_it;
+
+ route_it = m_p->m_routes.begin();
+ while (route_it != m_p->m_routes.end())
+ {
+ RouterFleXML::Route route = route_it->second;
+
+ std::list<boost::shared_ptr<const mp::filter::Base> >::iterator it;
+
+ for (it = route.m_list.begin(); it != route.m_list.end(); it++)
+ (*it)->start();
+ route_it++;
+ }