27#ifndef _H_GRB_IDENTITIES 
   28#define _H_GRB_IDENTITIES 
   53    namespace identities {
 
   56        template< 
typename D >
 
   58            static_assert( std::is_convertible< int, D >::value, 
"Cannot form identity under the requested domain" );
 
   66                return static_cast< D 
>( 0 );
 
   69        template< 
typename K, 
typename V >
 
   70        class zero< std::pair< K, V > > {
 
   72            static constexpr std::pair< K, V > 
value() {
 
   78        template< 
typename D >
 
   80            static_assert( std::is_convertible< int, D >::value, 
"Cannot form identity under the requested domain" );
 
   88                return static_cast< D 
>( 1 );
 
   91        template< 
typename K, 
typename V >
 
   92        class one< std::pair< K, V > > {
 
   94            static constexpr std::pair< K, V > 
value() {
 
  100        template< 
typename D >
 
  102            static_assert( std::is_arithmetic< D >::value, 
"Cannot form identity under the requested domain" );
 
  111                return std::numeric_limits< D >::has_infinity ? std::numeric_limits< D >::infinity() : std::numeric_limits< D >::max();
 
  114        template< 
typename K, 
typename V >
 
  115        class infinity< std::pair< K, V > > {
 
  117            static constexpr std::pair< K, V > 
value() {
 
  123        template< 
typename D >
 
  125            static_assert( std::is_arithmetic< D >::value, 
"Cannot form identity under the requested domain" );
 
  134                return std::numeric_limits< D >::min() == 0 ? 0 : ( std::numeric_limits< D >::has_infinity ? -std::numeric_limits< D >::infinity() : std::numeric_limits< D >::min() );
 
  137        template< 
typename K, 
typename V >
 
  138        class negative_infinity< std::pair< K, V > > {
 
  140            static constexpr std::pair< K, V > 
value() {
 
  150        template< 
typename D >
 
  152            static_assert( std::is_convertible< bool, D >::value, 
"Cannot form identity under the requested domain" );
 
  161                return static_cast< D 
>( false );
 
  164        template< 
typename K, 
typename V >
 
  165        class logical_false< std::pair< K, V > > {
 
  167            static constexpr std::pair< K, V > 
value() {
 
  177        template< 
typename D >
 
  179            static_assert( std::is_convertible< bool, D >::value, 
"Cannot form identity under the requested domain" );
 
  188                return static_cast< D 
>( true );
 
  191        template< 
typename K, 
typename V >
 
  192        class logical_true< std::pair< K, V > > {
 
  194            static constexpr std::pair< K, V > 
value() {
 
Standard identity for the minimum operator.
Definition: identities.hpp:101
 
static constexpr D value()
Definition: identities.hpp:110
 
Standard identitity for the logical or operator.
Definition: identities.hpp:151
 
static const constexpr D value()
Definition: identities.hpp:160
 
Standard identity for the logical AND operator.
Definition: identities.hpp:178
 
static constexpr D value()
Definition: identities.hpp:187
 
Standard identity for the maximum operator.
Definition: identities.hpp:124
 
static constexpr D value()
Definition: identities.hpp:133
 
Standard identity for numerical multiplication.
Definition: identities.hpp:79
 
static constexpr D value()
Definition: identities.hpp:87
 
Standard identity for numerical addition.
Definition: identities.hpp:57
 
static constexpr D value()
Definition: identities.hpp:65
 
The ALP/GraphBLAS namespace.
Definition: graphblas.hpp:452