diff options
| author | Remko Tronçon <git@el-tramo.be> | 2012-12-23 13:16:26 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2012-12-23 14:43:26 (GMT) | 
| commit | 491ddd570a752cf9bda85933bed0c6942e39b1f9 (patch) | |
| tree | 10c25c1be8cc08d0497df1dccd56a10fbb30beee /3rdParty/Boost/src/boost/asio/basic_io_object.hpp | |
| parent | da7d7a0ca71b80281aa9ff2526290b61ccb0cc60 (diff) | |
| download | swift-491ddd570a752cf9bda85933bed0c6942e39b1f9.zip swift-491ddd570a752cf9bda85933bed0c6942e39b1f9.tar.bz2  | |
Update Boost to 1.52.0.
Change-Id: I1e56bea2600bf2ed9c5b3aba8c4f9d2a0f350e77
Diffstat (limited to '3rdParty/Boost/src/boost/asio/basic_io_object.hpp')
| -rw-r--r-- | 3rdParty/Boost/src/boost/asio/basic_io_object.hpp | 184 | 
1 files changed, 163 insertions, 21 deletions
diff --git a/3rdParty/Boost/src/boost/asio/basic_io_object.hpp b/3rdParty/Boost/src/boost/asio/basic_io_object.hpp index 8e137e7..0464335 100644 --- a/3rdParty/Boost/src/boost/asio/basic_io_object.hpp +++ b/3rdParty/Boost/src/boost/asio/basic_io_object.hpp @@ -2,7 +2,7 @@  // basic_io_object.hpp  // ~~~~~~~~~~~~~~~~~~~  // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 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) @@ -16,7 +16,6 @@  #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)  #include <boost/asio/detail/config.hpp> -#include <boost/asio/detail/noncopyable.hpp>  #include <boost/asio/io_service.hpp>  #include <boost/asio/detail/push_options.hpp> @@ -24,10 +23,42 @@  namespace boost {  namespace asio { +#if defined(BOOST_ASIO_HAS_MOVE) +namespace detail +{ +  // Type trait used to determine whether a service supports move. +  template <typename IoObjectService> +  class service_has_move +  { +  private: +    typedef IoObjectService service_type; +    typedef typename service_type::implementation_type implementation_type; + +    template <typename T, typename U> +    static auto eval(T* t, U* u) -> decltype(t->move_construct(*u, *u), char()); +    static char (&eval(...))[2]; + +  public: +    static const bool value = +      sizeof(service_has_move::eval( +        static_cast<service_type*>(0), +        static_cast<implementation_type*>(0))) == 1; +  }; +} +#endif // defined(BOOST_ASIO_HAS_MOVE) +  /// Base class for all I/O objects. +/** + * @note All I/O objects are non-copyable. However, when using C++0x, certain + * I/O objects do support move construction and move assignment. + */ +#if !defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)  template <typename IoObjectService> +#else +template <typename IoObjectService, +    bool Movable = detail::service_has_move<IoObjectService>::value> +#endif  class basic_io_object -  : private noncopyable  {  public:    /// The type of the service that will be used to provide I/O operations. @@ -36,20 +67,6 @@ public:    /// The underlying implementation type of I/O object.    typedef typename service_type::implementation_type implementation_type; -  /// (Deprecated: use get_io_service().) Get the io_service associated with -  /// the object. -  /** -   * This function may be used to obtain the io_service object that the I/O -   * object uses to dispatch handlers for asynchronous operations. -   * -   * @return A reference to the io_service object that the I/O object will use -   * to dispatch handlers. Ownership is not transferred to the caller. -   */ -  boost::asio::io_service& io_service() -  { -    return service.get_io_service(); -  } -    /// Get the io_service associated with the object.    /**     * This function may be used to obtain the io_service object that the I/O @@ -67,7 +84,7 @@ protected:    /// Construct a basic_io_object.    /**     * Performs: -   * @code service.construct(implementation); @endcode +   * @code get_service().construct(get_implementation()); @endcode     */    explicit basic_io_object(boost::asio::io_service& io_service)      : service(boost::asio::use_service<IoObjectService>(io_service)) @@ -75,22 +92,147 @@ protected:      service.construct(implementation);    } +#if defined(GENERATING_DOCUMENTATION) +  /// Move-construct a basic_io_object. +  /** +   * Performs: +   * @code get_service().move_construct( +   *     get_implementation(), other.get_implementation()); @endcode +   * +   * @note Available only for services that support movability, +   */ +  basic_io_object(basic_io_object&& other); + +  /// Move-assign a basic_io_object. +  /** +   * Performs: +   * @code get_service().move_assign(get_implementation(), +   *     other.get_service(), other.get_implementation()); @endcode +   * +   * @note Available only for services that support movability, +   */ +  basic_io_object& operator=(basic_io_object&& other); +#endif // defined(GENERATING_DOCUMENTATION) +    /// Protected destructor to prevent deletion through this type.    /**     * Performs: -   * @code service.destroy(implementation); @endcode +   * @code get_service().destroy(get_implementation()); @endcode     */    ~basic_io_object()    {      service.destroy(implementation);    } -  /// The service associated with the I/O object. +  /// Get the service associated with the I/O object. +  service_type& get_service() +  { +    return service; +  } + +  /// Get the service associated with the I/O object. +  const service_type& get_service() const +  { +    return service; +  } + +  /// (Deprecated: Use get_service().) The service associated with the I/O +  /// object. +  /** +   * @note Available only for services that do not support movability. +   */    service_type& service; -  /// The underlying implementation of the I/O object. +  /// Get the underlying implementation of the I/O object. +  implementation_type& get_implementation() +  { +    return implementation; +  } + +  /// Get the underlying implementation of the I/O object. +  const implementation_type& get_implementation() const +  { +    return implementation; +  } + +  /// (Deprecated: Use get_implementation().) The underlying implementation of +  /// the I/O object.    implementation_type implementation; + +private: +  basic_io_object(const basic_io_object&); +  basic_io_object& operator=(const basic_io_object&); +}; + +#if defined(BOOST_ASIO_HAS_MOVE) +// Specialisation for movable objects. +template <typename IoObjectService> +class basic_io_object<IoObjectService, true> +{ +public: +  typedef IoObjectService service_type; +  typedef typename service_type::implementation_type implementation_type; + +  boost::asio::io_service& get_io_service() +  { +    return service_->get_io_service(); +  } + +protected: +  explicit basic_io_object(boost::asio::io_service& io_service) +    : service_(&boost::asio::use_service<IoObjectService>(io_service)) +  { +    service_->construct(implementation); +  } + +  basic_io_object(basic_io_object&& other) +    : service_(&other.get_service()) +  { +    service_->move_construct(implementation, other.implementation); +  } + +  ~basic_io_object() +  { +    service_->destroy(implementation); +  } + +  basic_io_object& operator=(basic_io_object&& other) +  { +    service_->move_assign(implementation, +        *other.service_, other.implementation); +    service_ = other.service_; +    return *this; +  } + +  service_type& get_service() +  { +    return *service_; +  } + +  const service_type& get_service() const +  { +    return *service_; +  } + +  implementation_type& get_implementation() +  { +    return implementation; +  } + +  const implementation_type& get_implementation() const +  { +    return implementation; +  } + +  implementation_type implementation; + +private: +  basic_io_object(const basic_io_object&); +  void operator=(const basic_io_object&); + +  IoObjectService* service_;  }; +#endif // defined(BOOST_ASIO_HAS_MOVE)  } // namespace asio  } // namespace boost  | 
 Swift