diff options
author | Kevin Smith <git@kismith.co.uk> | 2013-01-12 18:41:34 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2013-01-13 10:36:26 (GMT) |
commit | f3bc816af1b0d61452de973963e453bf3b3f95a2 (patch) | |
tree | e895f8afa3580e6cff6f5ad2017d45bf147a17c2 /3rdParty/Boost/src/boost/proto/transform/lazy.hpp | |
parent | 188fc285c6555eadd3c9d50ab8a94adcade78d89 (diff) | |
download | swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.zip swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.tar.bz2 |
Adding in the spirit Boost stuff
Change-Id: I4f127ce61667243b64081b0aa309028d5077045f
Diffstat (limited to '3rdParty/Boost/src/boost/proto/transform/lazy.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/proto/transform/lazy.hpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/proto/transform/lazy.hpp b/3rdParty/Boost/src/boost/proto/transform/lazy.hpp new file mode 100644 index 0000000..e2d43ab --- /dev/null +++ b/3rdParty/Boost/src/boost/proto/transform/lazy.hpp @@ -0,0 +1,59 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file lazy.hpp +/// Contains definition of the lazy<> transform. +// +// Copyright 2008 Eric Niebler. 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_PROTO_TRANSFORM_LAZY_HPP_EAN_12_02_2007 +#define BOOST_PROTO_TRANSFORM_LAZY_HPP_EAN_12_02_2007 + +#include <boost/preprocessor/iteration/iterate.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_trailing_params.hpp> +#include <boost/proto/proto_fwd.hpp> +#include <boost/proto/transform/make.hpp> +#include <boost/proto/transform/call.hpp> +#include <boost/proto/transform/impl.hpp> +#include <boost/proto/transform/detail/pack.hpp> + +namespace boost { namespace proto +{ + /// \brief A PrimitiveTransform that uses <tt>make\<\></tt> to build + /// a CallableTransform, and then uses <tt>call\<\></tt> to apply it. + /// + /// <tt>lazy\<\></tt> is useful as a higher-order transform, when the + /// transform to be applied depends on the current state of the + /// transformation. The invocation of the <tt>make\<\></tt> transform + /// evaluates any nested transforms, and the resulting type is treated + /// as a CallableTransform, which is evaluated with <tt>call\<\></tt>. + template<typename Object> + struct lazy : transform<lazy<Object> > + { + template<typename Expr, typename State, typename Data> + struct impl + : call< + typename make<Object>::template impl<Expr, State, Data>::result_type + >::template impl<Expr, State, Data> + {}; + }; + + /// INTERNAL ONLY + template<typename Fun> + struct lazy<detail::msvc_fun_workaround<Fun> > + : lazy<Fun> + {}; + + #include <boost/proto/transform/detail/lazy.hpp> + + /// INTERNAL ONLY + /// + template<typename Object> + struct is_callable<lazy<Object> > + : mpl::true_ + {}; + +}} + +#endif |