1 //------------------------------------------------------------------------------
2 // GxB_Vector_Option_get: get an option in a vector
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
GxB_Vector_Option_get(GrB_Vector v,GxB_Option_Field field,...)12 GrB_Info GxB_Vector_Option_get // gets the current option of a vector
13 (
14 GrB_Vector v, // vector to query
15 GxB_Option_Field field, // option to query
16 ... // return value of the vector option
17 )
18 {
19
20 //--------------------------------------------------------------------------
21 // check inputs
22 //--------------------------------------------------------------------------
23
24 GB_WHERE1 ("GxB_Vector_Option_get (v, field, &value)") ;
25 GB_RETURN_IF_NULL_OR_FAULTY (v) ;
26 ASSERT_VECTOR_OK (v, "v to get option", GB0) ;
27
28 //--------------------------------------------------------------------------
29 // get the option
30 //--------------------------------------------------------------------------
31
32 va_list ap ;
33
34 switch (field)
35 {
36
37 case GxB_BITMAP_SWITCH :
38
39 {
40 va_start (ap, field) ;
41 double *bitmap_switch = va_arg (ap, double *) ;
42 va_end (ap) ;
43 GB_RETURN_IF_NULL (bitmap_switch) ;
44 (*bitmap_switch) = (double) v->bitmap_switch ;
45 }
46 break ;
47
48 case GxB_SPARSITY_CONTROL :
49
50 {
51 va_start (ap, field) ;
52 int *sparsity = va_arg (ap, int *) ;
53 va_end (ap) ;
54 GB_RETURN_IF_NULL (sparsity) ;
55 (*sparsity) = v->sparsity ;
56 }
57 break ;
58
59 case GxB_SPARSITY_STATUS :
60
61 {
62 va_start (ap, field) ;
63 int *sparsity = va_arg (ap, int *) ;
64 va_end (ap) ;
65 GB_RETURN_IF_NULL (sparsity) ;
66 (*sparsity) = GB_sparsity ((GrB_Matrix) v) ;
67 }
68 break ;
69
70 case GxB_FORMAT :
71
72 {
73 // a GrB_Vector is always stored by-column
74 va_start (ap, field) ;
75 GxB_Format_Value *format = va_arg (ap, GxB_Format_Value *) ;
76 va_end (ap) ;
77 GB_RETURN_IF_NULL (format) ;
78 (*format) = GxB_BY_COL ;
79 }
80 break ;
81
82 case GxB_IS_HYPER : // historical; use GxB_SPARSITY_STATUS instead
83
84 {
85 // a GrB_Vector is never hypersparse
86 va_start (ap, field) ;
87 bool *v_is_hyper = va_arg (ap, bool *) ;
88 va_end (ap) ;
89 GB_RETURN_IF_NULL (v_is_hyper) ;
90 (*v_is_hyper) = false ;
91 }
92 break ;
93
94 default :
95
96 return (GrB_INVALID_VALUE) ;
97
98 }
99 return (GrB_SUCCESS) ;
100 }
101
102