Example #1
0
 T pop() {
     T data;
     if (!m_has_reached_end_of_data) {
         std::future<T> data_future;
         m_queue.wait_and_pop(data_future);
         data = std::move(data_future.get());
         if (at_end_of_data(data)) {
             m_has_reached_end_of_data = true;
         }
     }
     return data;
 }
Example #2
0
                void operator()() {
                    osmium::thread::set_thread_name("_osmium_write");

                    try {
                        while (true) {
                            std::string data = m_queue.pop();
                            if (at_end_of_data(data)) {
                                break;
                            }
                            m_compressor->write(data);
                        }
                        m_compressor->close();
                        m_promise.set_value(true);
                    } catch (...) {
                        m_promise.set_exception(std::current_exception());
                        m_queue.drain();
                    }
                }
Example #3
0
                void run_in_thread() {
                    osmium::thread::set_thread_name("_osmium_read");

                    try {
                        while (!m_done) {
                            std::string data {m_decompressor.read()};
                            if (at_end_of_data(data)) {
                                break;
                            }
                            add_to_queue(m_queue, std::move(data));
                        }

                        m_decompressor.close();
                    } catch (...) {
                        add_to_queue(m_queue, std::current_exception());
                    }

                    add_end_of_data_to_queue(m_queue);
                }