@@ -39,69 +39,49 @@ Base.unsafe_convert(::Type{LibGraphBLAS.GrB_Descriptor}, d::Descriptor) = d.p
39
39
Base.:+ (a:: LibGraphBLAS.GrB_Desc_Value , b:: LibGraphBLAS.GrB_Desc_Value ) =
40
40
Integer (a) + Integer (b)
41
41
42
+ function symtodescfield (sym:: Symbol )
43
+ sym === :replace_output && return LibGraphBLAS. GrB_OUTP
44
+ (sym === :complement_mask || sym === :structural_mask ) &&
45
+ return LibGraphBLAS. GrB_MASK
46
+ sym === :transpose_input1 && return LibGraphBLAS. GrB_INP0
47
+ sym === :transpose_input2 && return LibGraphBLAS. GrB_INP1
48
+ sym === :nthreads && return LibGraphBLAS. GxB_DESCRIPTOR_NTHREADS
49
+ sym === :chunk && return LibGraphBLAS. GxB_DESCRIPTOR_CHUNK
50
+ sym === :sort && return LibGraphBLAS. GxB_SORT
51
+ throw (ArgumentError (" $sym is not a valid Descriptor field" ))
52
+ end
53
+ function descfieldtype (sym:: Symbol )
54
+ if sym ∈ [:replace_output , :transpose_input1 , :transpose_input2 ]
55
+ return LibGraphBLAS. GrB_Desc_Value
56
+ elseif sym ∈ [:chunk ]
57
+ return Float64
58
+ else
59
+ return Int32
60
+ end
61
+ end
62
+ function Desc_get (d:: Descriptor , field:: Symbol )
63
+ o = Ref {descfieldtype(field)} ()
64
+ @wraperror LibGraphBLAS. GxB_Desc_get (d, symtodescfield (field), o)
65
+ return o[]
66
+ end
67
+
42
68
function Base. getproperty (d:: Descriptor , s:: Symbol )
43
69
if s === :p
44
70
return getfield (d, s)
45
- elseif s === :replace_output
46
- x = LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GrB_OUTP)
47
- if x == LibGraphBLAS. GrB_REPLACE
48
- return true
49
- else
50
- return false
51
- end
71
+ end
72
+ x = Desc_get (d, s)
73
+ if s === :replace_output
74
+ return x == LibGraphBLAS. GrB_REPLACE
52
75
elseif s === :complement_mask
53
- x = LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GrB_MASK)
54
- if x == LibGraphBLAS. GrB_COMP || x == (LibGraphBLAS. GrB_STRUCTURE + LibGraphBLAS. GrB_COMP)
55
- return true
56
- else
57
- return false
58
- end
76
+ return x == Integer (LibGraphBLAS. GrB_COMP) || x ==
77
+ (LibGraphBLAS. GrB_STRUCTURE + LibGraphBLAS. GrB_COMP)
59
78
elseif s === :structural_mask
60
- x = LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GrB_MASK)
61
- if x == LibGraphBLAS. GrB_STRUCTURE || x == (LibGraphBLAS. GrB_STRUCTURE + LibGraphBLAS. GrB_COMP)
62
- return true
63
- else
64
- return false
65
- end
66
- elseif s === :transpose_input1
67
- x = LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GrB_INP0)
68
- if x == LibGraphBLAS. GrB_TRAN
69
- return true
70
- else
71
- return false
72
- end
73
- elseif s === :transpose_input2
74
- x = LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GrB_INP1)
75
- if x == LibGraphBLAS. GrB_TRAN
76
- return true
77
- else
78
- return false
79
- end
80
- elseif s === :nthreads
81
- return LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GxB_DESCRIPTOR_NTHREADS)
82
- elseif s === :chunk
83
- return LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GxB_DESCRIPTOR_CHUNK)
84
- elseif s === :sort
85
- if LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GxB_SORT) == LibGraphBLAS. GxB_DEFAULT
86
- return false
87
- else
88
- return true
89
- end
90
- elseif s === :axb_method
91
- x = LibGraphBLAS. GxB_Desc_get (d, LibGraphBLAS. GxB_AxB_METHOD)
92
- if x == LibGraphBLAS. GxB_AxB_GUSTAVSON
93
- return :gustavson
94
- elseif x == LibGraphBLAS. GxB_AxB_DOT
95
- return :dot
96
- elseif x == LibGraphBLAS. AxB_HASH
97
- return :hash
98
- elseif x == LibGraphBLAS. GxB_AxB_SAXPY
99
- return :saxpy
100
- else
101
- return :default
102
- end
103
- else
104
- return getfield (d, s)
79
+ return x == Integer (LibGraphBLAS. GrB_STRUCTURE) || x ==
80
+ (LibGraphBLAS. GrB_STRUCTURE + LibGraphBLAS. GrB_COMP)
81
+ elseif s === :transpose_input1 || s === :transpose_input2
82
+ return x == LibGraphBLAS. GrB_TRAN
83
+ elseif s === :nthreads || s === :chunk || s === :sort
84
+ return x
105
85
end
106
86
end
107
87
0 commit comments