You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							467 lines
						
					
					
						
							18 KiB
						
					
					
				
			
		
		
	
	
							467 lines
						
					
					
						
							18 KiB
						
					
					
				|     /////////////////////////////////////////////////////////////////////////////// | |
|     /// \file generate_by_value.hpp | |
|     /// Contains definition of by_value_generator_\<\> class template. | |
|     // | |
|     //  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) | |
|     template<typename Tag , typename Arg0 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list1<Arg0>, 1> | |
|     > | |
|     { | |
|         typedef | |
|             list1<Arg0> | |
|         src_args; | |
|         typedef | |
|             list1< | |
|                 typename uncvref<Arg0 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 1> src_type; | |
|         typedef proto::expr<Tag, dst_args, 1> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list1<Arg0>, 1> | |
|     > | |
|     { | |
|         typedef | |
|             list1<Arg0> | |
|         src_args; | |
|         typedef | |
|             list1< | |
|                 typename uncvref<Arg0 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 1> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 1> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list2<Arg0 , Arg1>, 2> | |
|     > | |
|     { | |
|         typedef | |
|             list2<Arg0 , Arg1> | |
|         src_args; | |
|         typedef | |
|             list2< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 2> src_type; | |
|         typedef proto::expr<Tag, dst_args, 2> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list2<Arg0 , Arg1>, 2> | |
|     > | |
|     { | |
|         typedef | |
|             list2<Arg0 , Arg1> | |
|         src_args; | |
|         typedef | |
|             list2< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 2> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 2> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3> | |
|     > | |
|     { | |
|         typedef | |
|             list3<Arg0 , Arg1 , Arg2> | |
|         src_args; | |
|         typedef | |
|             list3< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 3> src_type; | |
|         typedef proto::expr<Tag, dst_args, 3> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3> | |
|     > | |
|     { | |
|         typedef | |
|             list3<Arg0 , Arg1 , Arg2> | |
|         src_args; | |
|         typedef | |
|             list3< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 3> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 3> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4> | |
|     > | |
|     { | |
|         typedef | |
|             list4<Arg0 , Arg1 , Arg2 , Arg3> | |
|         src_args; | |
|         typedef | |
|             list4< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 4> src_type; | |
|         typedef proto::expr<Tag, dst_args, 4> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4> | |
|     > | |
|     { | |
|         typedef | |
|             list4<Arg0 , Arg1 , Arg2 , Arg3> | |
|         src_args; | |
|         typedef | |
|             list4< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 4> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 4> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5> | |
|     > | |
|     { | |
|         typedef | |
|             list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4> | |
|         src_args; | |
|         typedef | |
|             list5< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 5> src_type; | |
|         typedef proto::expr<Tag, dst_args, 5> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5> | |
|     > | |
|     { | |
|         typedef | |
|             list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4> | |
|         src_args; | |
|         typedef | |
|             list5< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 5> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 5> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6> | |
|     > | |
|     { | |
|         typedef | |
|             list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5> | |
|         src_args; | |
|         typedef | |
|             list6< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 6> src_type; | |
|         typedef proto::expr<Tag, dst_args, 6> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6> | |
|     > | |
|     { | |
|         typedef | |
|             list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5> | |
|         src_args; | |
|         typedef | |
|             list6< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 6> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 6> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7> | |
|     > | |
|     { | |
|         typedef | |
|             list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6> | |
|         src_args; | |
|         typedef | |
|             list7< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 7> src_type; | |
|         typedef proto::expr<Tag, dst_args, 7> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7> | |
|     > | |
|     { | |
|         typedef | |
|             list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6> | |
|         src_args; | |
|         typedef | |
|             list7< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 7> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 7> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8> | |
|     > | |
|     { | |
|         typedef | |
|             list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7> | |
|         src_args; | |
|         typedef | |
|             list8< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 8> src_type; | |
|         typedef proto::expr<Tag, dst_args, 8> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8> | |
|     > | |
|     { | |
|         typedef | |
|             list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7> | |
|         src_args; | |
|         typedef | |
|             list8< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 8> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 8> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9> | |
|     > | |
|     { | |
|         typedef | |
|             list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8> | |
|         src_args; | |
|         typedef | |
|             list9< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 9> src_type; | |
|         typedef proto::expr<Tag, dst_args, 9> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9> | |
|     > | |
|     { | |
|         typedef | |
|             list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8> | |
|         src_args; | |
|         typedef | |
|             list9< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 9> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 9> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9 > | |
|     struct by_value_generator_< | |
|         proto::expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10> | |
|     > | |
|     { | |
|         typedef | |
|             list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9> | |
|         src_args; | |
|         typedef | |
|             list10< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type , typename uncvref<Arg9 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::expr<Tag, src_args, 10> src_type; | |
|         typedef proto::expr<Tag, dst_args, 10> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 , e.child9 | |
|             }; | |
|             return that; | |
|         } | |
|     }; | |
|     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9 > | |
|     struct by_value_generator_< | |
|         proto::basic_expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10> | |
|     > | |
|     { | |
|         typedef | |
|             list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9> | |
|         src_args; | |
|         typedef | |
|             list10< | |
|                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type , typename uncvref<Arg9 >::type | |
|             > | |
|         dst_args; | |
|         typedef proto::basic_expr<Tag, src_args, 10> src_type; | |
|         typedef proto::basic_expr<Tag, dst_args, 10> type; | |
|         static type const call(src_type const &e) | |
|         { | |
|             type that = { | |
|                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 , e.child9 | |
|             }; | |
|             return that; | |
|         } | |
|     };
 | |
| 
 |