27 #ifndef SLAVE_THREAD_HPP
28 #define SLAVE_THREAD_HPP
30 #include "../my_config.h"
32 #if HAVE_LIBTHREADAR_LIBTHREADAR_HPP
33 #include <libthreadar/libthreadar.hpp>
45 class slave_thread :
public libthreadar::thread
53 slave_thread(generic_file *x_data,
54 libthreadar::fast_tampon<char> *x_input_data,
55 libthreadar::fast_tampon<char> *x_output_data,
56 libthreadar::fast_tampon<char> *x_input_ctrl,
57 libthreadar::fast_tampon<char> *x_output_ctrl);
58 slave_thread(
const slave_thread & ref) =
delete;
59 slave_thread(slave_thread && ref) noexcept =
delete;
60 slave_thread & operator = (
const slave_thread & ref) =
delete;
61 slave_thread & operator = (slave_thread && ref) noexcept =
delete;
62 ~slave_thread() noexcept {};
65 bool wake_me_up()
const {
if(wake_me) { const_cast<slave_thread *>(
this)->wake_me =
false;
return true; }
else return false; };
68 virtual void inherited_run()
override;
72 libthreadar::fast_tampon<char> *input_data;
73 libthreadar::fast_tampon<char> *output_data;
74 libthreadar::fast_tampon<char> *input_ctrl;
75 libthreadar::fast_tampon<char> *output_ctrl;
77 messaging_encode answer;
78 messaging_decode order;
82 char data_header_completed;
84 bool endless_read_ahead;
85 infinint to_send_ahead;
91 void set_header_vars();
94 bool pending_order() {
return input_ctrl->is_not_empty(); };
95 bool pending_input_data() {
return input_data->is_not_empty(); };
96 void treat_input_data();
97 void ask_to_wake_me_up();
106 U_I send_data_block(U_I size,
bool & eof);