• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • Directories
  • File List
  • File Members

meta.hpp

Go to the documentation of this file.
00001 /*
00002   CLAW - a C++ Library Absolutely Wonderful
00003 
00004   CLAW is a free library without any particular aim but being useful to 
00005   anyone.
00006 
00007   Copyright (C) 2005-2008 Julien Jorge
00008 
00009   This library is free software; you can redistribute it and/or
00010   modify it under the terms of the GNU Lesser General Public
00011   License as published by the Free Software Foundation; either
00012   version 2.1 of the License, or (at your option) any later version.
00013 
00014   This library is distributed in the hope that it will be useful,
00015   but WITHOUT ANY WARRANTY; without even the implied warranty of
00016   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017   Lesser General Public License for more details.
00018 
00019   You should have received a copy of the GNU Lesser General Public
00020   License along with this library; if not, write to the Free Software
00021   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00022 
00023   contact: julien_jorge@yahoo.fr
00024 */
00030 #ifndef __CLAW_META_HPP__
00031 #define __CLAW_META_HPP__
00032 
00033 namespace claw
00034 {
00035   namespace meta
00036   {
00047     template<typename T, typename U>
00048     struct same_type
00049     {
00050       enum
00051   {
00052     result = false
00053   };
00054     }; // struct same_type [false]
00055 
00056     template<typename T>
00057     struct same_type<T,T>
00058     {
00059       enum
00060   {
00061     result = true
00062   };
00063     }; // struct same_type [true]
00064 
00068     struct no_type {};
00069 
00087     template<typename Head, typename Queue>
00088     struct type_list
00089     {
00090       typedef Head head_type;
00091       typedef Queue queue_type;
00092     }; // struct type_list
00093 
00106     template<typename T, typename List>
00107     struct type_list_find
00108     {
00109       enum
00110   {
00111     result = same_type<T, typename List::head_type>::result
00112     || type_list_find<T, typename List::queue_type>::result
00113   };
00114     }; // struct type_list_find
00115 
00116     template<typename T>
00117     struct type_list_find<T, no_type>
00118     {
00119       enum
00120   {
00121     result = same_type<T, no_type>::result
00122   };
00123     }; // struct type_list_find
00124 
00131     template<typename List>
00132     struct type_list_is_a_set
00133     {
00134       enum
00135   {
00136     result = !type_list_find<typename List::head_type,
00137                              typename List::queue_type>::result 
00138     && type_list_is_a_set<typename List::queue_type>::result
00139   };
00140     }; // struct type_list_is_a_set
00141 
00142     template<>
00143     struct type_list_is_a_set<no_type>
00144     {
00145       enum
00146   {
00147     result = true
00148   };
00149     }; // struct type_list_is_a_set [no_type]
00150 
00163     template<bool Cond, typename ThenPart, typename ElsePart>
00164     struct if_then_else
00165     {
00166 
00167     }; // struct if_then_else
00168 
00169     template<typename ThenPart, typename ElsePart>
00170     struct if_then_else<true, ThenPart, ElsePart>
00171     {
00172       typedef ThenPart result;
00173     }; // struct if_then_else [true]
00174 
00175     template<typename ThenPart, typename ElsePart>
00176     struct if_then_else<false, ThenPart, ElsePart>
00177     {
00178       typedef ElsePart result;
00179     }; // struct if_then_else [false]
00180 
00181   } // namespace meta
00182 } // namespace claw
00183 
00184 #endif // __CLAW_META_HPP__

Generated on Thu Sep 30 2010 for CLAW Library (a C++ Library Absolutely Wonderful) by  doxygen 1.7.1