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.
		
		
		
		
		
			
		
			
				
					
					
						
							66 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							66 lines
						
					
					
						
							1.9 KiB
						
					
					
				| /*============================================================================= | |
|     Copyright (c) 2001-2011 Joel de Guzman | |
|     Copyright (c) 2006 Dan Marsden | |
|  | |
|     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) | |
| ==============================================================================*/ | |
| #if !defined(FUSION_VALUE_AT_KEY_05052005_0229) | |
| #define FUSION_VALUE_AT_KEY_05052005_0229 | |
|  | |
| #include <boost/mpl/int.hpp> | |
| #include <boost/fusion/sequence/intrinsic_fwd.hpp> | |
| #include <boost/fusion/iterator/value_of_data.hpp> | |
| #include <boost/fusion/algorithm/query/find.hpp> | |
| #include <boost/fusion/support/tag_of.hpp> | |
|  | |
| namespace boost { namespace fusion | |
| { | |
|     // Special tags: | |
|     struct sequence_facade_tag; | |
|     struct boost_array_tag; // boost::array tag | |
|     struct mpl_sequence_tag; // mpl sequence tag | |
|     struct std_pair_tag; // std::pair tag | |
|  | |
|     namespace extension | |
|     { | |
|         template <typename Tag> | |
|         struct value_at_key_impl | |
|         { | |
|             template <typename Seq, typename Key> | |
|             struct apply | |
|               : result_of::value_of_data< | |
|                     typename result_of::find<Seq, Key>::type | |
|                 > | |
|             {}; | |
|         }; | |
| 
 | |
|         template <> | |
|         struct value_at_key_impl<sequence_facade_tag> | |
|         { | |
|             template <typename Sequence, typename Key> | |
|             struct apply : Sequence::template value_at_key<Sequence, Key> {}; | |
|         }; | |
| 
 | |
|         template <> | |
|         struct value_at_key_impl<boost_array_tag>; | |
| 
 | |
|         template <> | |
|         struct value_at_key_impl<mpl_sequence_tag>; | |
| 
 | |
|         template <> | |
|         struct value_at_key_impl<std_pair_tag>; | |
|     } | |
|      | |
|     namespace result_of | |
|     { | |
|         template <typename Sequence, typename N> | |
|         struct value_at_key | |
|             : extension::value_at_key_impl<typename detail::tag_of<Sequence>::type>:: | |
|                 template apply<Sequence, N> | |
|         {}; | |
|     } | |
| }} | |
| 
 | |
| #endif | |
| 
 | |
| 
 |