Skip to content

Commit bfd5303

Browse files
authored
Merge branch 'master' into heaps-custom-ordering
2 parents 1727f11 + 2122aa2 commit bfd5303

File tree

12 files changed

+66
-39
lines changed

12 files changed

+66
-39
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ after_success:
2020
# Documenter auto-deploy
2121
# https://juliadocs.github.io/Documenter.jl/stable/man/hosting/#.travis.yml-Configuration-1
2222
jobs:
23+
allow_failures:
24+
- julia: nightly
2325
include:
2426
- name: "Benchmark"
2527
julia: 1.2

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name = "DataStructures"
22
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
33
version = "0.18.5"
44

5+
56
[deps]
67
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"
78
InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"

appveyor.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ platform:
99

1010
## uncomment the following lines to allow failures on nightly julia
1111
## (tests will run but not make your overall status red)
12-
#matrix:
13-
# allow_failures:
14-
# - julia_version: latest
12+
matrix:
13+
allow_failures:
14+
- julia_version: latest
1515

1616
branches:
1717
only:

docs/src/stack_and_queue.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
# Stack and Queue
32

43
The `Stack` and `Queue` types are a light-weight wrapper of a deque
@@ -7,17 +6,17 @@ type, which respectively provide interfaces for LIFO and FIFO access.
76
Usage of Stack:
87

98
```julia
10-
s = Stack{Int}() # create a stack
11-
isempty(s) # check whether the stack is empty
12-
length(s) # get the number of elements
13-
eltype(s) # get the type of elements
14-
push!(s, 1) # push back a item
15-
first(s) # get an item from the top of stack
16-
pop!(s) # get and remove a first item
17-
empty!(s) # make a stack empty
18-
iterate(s::Stack) # Get a LIFO iterator of a stack
19-
reverse_iter(s::Stack{T}) # Get a FILO iterator of a stack
20-
s1 == s2 # check whether the two stacks are same
9+
s = Stack{Int}() # create a stack
10+
isempty(s) # check whether the stack is empty
11+
length(s) # get the number of elements
12+
eltype(s) # get the type of elements
13+
push!(s, 1) # push back a item
14+
first(s) # get an item from the top of stack
15+
pop!(s) # get and remove a first item
16+
empty!(s) # make a stack empty
17+
iterate(s::Stack) # Get a LIFO iterator of a stack
18+
Iterators.reverse(s::Stack{T}) # Get a FILO iterator of a stack
19+
s1 == s2 # check whether the two stacks are same
2120
```
2221

2322
Usage of Queue:

src/DataStructures.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module DataStructures
22

3-
using Base: HasEltype, HasLength, IteratorEltype, IteratorSize, SizeUnknown,
3+
using Base: Iterators, HasEltype, HasLength, IteratorEltype, IteratorSize, SizeUnknown,
44
lt, Ordering, ForwardOrdering, Forward, ReverseOrdering, Reverse, Lt,
55
isbitsunion, isiterable, dict_with_eltype, KeySet, Callable, _tablesz,
66
findnextnot, unsafe_getindex, unsafe_setindex!, peek
@@ -15,7 +15,7 @@ module DataStructures
1515
export complement, complement!
1616

1717
export Deque, Stack, Queue, CircularDeque
18-
export enqueue!, dequeue!, dequeue_pair!, update!, reverse_iter
18+
export enqueue!, dequeue!, dequeue_pair!, update!
1919
export capacity, num_blocks, top_with_handle, sizehint!
2020

2121
export Accumulator, counter, reset!, inc!, dec!
@@ -112,4 +112,4 @@ module DataStructures
112112
include("splay_tree.jl")
113113

114114
include("deprecations.jl")
115-
end
115+
end

src/deprecations.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
# 0.18 deprecations. Remove before releasing 0.19
22
@deprecate path(t::Trie, str::AbstractString) partial_path(t::Trie, str::AbstractString)
33
@deprecate find_root find_root!
4+
@deprecate top first
5+
@deprecate reverse_iter Iterators.reverse

src/deque.jl

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ struct DequeIterator{T}
115115
q::Deque
116116
end
117117

118+
Base.last(qi::DequeIterator) = last(qi.q)
119+
118120
function Base.iterate(qi::DequeIterator{T}, (cb, i) = (qi.q.head, qi.q.head.front)) where T
119121
i > cb.back && return nothing
120122
x = cb.data[i]
@@ -130,11 +132,7 @@ end
130132

131133
# Backwards deque iteration
132134

133-
struct ReverseDequeIterator{T}
134-
q::Deque
135-
end
136-
137-
function Base.iterate(qi::ReverseDequeIterator{T}, (cb, i) = (qi.q.rear, qi.q.rear.back)) where T
135+
function Base.iterate(qi::Iterators.Reverse{<:Deque}, (cb, i) = (qi.itr.rear, qi.itr.rear.back))
138136
i < cb.front && return nothing
139137
x = cb.data[i]
140138

@@ -148,12 +146,9 @@ function Base.iterate(qi::ReverseDequeIterator{T}, (cb, i) = (qi.q.rear, qi.q.re
148146
return (x, (cb, i))
149147
end
150148

151-
reverse_iter(q::Deque{T}) where {T} = ReverseDequeIterator{T}(q)
152-
153149
Base.iterate(q::Deque{T}, s...) where {T} = iterate(DequeIterator{T}(q), s...)
154150

155151
Base.length(qi::DequeIterator{T}) where {T} = qi.q.len
156-
Base.length(qi::ReverseDequeIterator{T}) where {T} = qi.q.len
157152

158153
Base.collect(q::Deque{T}) where {T} = T[x for x in q]
159154

src/queue.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ Base.empty!(s::Queue) = (empty!(s.store); s)
4242

4343
Base.iterate(q::Queue, s...) = iterate(q.store, s...)
4444

45-
reverse_iter(q::Queue) = reverse_iter(q.store)
45+
Iterators.reverse(q::Queue) = Iterators.reverse(q.store)
4646

4747
Base.:(==)(x::Queue, y::Queue) = x.store == y.store

src/stack.jl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Base.eltype(::Type{Stack{T}}) where T = T
4141
Get the top item from the stack. Sometimes called peek.
4242
"""
4343
Base.first(s::Stack) = last(s.store)
44+
Base.last(s::Stack) = first(s.store)
4445

4546
function Base.push!(s::Stack, x)
4647
push!(s.store, x)
@@ -51,13 +52,8 @@ Base.pop!(s::Stack) = pop!(s.store)
5152

5253
Base.empty!(s::Stack) = (empty!(s.store); s)
5354

54-
Base.iterate(st::Stack, s...) = iterate(reverse_iter(st.store), s...)
55+
Base.iterate(st::Stack, s...) = iterate(Iterators.reverse(st.store), s...)
5556

56-
"""
57-
reverse_iterate(s::Stack)
58-
59-
Get a FILO iterator of a stack
60-
"""
61-
reverse_iter(s::Stack{T}) where {T} = DequeIterator{T}(s.store)
57+
Iterators.reverse(s::Stack{T}) where {T} = DequeIterator{T}(s.store)
6258

6359
Base.:(==)(x::Stack, y::Stack) = x.store == y.store

test/test_deprecations.jl

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,30 @@
1414
@test collect(path(t, "robb")) == [t0, t1, t2, t3]
1515
@test collect(path(t, "ro")) == [t0, t1, t2]
1616
@test collect(path(t, "roa")) == [t0, t1, t2]
17-
end
17+
end
18+
19+
@testset "top" begin
20+
hh = BinaryMinHeap{Float64}([1,2,3])
21+
@test top(hh) == 1
22+
end
23+
24+
function test_reverse_iter(it::T) where T
25+
arr = [i for i in it]
26+
index = length(arr)
27+
for i in reverse_iter(it)
28+
@test arr[index] == i
29+
index -= 1
30+
end
31+
32+
@test reverse(arr) == [i for i in reverse_iter(it)]
33+
end
34+
@testset "reverse_iter" begin
35+
@testset "Queue" begin
36+
q = Queue{Int}(); enqueue!(q, 1); enqueue!(q, 2)
37+
test_reverse_iter(q)
38+
end
39+
@testset "Stack" begin
40+
s = Stack{Int}(); push!(s, 1); push!(s, 2)
41+
test_reverse_iter(s)
42+
end
43+
end

0 commit comments

Comments
 (0)