You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							2.9 KiB
						
					
					
				// | 
						|
// windows/overlapped_ptr.hpp | 
						|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
						|
// | 
						|
// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) | 
						|
// | 
						|
// Distributed under the Boost Software License, Version 1.0. (See accompanying | 
						|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | 
						|
// | 
						|
 | 
						|
#ifndef BOOST_ASIO_WINDOWS_OVERLAPPED_PTR_HPP | 
						|
#define BOOST_ASIO_WINDOWS_OVERLAPPED_PTR_HPP | 
						|
 | 
						|
#if defined(_MSC_VER) && (_MSC_VER >= 1200) | 
						|
# pragma once | 
						|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) | 
						|
 | 
						|
#include <boost/asio/detail/config.hpp> | 
						|
 | 
						|
#if defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) \ | 
						|
  || defined(GENERATING_DOCUMENTATION) | 
						|
 | 
						|
#include <boost/asio/detail/noncopyable.hpp> | 
						|
#include <boost/asio/detail/win_iocp_overlapped_ptr.hpp> | 
						|
#include <boost/asio/io_service.hpp> | 
						|
 | 
						|
#include <boost/asio/detail/push_options.hpp> | 
						|
 | 
						|
namespace boost { | 
						|
namespace asio { | 
						|
namespace windows { | 
						|
 | 
						|
/// Wraps a handler to create an OVERLAPPED object for use with overlapped I/O. | 
						|
/** | 
						|
 * A special-purpose smart pointer used to wrap an application handler so that | 
						|
 * it can be passed as the LPOVERLAPPED argument to overlapped I/O functions. | 
						|
 * | 
						|
 * @par Thread Safety | 
						|
 * @e Distinct @e objects: Safe.@n | 
						|
 * @e Shared @e objects: Unsafe. | 
						|
 */ | 
						|
class overlapped_ptr | 
						|
  : private noncopyable | 
						|
{ | 
						|
public: | 
						|
  /// Construct an empty overlapped_ptr. | 
						|
  overlapped_ptr() | 
						|
    : impl_() | 
						|
  { | 
						|
  } | 
						|
 | 
						|
  /// Construct an overlapped_ptr to contain the specified handler. | 
						|
  template <typename Handler> | 
						|
  explicit overlapped_ptr(boost::asio::io_service& io_service, | 
						|
      BOOST_ASIO_MOVE_ARG(Handler) handler) | 
						|
    : impl_(io_service, BOOST_ASIO_MOVE_CAST(Handler)(handler)) | 
						|
  { | 
						|
  } | 
						|
 | 
						|
  /// Destructor automatically frees the OVERLAPPED object unless released. | 
						|
  ~overlapped_ptr() | 
						|
  { | 
						|
  } | 
						|
 | 
						|
  /// Reset to empty. | 
						|
  void reset() | 
						|
  { | 
						|
    impl_.reset(); | 
						|
  } | 
						|
 | 
						|
  /// Reset to contain the specified handler, freeing any current OVERLAPPED | 
						|
  /// object. | 
						|
  template <typename Handler> | 
						|
  void reset(boost::asio::io_service& io_service, | 
						|
      BOOST_ASIO_MOVE_ARG(Handler) handler) | 
						|
  { | 
						|
    impl_.reset(io_service, BOOST_ASIO_MOVE_CAST(Handler)(handler)); | 
						|
  } | 
						|
 | 
						|
  /// Get the contained OVERLAPPED object. | 
						|
  OVERLAPPED* get() | 
						|
  { | 
						|
    return impl_.get(); | 
						|
  } | 
						|
 | 
						|
  /// Get the contained OVERLAPPED object. | 
						|
  const OVERLAPPED* get() const | 
						|
  { | 
						|
    return impl_.get(); | 
						|
  } | 
						|
 | 
						|
  /// Release ownership of the OVERLAPPED object. | 
						|
  OVERLAPPED* release() | 
						|
  { | 
						|
    return impl_.release(); | 
						|
  } | 
						|
 | 
						|
  /// Post completion notification for overlapped operation. Releases ownership. | 
						|
  void complete(const boost::system::error_code& ec, | 
						|
      std::size_t bytes_transferred) | 
						|
  { | 
						|
    impl_.complete(ec, bytes_transferred); | 
						|
  } | 
						|
 | 
						|
private: | 
						|
  detail::win_iocp_overlapped_ptr impl_; | 
						|
}; | 
						|
 | 
						|
} // namespace windows | 
						|
} // namespace asio | 
						|
} // namespace boost | 
						|
 | 
						|
#include <boost/asio/detail/pop_options.hpp> | 
						|
 | 
						|
#endif // defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) | 
						|
       //   || defined(GENERATING_DOCUMENTATION) | 
						|
 | 
						|
#endif // BOOST_ASIO_WINDOWS_OVERLAPPED_PTR_HPP
 | 
						|
 |