@@ -53,11 +53,17 @@ typedef struct
5353 uint32_t count ;
5454} EdgeTX ;
5555
56- void check_user_age (bool * z , const User * x , GrB_Index _i , GrB_Index _j , const uint8_t * y ) // EdgeOwns
56+ void check_user_age (bool * z , const User * x , GrB_Index i , GrB_Index j , const uint8_t * y )
5757{
5858
5959 * z = (x -> age > * y );
6060}
61+
62+ bool user_filter_mul (bool * z , const User * x , const bool * y )
63+ {
64+ * z = (x -> age > 30 ) && (* y );
65+ }
66+
6167void check_payment_system (bool * z , const Card * x , GrB_Index _i , GrB_Index _j , const uint8_t * y )
6268{
6369
@@ -276,26 +282,32 @@ GrB_Info analyze_graph(GrB_Matrix tx_edge_mat, GrB_Matrix owns_edge_mat, GrB_Vec
276282
277283 // vertex filter: we will take only prersons over 30
278284 GrB_Matrix ID ;
279- GrB_Vector v ;
280- TRY (GrB_Vector_new (& v , GrB_BOOL , VERTICES_NUMBER ));
281- TRY (GrB_Vector_assign_BOOL (v , NULL , NULL , false, GrB_ALL , VERTICES_NUMBER , NULL ));
282-
283- // create selector
284285 GrB_IndexUnaryOp user_age ;
285286 TRY (GrB_IndexUnaryOp_new (& user_age , (GxB_index_unary_function )& check_user_age , GrB_BOOL , user , GrB_UINT8 ));
287+
286288 uint8_t age = 30 ;
287- TRY (GrB_Vector_apply_IndexOp_UDT (v , NULL , NULL , user_age , users , & age , NULL ));
289+ GrB_Vector v ;
290+ TRY (GrB_Vector_new (& v , user , VERTICES_NUMBER ));
291+
292+ TRY (GrB_Vector_select_UDT (v , NULL , NULL , user_age , users , & age , NULL ));
293+
288294 GxB_print (v , GxB_COMPLETE );
289295 TRY (GrB_Matrix_diag (& ID , v , 0 ));
290296
291297 // ------------------------------------------------------------------------
292298 // apply user filters
293299 // ------------------------------------------------------------------------
294300
301+ GrB_BinaryOp user_filter_mul_op ;
302+ TRY (GrB_BinaryOp_new (& user_filter_mul_op , (GxB_binary_function )user_filter_mul ,
303+ GrB_BOOL , user , GrB_BOOL ));
304+
305+ GrB_Semiring user_filter_semiring ;
306+ TRY (GrB_Semiring_new (& user_filter_semiring , GrB_LOR_MONOID_BOOL , user_filter_mul_op ));
295307 GrB_Matrix owns_mat_filtered ;
296308 TRY (GrB_Matrix_new (& owns_mat_filtered , GrB_BOOL , VERTICES_NUMBER , VERTICES_NUMBER ));
297309 // apply filter
298- TRY (GrB_mxm (owns_mat_filtered , NULL , NULL , GrB_LOR_LAND_SEMIRING_BOOL , ID , owns_edge_mat , NULL ));
310+ TRY (GrB_mxm (owns_mat_filtered , NULL , NULL , user_filter_semiring , ID , owns_edge_mat , NULL ));
299311
300312 // ------------------------------------------------------------------------
301313 // get cards of filtered users
@@ -475,6 +487,7 @@ int main()
475487{
476488 LAGraph_Init (msg );
477489 printf ("LAGraph initialized.\n\n" );
490+ // GxB_Global_Option_set(GxB_BURBLE);
478491
479492 // ------------------------------------------------------------------------
480493 // init edge matrices
0 commit comments