8 #include <botan/filter.h>     9 #include <botan/secqueue.h>    10 #include <botan/exceptn.h>    30    bool nothing_attached = 
true;
    31    for(
size_t j = 0; j != total_ports(); ++j)
    34          if(write_queue.
size())
    35             next[j]->
write(&write_queue[0], write_queue.
size());
    36          next[j]->write(input, length);
    37          nothing_attached = 
false;
    41       write_queue += std::make_pair(input, length);
    49 void Filter::new_msg()
    52    for(
size_t j = 0; j != total_ports(); ++j)
    60 void Filter::finish_msg()
    63    for(
size_t j = 0; j != total_ports(); ++j)
    65          next[j]->finish_msg();
    71 void Filter::attach(
Filter* new_filter)
    76       while(last->get_next())
    77          last = last->get_next();
    78       last->next[last->current_port()] = new_filter;
    85 void Filter::set_port(
size_t new_port)
    87    if(new_port >= total_ports())
    95 Filter* Filter::get_next()
 const    97    if(port_num < next.size())
    98       return next[port_num];
   105 void Filter::set_next(
Filter* filters[], 
size_t size)
   112    while(size && filters && filters[size-1] == 0)
   116       next.assign(filters, filters + size);
   122 size_t Filter::total_ports()
 const virtual void write(const byte input[], size_t length)=0
std::invalid_argument Invalid_Argument
void send(const byte in[], size_t length)