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