00001 #ifndef OPENTISSUE_CORE_MATH_INTERVAL_BOOST_INTERVAL_TYPE_TRAITS_H 00002 #define OPENTISSUE_CORE_MATH_INTERVAL_BOOST_INTERVAL_TYPE_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 #include <OpenTissue/configuration.h> 00011 00012 #include <OpenTissue/core/math/interval/io/boost_interval_io.h> 00013 #include <OpenTissue/core/math/interval/interval_vector.h> 00014 #include <OpenTissue/core/math/interval/interval_matrix.h> 00015 00016 #include <boost/numeric/interval.hpp> 00017 00018 namespace OpenTissue 00019 { 00020 namespace math 00021 { 00022 namespace interval 00023 { 00024 00094 template<typename T> 00095 class BoostIntervalTypeTraits 00096 { 00097 protected: 00098 00099 template<typename T2> 00100 struct raw_checking : public boost::numeric::interval_lib::checking_base<T2> 00101 { 00102 static bool is_nan(const T2&) { return false; } 00103 static bool is_empty(const T2&, const T2&){ return false; } 00104 }; 00105 00106 typedef raw_checking<T> checking_type; 00107 typedef boost::numeric::interval_lib::save_state_nothing< boost::numeric::interval_lib::rounded_arith_exact<T> > rounding_type; 00108 typedef boost::numeric::interval_lib::policies< rounding_type, checking_type > policy_type; 00109 00110 public: 00111 00112 typedef boost::numeric::interval<T > default_interval_type; 00113 typedef boost::numeric::interval<T, policy_type > interval_type; 00114 00115 }; 00116 00117 00118 } // namespace interval 00119 } // namespace math 00120 } // namespace OpenTissue 00121 00122 // OPENTISSUE_CORE_MATH_INTERVAL_BOOST_INTERVAL_TYPE_TRAITS_H 00123 #endif