1 //------------------------------------------------------------------------------
2 // GB_convert_any_to_bitmap: convert any matrix 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 // The input matrix may be jumbled and have zombies, and can still be converted
11 // to a bitmap.
12 
13 #include "GB.h"
14 #define GB_FREE_ALL ;
15 
GB_convert_any_to_bitmap(GrB_Matrix A,GB_Context Context)16 GrB_Info GB_convert_any_to_bitmap   // convert to bitmap
17 (
18     GrB_Matrix A,           // matrix to convert to bitmap
19     GB_Context Context
20 )
21 {
22 
23     //--------------------------------------------------------------------------
24     // check inputs
25     //--------------------------------------------------------------------------
26 
27     GrB_Info info ;
28     ASSERT_MATRIX_OK (A, "A being converted to bitmap", GB0) ;
29     ASSERT (GB_ZOMBIES_OK (A)) ;    // A can have zombies
30     ASSERT (GB_JUMBLED_OK (A)) ;    // A can be jumbled
31     GB_MATRIX_WAIT_IF_PENDING (A) ; // A cannot have pending tuples
32     ASSERT (!GB_PENDING (A)) ;
33 
34     //--------------------------------------------------------------------------
35     // convert A to bitmap
36     //--------------------------------------------------------------------------
37 
38     if (GB_IS_HYPERSPARSE (A))
39     {
40         // convert from hypersparse to bitmap
41         GB_OK (GB_convert_sparse_to_bitmap (A, Context)) ;
42     }
43     else if (GB_IS_FULL (A))
44     {
45         // convert from full to bitmap
46         GB_OK (GB_convert_full_to_bitmap (A, Context)) ;
47     }
48     else if (GB_IS_BITMAP (A))
49     {
50         // already bitmap; nothing to do
51         ;
52     }
53     else
54     {
55         // convert from sparse to bitmap
56         GB_OK (GB_convert_sparse_to_bitmap (A, Context)) ;
57     }
58 
59     //--------------------------------------------------------------------------
60     // return result
61     //--------------------------------------------------------------------------
62 
63     ASSERT_MATRIX_OK (A, "A to bitmap", GB0) ;
64     ASSERT (GB_IS_BITMAP (A)) ;
65     ASSERT (!GB_ZOMBIES (A)) ;
66     ASSERT (!GB_JUMBLED (A)) ;
67     ASSERT (!GB_PENDING (A)) ;
68     return (GrB_SUCCESS) ;
69 }
70 
71