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