BVB Source Codes

mars Show function1.hpp Source code

Return Download mars: download function1.hpp Source code - Download mars Source code - Type:.hpp
  1. // Copyright David Abrahams 2006. Distributed under the Boost
  2. // Software License, Version 1.0. (See accompanying
  3. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #ifndef BOOST_DETAIL_FUNCTION1_DWA200655_HPP
  5. # define BOOST_DETAIL_FUNCTION1_DWA200655_HPP
  6.  
  7. # include <boost/concept_check.hpp>
  8. # include <boost/type_traits/remove_reference.hpp>
  9. # include <boost/type_traits/add_const.hpp>
  10. # include <boost/mpl/apply.hpp>
  11.  
  12. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace detail {
  13.  
  14. // A utility for creating unary function objects that play nicely with
  15. // mars_boost::result_of and that handle the forwarding problem.
  16. //
  17. // mpl::apply<F, A0>::type is expected to be a stateless function
  18. // object that accepts an argument of type A0&.  It is also expected
  19. // to have a nested ::result_type identical to its return type.
  20. template<typename F>
  21. struct function1
  22. {
  23.     template<typename Signature>
  24.     struct result
  25.     {};
  26.  
  27.     template<typename This, typename A0>
  28.     struct result<This(A0)>
  29.     {
  30.         // How adding const to arguments handles rvalues.
  31.         //
  32.         // if A0 is     arg0 is       represents actual argument
  33.         // --------     -------       --------------------------
  34.         // T const &    T const       const T lvalue
  35.         // T &          T             non-const T lvalue
  36.         // T const      T const       const T rvalue
  37.         // T            T const       non-const T rvalue
  38.         typedef typename remove_reference<
  39.             typename add_const< A0 >::type
  40.         >::type arg0;
  41.  
  42.         typedef typename mpl::apply1<F, arg0>::type impl;
  43.         typedef typename impl::result_type type;
  44.     };
  45.  
  46.     // Handles mutable lvalues
  47.     template<typename A0>
  48.     typename result<function1(A0 &)>::type
  49.     operator ()(A0 &a0) const
  50.     {
  51.         typedef typename result<function1(A0 &)>::impl impl;
  52.         typedef typename result<function1(A0 &)>::type type;
  53.         typedef A0 &arg0;
  54.         BOOST_CONCEPT_ASSERT((UnaryFunction<impl, type, arg0>));
  55.         //mars_boost::function_requires<UnaryFunctionConcept<impl, type, arg0> >();
  56.         return impl()(a0);
  57.     }
  58.  
  59.     // Handles const lvalues and all rvalues
  60.     template<typename A0>
  61.     typename result<function1(A0 const &)>::type
  62.     operator ()(A0 const &a0) const
  63.     {
  64.         typedef typename result<function1(A0 const &)>::impl impl;
  65.         typedef typename result<function1(A0 const &)>::type type;
  66.         typedef A0 const &arg0;
  67.         BOOST_CONCEPT_ASSERT((UnaryFunction<impl, type, arg0>));
  68.         //mars_boost::function_requires<UnaryFunctionConcept<impl, type, arg0> >();
  69.         return impl()(a0);
  70.     }
  71. };
  72.  
  73. }} // namespace mars_boost::detail
  74.  
  75. #endif // BOOST_DETAIL_FUNCTION1_DWA200655_HPP
  76.  
downloadfunction1.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top