1 //------------------------------------------------------------------------------
2 // GB_convert_full_to_bitmap: convert a matrix from full to bitmap
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_convert_full_to_bitmap(GrB_Matrix A,GB_Context Context)12 GrB_Info GB_convert_full_to_bitmap      // convert matrix from full to bitmap
13 (
14     GrB_Matrix A,               // matrix to convert from full to bitmap
15     GB_Context Context
16 )
17 {
18 
19     //--------------------------------------------------------------------------
20     // check inputs
21     //--------------------------------------------------------------------------
22 
23     ASSERT_MATRIX_OK (A, "A converting full to bitmap", GB0) ;
24     ASSERT (GB_IS_FULL (A)) ;
25     ASSERT (!GB_IS_BITMAP (A)) ;
26     ASSERT (!GB_IS_SPARSE (A)) ;
27     ASSERT (!GB_IS_HYPERSPARSE (A)) ;
28     ASSERT (!GB_ZOMBIES (A)) ;
29     ASSERT (!GB_JUMBLED (A)) ;
30     ASSERT (!GB_PENDING (A)) ;
31     GBURBLE ("(full to bitmap) ") ;
32 
33     //--------------------------------------------------------------------------
34     // allocate A->b
35     //--------------------------------------------------------------------------
36 
37     int64_t avdim = A->vdim ;
38     int64_t avlen = A->vlen ;
39     int64_t anz = avdim * avlen ;
40     ASSERT (GB_Index_multiply (&anz, avdim, avlen) == true) ;
41 
42     A->b = GB_MALLOC (anz, int8_t, &(A->b_size)) ;
43     if (A->b == NULL)
44     {
45         // out of memory
46         return (GrB_OUT_OF_MEMORY) ;
47     }
48 
49     //--------------------------------------------------------------------------
50     // determine the number of threads to use
51     //--------------------------------------------------------------------------
52 
53     GB_GET_NTHREADS_MAX (nthreads_max, chunk, Context) ;
54     int nthreads = GB_nthreads (anz, chunk, nthreads_max) ;
55 
56     //--------------------------------------------------------------------------
57     // fill the A->b bitmap in parallel
58     //--------------------------------------------------------------------------
59 
60     GB_memset (A->b, 1, anz, nthreads) ;
61     A->nvals = anz ;
62 
63     //--------------------------------------------------------------------------
64     // return result
65     //--------------------------------------------------------------------------
66 
67     ASSERT_MATRIX_OK (A, "A converted from full to bitmap", GB0) ;
68     ASSERT (GB_IS_BITMAP (A)) ;
69     ASSERT (!GB_ZOMBIES (A)) ;
70     ASSERT (!GB_JUMBLED (A)) ;
71     ASSERT (!GB_PENDING (A)) ;
72     return (GrB_SUCCESS) ;
73 }
74 
75