112 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /////////////////////////////////////////////////////////////////////////////// | ||
|  | /// \file integral_c.hpp | ||
|  | /// Contains definition of the integral_c transform and friends. | ||
|  | // | ||
|  | //  Copyright 2011 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_INTEGRAL_C_HPP_EAN_04_28_2011 | ||
|  | #define BOOST_PROTO_TRANSFORM_INTEGRAL_C_HPP_EAN_04_28_2011 | ||
|  | 
 | ||
|  | #include <boost/proto/proto_fwd.hpp> | ||
|  | #include <boost/proto/transform/impl.hpp> | ||
|  | 
 | ||
|  | namespace boost { namespace proto | ||
|  | { | ||
|  | 
 | ||
|  |     /// \brief A PrimitiveTransform that returns a specified | ||
|  |     /// integral constant | ||
|  |     /// | ||
|  |     template<typename T, T I> | ||
|  |     struct integral_c : transform<integral_c<T, I> > | ||
|  |     { | ||
|  |         template<typename Expr, typename State, typename Data> | ||
|  |         struct impl : transform_impl<Expr, State, Data> | ||
|  |         { | ||
|  |             typedef T result_type; | ||
|  | 
 | ||
|  |             /// \return \c I | ||
|  |             /// \throw nothrow | ||
|  |             T operator()( | ||
|  |                 typename impl::expr_param | ||
|  |               , typename impl::state_param | ||
|  |               , typename impl::data_param | ||
|  |             ) const | ||
|  |             { | ||
|  |                 return I; | ||
|  |             } | ||
|  |         }; | ||
|  |     }; | ||
|  | 
 | ||
|  |     /// \brief A PrimitiveTransform that returns a specified | ||
|  |     /// char | ||
|  |     /// | ||
|  |     template<char I> | ||
|  |     struct char_ | ||
|  |       : integral_c<char, I> | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// \brief A PrimitiveTransform that returns a specified | ||
|  |     /// int | ||
|  |     /// | ||
|  |     template<int I> | ||
|  |     struct int_ | ||
|  |       : integral_c<int, I> | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// \brief A PrimitiveTransform that returns a specified | ||
|  |     /// long | ||
|  |     /// | ||
|  |     template<long I> | ||
|  |     struct long_ | ||
|  |       : integral_c<long, I> | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// \brief A PrimitiveTransform that returns a specified | ||
|  |     /// std::size_t | ||
|  |     /// | ||
|  |     template<std::size_t I> | ||
|  |     struct size_t | ||
|  |       : integral_c<std::size_t, I> | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// INTERNAL ONLY | ||
|  |     /// | ||
|  |     template<typename T, T I> | ||
|  |     struct is_callable<integral_c<T, I> > | ||
|  |       : mpl::true_ | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// INTERNAL ONLY | ||
|  |     /// | ||
|  |     template<char I> | ||
|  |     struct is_callable<char_<I> > | ||
|  |       : mpl::true_ | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// INTERNAL ONLY | ||
|  |     /// | ||
|  |     template<int I> | ||
|  |     struct is_callable<int_<I> > | ||
|  |       : mpl::true_ | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// INTERNAL ONLY | ||
|  |     /// | ||
|  |     template<long I> | ||
|  |     struct is_callable<long_<I> > | ||
|  |       : mpl::true_ | ||
|  |     {}; | ||
|  | 
 | ||
|  |     /// INTERNAL ONLY | ||
|  |     /// | ||
|  |     template<std::size_t I> | ||
|  |     struct is_callable<size_t<I> > | ||
|  |       : mpl::true_ | ||
|  |     {}; | ||
|  | 
 | ||
|  | }} | ||
|  | 
 | ||
|  | #endif |