-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathserialization.jl
More file actions
30 lines (27 loc) · 1.17 KB
/
serialization.jl
File metadata and controls
30 lines (27 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function Serialization.serialize(s::AbstractSerializer, A::GBVecOrMat)
Serialization.writetag(s.io, Serialization.OBJECT_TAG)
Serialization.serialize(s, typeof(A))
v = Vector{UInt8}(undef, serialize_sizehint(A))
sz = Ref{LibGraphBLAS.GrB_Index}(length(v))
@wraperror LibGraphBLAS.GrB_Matrix_serialize(v, sz, A)
resize!(v, sz[])
serialize(s, v)
return nothing
end
function _gbdeserialize(s::AbstractSerializer, ::Type{T}) where {T} # Only for internal use, we assume we've already got a GB<Something> here.
refA = _newGrBRef() # Everything is a GrB_Matrix in the end.
v = deserialize(s)
@wraperror LibGraphBLAS.GrB_Matrix_deserialize(refA, gbtype(T), v, LibGraphBLAS.GrB_Index(length(v)))
return refA
end
function Serialization.deserialize(s::AbstractSerializer, ::Type{GBMatrix{T}}) where {T}
return GBMatrix{T}(_gbdeserialize(s, T)...)
end
function Serialization.deserialize(s::AbstractSerializer, ::Type{GBVector{T}}) where {T}
return GBVector{T}(_gbdeserialize(s, T)...)
end
function serialize_sizehint(A::GBVecOrMat)
sz = Ref{LibGraphBLAS.GrB_Index}()
@wraperror LibGraphBLAS.GrB_Matrix_serializeSize(sz, A)
return sz[]
end