+ 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 yp2::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 yp2::filter::Base *f = (*m_filter_it).get();
+ m_filter_it++;
+ return f;
+}
+
+yp2::RoutePos *yp2::RouterFleXML::createpos() const
+{
+ yp2::RouterFleXML::Pos *p = new yp2::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;
+}
+
+yp2::RoutePos *yp2::RouterFleXML::Pos::clone()
+{
+ yp2::RouterFleXML::Pos *p = new yp2::RouterFleXML::Pos;
+ p->m_filter_it = m_filter_it;
+ p->m_route_it = m_route_it;
+ p->m_p = m_p;
+ return p;