1 //------------------------------------------------------------------------------
2 // GB_convert_any_to_full: convert any matrix to full
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 // All entries in A must be present, with no pending work; GB_as_if_full (A)
11 // must be true on input.  A may be hypersparse, sparse, bitmap, or full on
12 // input, and full on output.
13 
14 #include "GB.h"
15 
16 GB_PUBLIC                       // used by MATLAB interface
GB_convert_any_to_full(GrB_Matrix A)17 void GB_convert_any_to_full     // convert any matrix to full
18 (
19     GrB_Matrix A                // matrix to convert to full
20 )
21 {
22 
23     //--------------------------------------------------------------------------
24     // check inputs
25     //--------------------------------------------------------------------------
26 
27     ASSERT_MATRIX_OK (A, "A converting any to full", GB0) ;
28     ASSERT (GB_as_if_full (A)) ;
29 
30     if (GB_IS_FULL (A))
31     {
32         // already full; nothing to do
33         return ;
34     }
35 
36     GBURBLE ("(%s to full) ", (A->h != NULL) ? "hypersparse" :
37         (GB_IS_BITMAP (A) ? "bitmap" : "sparse")) ;
38 
39     //--------------------------------------------------------------------------
40     // free A->h, A->p, A->i, and A->b
41     //--------------------------------------------------------------------------
42 
43     GB_ph_free (A) ;
44 
45     if (!A->i_shallow) GB_FREE (&(A->i), A->i_size) ;
46     A->i = NULL ;
47     A->i_shallow = false ;
48 
49     if (!A->b_shallow) GB_FREE (&(A->b), A->b_size) ;
50     A->b = NULL ;
51     A->b_shallow = false ;
52 
53     int64_t avdim = A->vdim ;
54     int64_t avlen = A->vlen ;
55 
56     A->plen = -1 ;
57     A->nvec = avdim ;
58     A->nvec_nonempty = (avlen == 0) ? 0 : avdim ;
59 
60     A->magic = GB_MAGIC ;
61 
62     //--------------------------------------------------------------------------
63     // return result
64     //--------------------------------------------------------------------------
65 
66     ASSERT_MATRIX_OK (A, "A converted from any to full", GB0) ;
67     ASSERT (GB_IS_FULL (A)) ;
68     ASSERT (!GB_ZOMBIES (A)) ;
69     ASSERT (!GB_JUMBLED (A)) ;
70     ASSERT (!GB_PENDING (A)) ;
71 }
72 
73