@@ -160,26 +160,32 @@ mutable struct MutableBinaryHeap{T, O <: Base.Ordering} <: AbstractMutableHeap{T
160
160
nodes:: Vector{MutableBinaryHeapNode{T}}
161
161
node_map:: Vector{Int}
162
162
163
- function MutableBinaryHeap {T, O} () where {T, O}
164
- ordering = O ()
163
+ function MutableBinaryHeap {T} (ordering:: Base.Ordering ) where T
165
164
nodes = Vector {MutableBinaryHeapNode{T}} ()
166
165
node_map = Vector {Int} ()
167
- new {T, O } (ordering, nodes, node_map)
166
+ new {T, typeof(ordering) } (ordering, nodes, node_map)
168
167
end
169
168
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
172
170
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)
174
172
end
175
173
end
176
174
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
177
182
const MutableBinaryMinHeap{T} = MutableBinaryHeap{T, Base. ForwardOrdering}
178
183
const MutableBinaryMaxHeap{T} = MutableBinaryHeap{T, Base. ReverseOrdering}
179
184
180
185
MutableBinaryMinHeap (xs:: AbstractVector{T} ) where T = MutableBinaryMinHeap {T} (xs)
181
186
MutableBinaryMaxHeap (xs:: AbstractVector{T} ) where T = MutableBinaryMaxHeap {T} (xs)
182
187
188
+
183
189
function Base. show (io:: IO , h:: MutableBinaryHeap )
184
190
print (io, " MutableBinaryHeap(" )
185
191
nodes = h. nodes
0 commit comments