Skip to content

Commit f8b16e6

Browse files
committed
resize! instead of push!
1 parent 7d115dd commit f8b16e6

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

src/sparsematrixlnk.jl

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ mutable struct SparseMatrixLNK{Tv,Ti<:Integer} <: AbstractSparseMatrix{Tv,Ti}
4040
"""
4141
nnz::Ti
4242

43+
"""
44+
Length of arrays
45+
"""
46+
nentries::Ti
47+
4348

4449
"""
4550
Linked list of column entries. Initial length is n,
@@ -77,7 +82,7 @@ $(SIGNATURES)
7782
7883
Constructor of empty matrix.
7984
"""
80-
SparseMatrixLNK{Tv,Ti}(m::Integer, n::Integer) where {Tv,Ti<:Integer} = SparseMatrixLNK{Tv,Ti}(m,n,0,zeros(Ti,n),zeros(Ti,n),zeros(Tv,n))
85+
SparseMatrixLNK{Tv,Ti}(m::Integer, n::Integer) where {Tv,Ti<:Integer} = SparseMatrixLNK{Tv,Ti}(m,n,0,n,zeros(Ti,n),zeros(Ti,n),zeros(Tv,n))
8186

8287
"""
8388
$(SIGNATURES)
@@ -182,13 +187,22 @@ function Base.setindex!(lnk::SparseMatrixLNK{Tv,Ti}, _v, _i::Integer, _j::Intege
182187
k=lnk.colptr[k]
183188
end
184189

190+
# increase number of entries
191+
lnk.nentries+=1
192+
if length(lnk.nzval)<lnk.nentries
193+
newsize=Int64(ceil(5.0*lnk.nentries/4.0))
194+
resize!(lnk.nzval,newsize)
195+
resize!(lnk.rowval,newsize)
196+
resize!(lnk.colptr,newsize)
197+
end
198+
185199
# Append entry if not found
186-
push!(lnk.nzval,v)
187-
push!(lnk.rowval,i)
200+
lnk.nzval[lnk.nentries]=v
201+
lnk.rowval[lnk.nentries]=i
188202

189203
# Shift the end of the list
190-
push!(lnk.colptr,0)
191-
lnk.colptr[k0]=length(lnk.nzval)
204+
lnk.colptr[lnk.nentries]=0
205+
lnk.colptr[k0]=lnk.nentries
192206

193207
# Update number of nonzero entries
194208
lnk.nnz+=1

0 commit comments

Comments
 (0)