8#include <botan/filter.h>
9#include <botan/exceptn.h>
32 bool nothing_attached =
true;
33 for(
size_t j = 0; j != total_ports(); ++j)
36 if(m_write_queue.size())
37 m_next[j]->
write(m_write_queue.data(), m_write_queue.size());
38 m_next[j]->write(input, length);
39 nothing_attached =
false;
43 m_write_queue += std::make_pair(input, length);
45 m_write_queue.clear();
54 for(
size_t j = 0; j != total_ports(); ++j)
62void Filter::finish_msg()
65 for(
size_t j = 0; j != total_ports(); ++j)
67 m_next[j]->finish_msg();
73void Filter::attach(Filter* new_filter)
78 while(last->get_next())
79 last = last->get_next();
80 last->m_next[last->current_port()] = new_filter;
87void Filter::set_port(
size_t new_port)
89 if(new_port >= total_ports())
90 throw Invalid_Argument(
"Filter: Invalid port number");
91 m_port_num = new_port;
97Filter* Filter::get_next()
const
99 if(m_port_num < m_next.size())
100 return m_next[m_port_num];
107void Filter::set_next(Filter* filters[],
size_t size)
114 while(size && filters && (filters[size-1] ==
nullptr))
118 m_next.assign(filters, filters + size);
124size_t Filter::total_ports()
const
126 return m_next.size();
virtual void send(const uint8_t in[], size_t length)
virtual void write(const uint8_t input[], size_t length)=0