File: GrB_Monoid_new.c

package info (click to toggle)
suitesparse 1%3A7.10.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 254,920 kB
  • sloc: ansic: 1,134,743; cpp: 46,133; makefile: 4,875; fortran: 2,087; java: 1,826; sh: 996; ruby: 725; python: 495; asm: 371; sed: 166; awk: 44
file content (57 lines) | stat: -rw-r--r-- 2,672 bytes parent folder | download | duplicates (2)
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
//------------------------------------------------------------------------------
// GrB_Monoid_new:  create a new monoid
//------------------------------------------------------------------------------

// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2025, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

//------------------------------------------------------------------------------

// Create a new monoid with binary operator, z=op(x.y).  The three types of x,
// y, and z must all be the same, and the identity value must also have the
// same type.  No typecasting is done for the identity value.

#include "GB.h"
#include "monoid/GB_Monoid_new.h"

#define GB_MONOID_NEW(prefix,type,T)                                        \
GrB_Info GB_EVAL3 (prefix, _Monoid_new_, T) /* create a new monoid */       \
(                                                                           \
    GrB_Monoid *monoid,             /* handle of monoid to create    */     \
    GrB_BinaryOp op,                /* binary operator of the monoid */     \
    type identity                   /* identity value of the monoid  */     \
)                                                                           \
{                                                                           \
    GB_CHECK_INIT ;                                                         \
    GB_WERK ("GrB_Monoid_new_" GB_STR(T) " (&monoid, op, identity)") ;      \
    type id = identity ;                                                    \
    return (GB_Monoid_new (monoid, op, &id, NULL, GB_ ## T ## _code,        \
        Werk)) ;                                                            \
}

GB_MONOID_NEW (GrB, bool      , BOOL   )
GB_MONOID_NEW (GrB, int8_t    , INT8   )
GB_MONOID_NEW (GrB, uint8_t   , UINT8  )
GB_MONOID_NEW (GrB, int16_t   , INT16  )
GB_MONOID_NEW (GrB, uint16_t  , UINT16 )
GB_MONOID_NEW (GrB, int32_t   , INT32  )
GB_MONOID_NEW (GrB, uint32_t  , UINT32 )
GB_MONOID_NEW (GrB, int64_t   , INT64  )
GB_MONOID_NEW (GrB, uint64_t  , UINT64 )
GB_MONOID_NEW (GrB, float     , FP32   )
GB_MONOID_NEW (GrB, double    , FP64   )
GB_MONOID_NEW (GxB, GxB_FC32_t, FC32   )
GB_MONOID_NEW (GxB, GxB_FC64_t, FC64   )

GrB_Info GrB_Monoid_new_UDT         // create a monoid with a user-defined type
(
    GrB_Monoid *monoid,             // handle of monoid to create
    GrB_BinaryOp op,                // binary operator of the monoid
    void *identity                  // identity value of monoid
)
{ 
    GB_CHECK_INIT ;
    GB_WERK ("GrB_Monoid_new_UDT (&monoid, op, identity)") ;
    return (GB_Monoid_new (monoid, op, identity, NULL, GB_UDT_code, Werk)) ;
}