Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. /// Primary template for future.
  2. template<typename _Res>
  3. class future : public __basic_future<_Res>
  4. {
  5. friend class promise<_Res>;
  6. template<typename> friend class packaged_task;
  7. template<typename _Fn, typename... _Args>
  8. friend future<typename result_of<_Fn(_Args...)>::type>
  9. async(launch, _Fn&&, _Args&&...);
  10.  
  11. typedef __basic_future<_Res> _Base_type;
  12. typedef typename _Base_type::__state_type __state_type;
  13.  
  14. explicit
  15. future(const __state_type& __state) : _Base_type(__state) { }
  16.  
  17. public:
  18. constexpr future() noexcept : _Base_type() { }
  19.  
  20. /// Move constructor
  21. future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
  22.  
  23. // Disable copying
  24. future(const future&) = delete;
  25. future& operator=(const future&) = delete;
  26.  
  27. future& operator=(future&& __fut) noexcept
  28. {
  29. future(std::move(__fut))._M_swap(*this);
  30. return *this;
  31. }
  32.  
  33. /// Retrieving the value
  34. _Res
  35. get()
  36. {
  37. typename _Base_type::_Reset __reset(*this);
  38. return std::move(this->_M_get_result()._M_value());
  39. }
  40.  
  41. shared_future<_Res> share();
  42. };
  43.  
  44. /// Partial specialization for future<R&>
  45. template<typename _Res>
  46. class future<_Res&> : public __basic_future<_Res&>
  47. {
  48. friend class promise<_Res&>;
  49. template<typename> friend class packaged_task;
  50. template<typename _Fn, typename... _Args>
  51. friend future<typename result_of<_Fn(_Args...)>::type>
  52. async(launch, _Fn&&, _Args&&...);
  53.  
  54. typedef __basic_future<_Res&> _Base_type;
  55. typedef typename _Base_type::__state_type __state_type;
  56.  
  57. explicit
  58. future(const __state_type& __state) : _Base_type(__state) { }
  59.  
  60. public:
  61. constexpr future() noexcept : _Base_type() { }
  62.  
  63. /// Move constructor
  64. future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
  65.  
  66. // Disable copying
  67. future(const future&) = delete;
  68. future& operator=(const future&) = delete;
  69.  
  70. future& operator=(future&& __fut) noexcept
  71. {
  72. future(std::move(__fut))._M_swap(*this);
  73. return *this;
  74. }
  75.  
  76. /// Retrieving the value
  77. _Res&
  78. get()
  79. {
  80. typename _Base_type::_Reset __reset(*this);
  81. return this->_M_get_result()._M_get();
  82. }
  83.  
  84. shared_future<_Res&> share();
  85. };
  86.  
  87. /// Explicit specialization for future<void>
  88. template<>
  89. class future<void> : public __basic_future<void>
  90. {
  91. friend class promise<void>;
  92. template<typename> friend class packaged_task;
  93. template<typename _Fn, typename... _Args>
  94. friend future<typename result_of<_Fn(_Args...)>::type>
  95. async(launch, _Fn&&, _Args&&...);
  96.  
  97. typedef __basic_future<void> _Base_type;
  98. typedef typename _Base_type::__state_type __state_type;
  99.  
  100. explicit
  101. future(const __state_type& __state) : _Base_type(__state) { }
  102.  
  103. public:
  104. constexpr future() noexcept : _Base_type() { }
  105.  
  106. /// Move constructor
  107. future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
  108.  
  109. // Disable copying
  110. future(const future&) = delete;
  111. future& operator=(const future&) = delete;
  112.  
  113. future& operator=(future&& __fut) noexcept
  114. {
  115. future(std::move(__fut))._M_swap(*this);
  116. return *this;
  117. }
  118.  
  119. /// Retrieving the value
  120. void
  121. get()
  122. {
  123. typename _Base_type::_Reset __reset(*this);
  124. this->_M_get_result();
  125. }
  126.  
  127. shared_future<void> share();
  128. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement