Separate imp+rep from public interfaces for some clases, Routers,
[metaproxy-moved-to-github.git] / src / router_chain.cpp
1 /* $Id: router_chain.cpp,v 1.2 2005-11-10 23:10:42 adam Exp $
2    Copyright (c) 2005, Index Data.
3    
4    %LICENSE%
5 */
6
7 #include "router_chain.hpp"
8
9 #include <list>
10
11 namespace yp2 
12 {
13     class RouterChain::Rep {
14         friend class RouterChain;
15         std::list<const filter::Base *> m_filter_list;
16     };
17 };
18
19 yp2::RouterChain::RouterChain() : m_p(new yp2::RouterChain::Rep)
20 {
21 }
22
23 yp2::RouterChain::~RouterChain()
24 {
25 }
26
27 const yp2::filter::Base * yp2::RouterChain::move(const filter::Base *filter,                                   const Package *package) const {
28     std::list<const filter::Base *>::const_iterator it;
29     it = m_p->m_filter_list.begin();
30     if (filter)
31     {
32         for (; it != m_p->m_filter_list.end(); it++)
33             if (*it == filter)
34             {
35                 it++;
36                 break;
37             }
38     }
39     if (it == m_p->m_filter_list.end())
40     {
41         //throw RouterException("no routing rules known");
42         return 0;
43     }
44     return *it;
45 }
46
47 yp2::RouterChain & yp2::RouterChain::append(const filter::Base &filter)
48 {
49     m_p->m_filter_list.push_back(&filter);
50     return *this;
51 }
52
53
54 /*
55  * Local variables:
56  * c-basic-offset: 4
57  * indent-tabs-mode: nil
58  * c-file-style: "stroustrup"
59  * End:
60  * vim: shiftwidth=4 tabstop=8 expandtab
61  */