/* Low Latency IPC Library for high-speed traffic Copyright (C) 2019 Michael Fabian Dirks This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ #pragma once #include #include #include #include #include "datapath.hpp" extern "C" { #include } namespace datapath { namespace windows { class overlapped { std::vector _buffer; OVERLAPPED* _overlapped; HANDLE _handle; std::shared_ptr _data; std::function _callback; public: overlapped(); ~overlapped(); OVERLAPPED* get_overlapped(); HANDLE get_handle(); void set_handle(HANDLE _handle); std::shared_ptr get_data(); void set_data(std::shared_ptr _data); void set_callback(std::function cb); void callback(size_t bytes, void* ptr); void cancel(); bool is_completed(); void reset(); ::datapath::error status(); public: static overlapped* from_overlapped(OVERLAPPED* ptr) { return *reinterpret_cast(reinterpret_cast(ptr) + sizeof(OVERLAPPED)); } }; } // namespace windows } // namespace datapath