Skip to content

Commit a0b1431

Browse files
committed
(Mutable)BinaryHeap constructors taking Base.Ordering instances
1 parent 5c433f7 commit a0b1431

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

src/heaps/binary_heap.jl

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,30 @@ mutable struct BinaryHeap{T, O <: Base.Ordering} <: AbstractHeap{T}
3434
ordering::O
3535
valtree::Vector{T}
3636

37-
function BinaryHeap{T, O}() where {T,O}
38-
new{T,O}(O(), Vector{T}())
37+
function BinaryHeap{T}(ordering::Base.Ordering) where T
38+
new{T, typeof(ordering)}(ordering, Vector{T}())
3939
end
4040

41-
function BinaryHeap{T, O}(xs) where {T,O}
42-
ordering = O()
41+
function BinaryHeap{T}(ordering::Base.Ordering, xs::AbstractVector) where T
4342
valtree = heapify(xs, ordering)
44-
new{T,O}(ordering, valtree)
43+
new{T, typeof(ordering)}(ordering, valtree)
4544
end
4645
end
4746

47+
BinaryHeap(ordering::Base.Ordering, xs::AbstractVector{T}) where T = BinaryHeap{T}(ordering, xs)
48+
49+
# Constructors using singleton order types as type parameters rather than arguments
50+
BinaryHeap{T, O}() where {T, O<:Base.Ordering} = BinaryHeap{T}(O())
51+
BinaryHeap{T, O}(xs::AbstractVector) where {T, O<:Base.Ordering} = BinaryHeap{T}(O(), xs)
52+
53+
# Forward/reverse ordering type aliases
4854
const BinaryMinHeap{T} = BinaryHeap{T, Base.ForwardOrdering}
4955
const BinaryMaxHeap{T} = BinaryHeap{T, Base.ReverseOrdering}
56+
5057
BinaryMinHeap(xs::AbstractVector{T}) where T = BinaryMinHeap{T}(xs)
5158
BinaryMaxHeap(xs::AbstractVector{T}) where T = BinaryMaxHeap{T}(xs)
5259

60+
5361
#################################################
5462
#
5563
# interfaces

src/heaps/mutable_binary_heap.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,26 +160,32 @@ mutable struct MutableBinaryHeap{T, O <: Base.Ordering} <: AbstractMutableHeap{T
160160
nodes::Vector{MutableBinaryHeapNode{T}}
161161
node_map::Vector{Int}
162162

163-
function MutableBinaryHeap{T, O}() where {T, O}
164-
ordering = O()
163+
function MutableBinaryHeap{T}(ordering::Base.Ordering) where T
165164
nodes = Vector{MutableBinaryHeapNode{T}}()
166165
node_map = Vector{Int}()
167-
new{T, O}(ordering, nodes, node_map)
166+
new{T, typeof(ordering)}(ordering, nodes, node_map)
168167
end
169168

170-
function MutableBinaryHeap{T, O}(xs::AbstractVector{T}) where {T, O}
171-
ordering = O()
169+
function MutableBinaryHeap{T}(ordering::Base.Ordering, xs::AbstractVector) where T
172170
nodes, node_map = _make_mutable_binary_heap(ordering, T, xs)
173-
new{T, O}(ordering, nodes, node_map)
171+
new{T, typeof(ordering)}(ordering, nodes, node_map)
174172
end
175173
end
176174

175+
MutableBinaryHeap(ordering::Base.Ordering, xs::AbstractVector{T}) where T = MutableBinaryHeap{T}(ordering, xs)
176+
177+
# Constructors using singleton order types as type parameters rather than arguments
178+
MutableBinaryHeap{T, O}() where {T, O<:Base.Ordering} = MutableBinaryHeap{T}(O())
179+
MutableBinaryHeap{T, O}(xs::AbstractVector) where {T, O<:Base.Ordering} = MutableBinaryHeap{T}(O(), xs)
180+
181+
# Forward/reverse ordering type aliases
177182
const MutableBinaryMinHeap{T} = MutableBinaryHeap{T, Base.ForwardOrdering}
178183
const MutableBinaryMaxHeap{T} = MutableBinaryHeap{T, Base.ReverseOrdering}
179184

180185
MutableBinaryMinHeap(xs::AbstractVector{T}) where T = MutableBinaryMinHeap{T}(xs)
181186
MutableBinaryMaxHeap(xs::AbstractVector{T}) where T = MutableBinaryMaxHeap{T}(xs)
182187

188+
183189
function Base.show(io::IO, h::MutableBinaryHeap)
184190
print(io, "MutableBinaryHeap(")
185191
nodes = h.nodes

0 commit comments

Comments
 (0)