// Copyright (c) 2013 by István Váradi // This file is part of VSCPL, a simple cross-platform utility library // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // The views and conclusions contained in the software and documentation are those // of the authors and should not be interpreted as representing official policies, // either expressed or implied, of the FreeBSD Project. #ifndef HU_VARADIISTVAN_SCPL_IO_WIN32_OVERLAPPED_H #define HU_VARADIISTVAN_SCPL_IO_WIN32_OVERLAPPED_H //------------------------------------------------------------------------------ #include "Event.h" //------------------------------------------------------------------------------ namespace hu { namespace varadiistvan { namespace scpl { namespace io { //------------------------------------------------------------------------------ /** * A wrapper for an OVERLAPPED structure which also has an event * associated with it. Instances of this class can be registered into and * unregistered from a Waiter. The destructor removes the object from * the waiter, if it is registered. */ class Overlapped : public Event { private: /** * The Windows OVERLAPPED structure. */ OVERLAPPED overlapped; public: /** * Construct the object. The overlapped structure will be reset to * 0, and the event handle will be set. */ Overlapped(EventFailable& eventFailable); /** * Reset the overlapped structure and set its event handle. The * event is also cleared. */ void reset(); /** * Get the pointer to the overlapped structure. */ OVERLAPPED* get(); /** * Get the pointer to the overlapped structure. */ const OVERLAPPED* get() const; /** * Get the result of the overlapped operation. * * If the operation has completed, the event will be cleared. * * @param size on successful return, it will contain the number of * bytes read or written, which may be 0 for an end-of-file * condition * @param file the handle of the object on which the operation in * question was performed * * @return true if the operation has completed, or false if it has * not, or a failure has occured. */ bool getResult(DWORD& size, HANDLE file); }; //------------------------------------------------------------------------------ // Inline definitions //------------------------------------------------------------------------------ inline Overlapped::Overlapped(EventFailable& eventFailable) : Event(eventFailable) { } //------------------------------------------------------------------------------ inline OVERLAPPED* Overlapped::get() { return &overlapped; } //------------------------------------------------------------------------------ inline const OVERLAPPED* Overlapped::get() const { return &overlapped; } //------------------------------------------------------------------------------ } /* namespace hu::varadiistvan::scpl::io */ } /* namespace hu::varadiistvan::scpl */ } /* namespace hu::varadiistvan */ } /* namespace hu */ //------------------------------------------------------------------------------ #endif // HU_VARADIISTVAN_SCPL_IO_WIN32_OVERLAPPED_H // Local Variables: // mode: C++ // c-basic-offset: 4 // indent-tabs-mode: nil // End: