Skip to content

Commit 7d07332

Browse files
authored
feat: StdPriorityQueue (#441)
* feat: StdPriorityQueue * test: StdPriorityQueue
1 parent 26ff819 commit 7d07332

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

src/CxxWrap.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -948,8 +948,8 @@ ConstCxxPtr, ConstCxxRef, CxxRef, CxxPtr,
948948
CppEnum, ConstArray, CxxBool, CxxLong, CxxULong, CxxChar, CxxChar16, CxxChar32, CxxWchar, CxxUChar, CxxSignedChar,
949949
CxxLongLong, CxxULongLong, ptrunion, gcprotect, gcunprotect, isnull
950950

951-
using .StdLib: StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset
951+
using .StdLib: StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset, StdPriorityQueue
952952

953-
export StdLib, StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset
953+
export StdLib, StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset, StdPriorityQueue
954954

955955
end # module

src/StdLib.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,18 @@ for StdMultisetType in (StdMultiset, StdUnorderedMultiset)
230230
Base.count(x, v::StdMultisetType) = multiset_count(v, x)
231231
end
232232

233+
Base.size(v::StdPriorityQueue) = (Int(cppsize(v)),)
234+
Base.length(v::StdPriorityQueue) = Int(cppsize(v))
235+
Base.isempty(v::StdPriorityQueue) = pq_isempty(v)
236+
Base.first(v::StdPriorityQueue) = isempty(v) ? nothing : pq_top(v)
237+
Base.push!(v::StdPriorityQueue, x) = (pq_push!(v, x); v)
238+
function Base.pop!(v::StdPriorityQueue)
239+
isempty(v) && throw(ArgumentError("Cannot pop from an empty priority queue"))
240+
val = pq_top(v)
241+
pq_pop!(v)
242+
return val
243+
end
244+
233245
function Base.fill!(v::T, x) where T <: Union{StdVector, StdValArray, StdDeque}
234246
StdFill(v, x)
235247
return v

test/stdlib.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,26 @@ let
327327
@test length(queue) == 1
328328
end
329329

330+
@testset "StdPriorityQueue" begin
331+
pq = StdPriorityQueue{Int64}()
332+
@test length(pq) == 0
333+
push!(pq, 5)
334+
push!(pq, 1)
335+
@test isempty(pq) == false
336+
pq = push!(pq, 4)
337+
pq = push!(pq, 10)
338+
@test length(pq) == 4
339+
@test first(pq) == 10
340+
@test pop!(pq) == 10
341+
@test length(pq) == 3
342+
@test pop!(pq) == 5
343+
@test pop!(pq) == 4
344+
@test pop!(pq) == 1
345+
@test isempty(pq) == true
346+
@test isnothing(first(pq))
347+
@test_throws ArgumentError pop!(pq)
348+
end
349+
330350
@testset "StdSet and StdUnorderedSet" begin
331351
for StdSetType in (StdSet, StdUnorderedSet)
332352
@testset "Set with integers" begin

0 commit comments

Comments
 (0)