1 //------------------------------------------------------------------------------
2 // GB_Semiring_new: create a new semiring
3 //------------------------------------------------------------------------------
4
5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6 // SPDX-License-Identifier: Apache-2.0
7
8 //------------------------------------------------------------------------------
9
10 #include "GB.h"
11
GB_Semiring_new(GrB_Semiring semiring,GrB_Monoid add,GrB_BinaryOp multiply)12 GrB_Info GB_Semiring_new // create a semiring
13 (
14 GrB_Semiring semiring, // semiring to create
15 GrB_Monoid add, // additive monoid of the semiring
16 GrB_BinaryOp multiply // multiply operator of the semiring
17 )
18 {
19
20 //--------------------------------------------------------------------------
21 // check inputs
22 //--------------------------------------------------------------------------
23
24 ASSERT (semiring != NULL) ;
25 ASSERT (add != NULL) ;
26 ASSERT (multiply != NULL) ;
27 ASSERT_MONOID_OK (add, "semiring->add", GB0) ;
28 ASSERT_BINARYOP_OK (multiply, "semiring->multiply", GB0) ;
29
30 //--------------------------------------------------------------------------
31 // create the semiring
32 //--------------------------------------------------------------------------
33
34 // z = multiply(x,y); type of z must match monoid z = add(z,z)
35 if (multiply->ztype != add->op->ztype)
36 {
37 return (GrB_DOMAIN_MISMATCH) ;
38 }
39
40 // initialize the semiring
41 semiring->magic = GB_MAGIC ;
42 semiring->add = add ;
43 semiring->multiply = multiply ;
44
45 ASSERT_SEMIRING_OK (semiring, "new semiring", GB0) ;
46 return (GrB_SUCCESS) ;
47 }
48
49