1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
//------------------------------------------------------------------------------
// GB_enumify_identity: return ecode for identity value of an op of a monoid
//------------------------------------------------------------------------------
// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2021, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
//------------------------------------------------------------------------------
#include "GB.h"
#include "GB_stringify.h"
void GB_enumify_identity
(
// output:
int *ecode, // enumerated identity, 0 to 31
// inputs:
GB_Opcode opcode, // built-in binary opcode of a monoid
GB_Type_code zcode // type code of the operator
)
{
int e = 31 ; // default: use the monoid->identity bytes
switch (opcode)
{
case GB_PLUS_binop_code : e = 0 ; break ; // 0
case GB_TIMES_binop_code : e = 1 ; break ; // 1
case GB_LAND_binop_code :
case GB_EQ_binop_code : // LXNOR
e = (zcode == GB_BOOL_code) ? 2 : (31) ; break ; // true
case GB_LOR_binop_code :
case GB_LXOR_binop_code :
e = (zcode == GB_BOOL_code) ? 3 : (31) ; break ; // false
case GB_MIN_binop_code :
switch (zcode)
{
case GB_BOOL_code : e = 2 ; break ; // true
case GB_INT8_code : e = 4 ; break ; // INT8_MAX
case GB_INT16_code : e = 5 ; break ; // INT16_MAX
case GB_INT32_code : e = 6 ; break ; // INT32_MAX
case GB_INT64_code : e = 7 ; break ; // INT64_MAX
case GB_UINT8_code : e = 8 ; break ; // UINT8_MAX
case GB_UINT16_code : e = 9 ; break ; // UINT16_MAX
case GB_UINT32_code : e = 10 ; break ; // UINT32_MAX
case GB_UINT64_code : e = 11 ; break ; // UINT64_MAX
case GB_FP32_code :
case GB_FP64_code : e = 12 ; break ; // INFINITY
default: ;
}
break ;
case GB_MAX_binop_code :
switch (zcode)
{
case GB_BOOL_code : e = 3 ; break ; // false
case GB_INT8_code : e = 13 ; break ; // INT8_MIN
case GB_INT16_code : e = 14 ; break ; // INT16_MIN
case GB_INT32_code : e = 15 ; break ; // INT32_MIN
case GB_INT64_code : e = 16 ; break ; // INT64_MIN
case GB_UINT8_code :
case GB_UINT16_code :
case GB_UINT32_code :
case GB_UINT64_code : e = 0 ; break ; // 0
case GB_FP32_code :
case GB_FP64_code : e = 17 ; break ; // -INFINITY
default: ;
}
break ;
case GB_ANY_binop_code : e = 18 ; break ; // 0, for ANY op only
case GB_BOR_binop_code :
case GB_BXOR_binop_code : e = 0 ; break ; // 0
case GB_BAND_binop_code :
case GB_BXNOR_binop_code :
switch (zcode)
{
case GB_UINT8_code : e = 19 ; break ; // 0xFF
case GB_UINT16_code : e = 20 ; break ; // 0xFFFF
case GB_UINT32_code : e = 21 ; break ; // 0xFFFFFFFF
case GB_UINT64_code : e = 22 ; break ; // 0xFFFFFFFFFFFFFFFF
default: ;
}
break ;
default: ;
}
(*ecode) = e ;
}
|