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.
43 lines
1.3 KiB
43 lines
1.3 KiB
/*-----------------------------------------------------------------------------+ |
|
Copyright (c) 2010-2010: Joachim Faulhaber |
|
+------------------------------------------------------------------------------+ |
|
Distributed under the Boost Software License, Version 1.0. |
|
(See accompanying file LICENCE.txt or copy at |
|
http://www.boost.org/LICENSE_1_0.txt) |
|
+-----------------------------------------------------------------------------*/ |
|
#ifndef BOOST_ICL_TYPE_TRAITS_ON_ABSORBTION_HPP_JOFA_100915 |
|
#define BOOST_ICL_TYPE_TRAITS_ON_ABSORBTION_HPP_JOFA_100915 |
|
|
|
namespace boost{ namespace icl |
|
{ |
|
|
|
template<class Type, class Combiner, bool absorbs_identities> |
|
struct on_absorbtion; |
|
|
|
template<class Type, class Combiner> |
|
struct on_absorbtion<Type, Combiner, false> |
|
{ |
|
typedef on_absorbtion type; |
|
typedef typename Type::codomain_type codomain_type; |
|
|
|
static bool is_absorbable(const codomain_type&){ return false; } |
|
}; |
|
|
|
template<class Type, class Combiner> |
|
struct on_absorbtion<Type, Combiner, true> |
|
{ |
|
typedef on_absorbtion type; |
|
typedef typename Type::codomain_type codomain_type; |
|
typedef typename Type::codomain_combine codomain_combine; |
|
|
|
static bool is_absorbable(const codomain_type& co_value) |
|
{ |
|
return co_value == Combiner::identity_element(); |
|
} |
|
}; |
|
|
|
}} // namespace boost icl |
|
|
|
#endif |
|
|
|
|
|
|