• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • Examples
  • File List
  • File Members

/home/hauberg/Dokumenter/Capture/humim-tracker-0.1/src/OpenTissue/OpenTissue/utility/utility_tag_traits.h

Go to the documentation of this file.
00001 #ifndef OPENTISSUE_UTILITY_UTILITY_TAG_TRAITS_H
00002 #define OPENTISSUE_UTILITY_UTILITY_TAG_TRAITS_H
00003 //
00004 // OpenTissue Template Library
00005 // - A generic toolbox for physics-based modeling and simulation.
00006 // Copyright (C) 2008 Department of Computer Science, University of Copenhagen.
00007 //
00008 // OTTL is licensed under zlib: http://opensource.org/licenses/zlib-license.php
00009 //
00010 
00011 #include <boost/utility.hpp>
00012 
00013 namespace OpenTissue
00014 {
00015   namespace utility
00016   {
00017 
00052     template <typename T> 
00053     struct TagSupportedType
00054     {
00055       typedef void has_tag;   
00056       typedef T tag_type;     
00057       tag_type m_tag;         
00058     };
00059     typedef TagSupportedType<int> default_tag_supported_type;
00060 
00061     template <class T, class Enable = void>
00062     struct tag_traits { static bool const has_tag = false; typedef int tag_type; };
00063 
00064     template <class T>
00065     struct tag_traits<T, typename T::has_tag > { static bool const has_tag = true; typedef typename T::tag_type tag_type; };
00066 
00067     template <class T>
00068     inline bool has_tag(T const & obj, typename boost::disable_if_c< tag_traits<T>::has_tag >::type * dummy = 0) 
00069     { return false; }
00070     template <class T>
00071     inline bool has_tag(T const & obj, typename boost::enable_if_c< tag_traits<T>::has_tag >::type * dummy = 0) 
00072     { return true; }
00073 
00074     template <typename T>
00075     inline typename tag_traits<T>::tag_type tag_value(T const & obj, typename boost::disable_if_c< tag_traits<T>::has_tag >::type * dummy = 0) 
00076     { return 0; }
00077     template <typename T>
00078     inline typename tag_traits<T>::tag_type tag_value(T const & obj, typename boost::enable_if_c< tag_traits<T>::has_tag >::type * dummy = 0) 
00079     { return obj.m_tag; }
00080 
00081     template <class T>
00082     inline void set_tag(T & /* obj */, typename tag_traits<T>::tag_type const & /* tag */, typename boost::disable_if_c< tag_traits<T>::has_tag >::type * dummy = 0) 
00083     { }
00084     template <class T>
00085     inline void set_tag(T & obj, typename tag_traits<T>::tag_type const & tag, typename boost::enable_if_c< tag_traits<T>::has_tag >::type * dummy = 0) 
00086     { obj.m_tag = tag; }
00087 
00088   } //namespace utility
00089 
00090 } //namespace OpenTissue
00091 
00092 // OPENTISSUE_UTILITY_UTILITY_TAG_TRAITS_H
00093 #endif 

Generated on Thu Dec 1 2011 12:53:46 for HUMIM Tracker by  doxygen 1.7.1