Skip to content

Commit 89b7ca1

Browse files
PraneethJainbarche
authored andcommitted
refactor: iterators
1 parent 8d6aa08 commit 89b7ca1

File tree

6 files changed

+20
-36
lines changed

6 files changed

+20
-36
lines changed

src/StdLib.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,26 @@ function __init__()
2525
@initcxx
2626
end
2727

28+
macro additerators(container_type, iterator_type)
29+
quote
30+
Base.:(==)(a::$(iterator_type), b::$(iterator_type)) = iterator_is_equal(a, b)
31+
function _iteration_tuple(v::$(container_type), state::$(iterator_type))
32+
(state == iteratorend(v)) ? nothing : (iterator_value(state), state)
33+
end
34+
Base.iterate(v::$(container_type)) = _iteration_tuple(v, iteratorbegin(v))
35+
Base.iterate(v::$(container_type), state::$(iterator_type)) =
36+
(state != iteratorend(v)) ? _iteration_tuple(v, iterator_next(state)) : nothing
37+
end
38+
end
39+
40+
@additerators StdDeque StdDequeIterator
41+
@additerators StdForwardList StdForwardListIterator
42+
@additerators StdList StdListIterator
43+
@additerators StdMultiset StdMultisetIterator
44+
@additerators StdUnorderedMultiset StdUnorderedMultisetIterator
45+
@additerators StdSet StdSetIterator
46+
@additerators StdUnorderedSet StdUnorderedSetIterator
47+
2848
include("StdLib/StdDeque.jl")
2949
include("StdLib/StdForwardList.jl")
3050
include("StdLib/StdList.jl")

src/StdLib/StdDeque.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,3 @@ Base.push!(v::StdDeque, x) = (isempty(v) ? push_front!(v, x) : push_back!(v, x);
99
Base.pop!(v::StdDeque) = pop_back!(v)
1010
Base.popfirst!(v::StdDeque) = pop_front!(v)
1111
Base.resize!(v::StdDeque, n::Integer) = resize!(v, n)
12-
13-
Base.:(==)(a::StdDequeIterator, b::StdDequeIterator) = iterator_is_equal(a, b)
14-
15-
_deque_iteration_tuple(v::StdDeque, state::StdDequeIterator) = state == iteratorend(v) ? nothing : (iterator_value(state), state)
16-
Base.iterate(v::StdDeque) = _deque_iteration_tuple(v, iteratorbegin(v))
17-
Base.iterate(v::StdDeque, state::StdDequeIterator) = (state != iteratorend(v)) ? _deque_iteration_tuple(v, iterator_next(state)) : nothing

src/StdLib/StdForwardList.jl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@ Base.empty!(v::StdForwardList) = (flist_empty!(v); v)
66
Base.pushfirst!(v::StdForwardList, x) = (flist_push_front!(v, x); v)
77
Base.popfirst!(v::StdForwardList) = (flist_pop_front!(v); v)
88

9-
Base.:(==)(a::StdForwardListIterator, b::StdForwardListIterator) = iterator_is_equal(a, b)
10-
_forward_list_iteration_tuple(v::StdForwardList, state::StdForwardListIterator) = (state == iteratorend(v)) ? nothing : (iterator_value(state), state)
11-
Base.iterate(v::StdForwardList) = _forward_list_iteration_tuple(v, iteratorbegin(v))
12-
Base.iterate(v::StdForwardList, state::StdForwardListIterator) = (state != iteratorend(v)) ? _forward_list_iteration_tuple(v, iterator_next(state)) : nothing
13-
149
function Base.show(io::IO, ::MIME"text/plain", container::StdForwardList{T}) where {T}
1510
print(io, "StdForwardList{", T, "}")
1611

src/StdLib/StdList.jl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@ Base.pop!(v::StdList) = (list_pop_back!(v); v)
1212
Base.popfirst!(v::StdList) = (list_pop_front!(v); v)
1313
Base.sort!(v::StdList) = (StdListSort(v); v)
1414

15-
Base.:(==)(a::StdListIterator, b::StdListIterator) = iterator_is_equal(a, b)
16-
_list_iteration_tuple(v::StdList, state::StdListIterator) = (state == iteratorend(v)) ? nothing : (iterator_value(state), state)
17-
Base.iterate(v::StdList) = _list_iteration_tuple(v, iteratorbegin(v))
18-
Base.iterate(v::StdList, state::StdListIterator) = (state != iteratorend(v)) ? _list_iteration_tuple(v, iterator_next(state)) : nothing
19-
2015
function Base.show(io::IO, ::MIME"text/plain", container::StdList{T}) where {T}
2116
n = length(container)
2217
print(io, "StdList{", T, "} with ", n, " element", n == 1 ? "" : "s")

src/StdLib/StdMultisetTypes.jl

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,3 @@ for StdMultisetType in (StdMultiset, StdUnorderedMultiset)
1010
Base.delete!(v::StdMultisetType, x) = (multiset_delete!(v, x); v)
1111
Base.count(x, v::StdMultisetType) = multiset_count(v, x)
1212
end
13-
14-
Base.:(==)(a::StdMultisetIterator, b::StdMultisetIterator) = iterator_is_equal(a, b)
15-
_multiset_iteration_tuple(v::StdMultiset, state::StdMultisetIterator) = (state == iteratorend(v)) ? nothing : (iterator_value(state), state)
16-
Base.iterate(v::StdMultiset) = _multiset_iteration_tuple(v, iteratorbegin(v))
17-
Base.iterate(v::StdMultiset, state::StdMultisetIterator) = (state != iteratorend(v)) ? _multiset_iteration_tuple(v, iterator_next(state)) : nothing
18-
19-
Base.:(==)(a::StdUnorderedMultisetIterator, b::StdUnorderedMultisetIterator) = iterator_is_equal(a, b)
20-
_unordered_multiset_iteration_tuple(v::StdUnorderedMultiset, state::StdUnorderedMultisetIterator) = (state == iteratorend(v)) ? nothing : (iterator_value(state), state)
21-
Base.iterate(v::StdUnorderedMultiset) = _unordered_multiset_iteration_tuple(v, iteratorbegin(v))
22-
Base.iterate(v::StdUnorderedMultiset, state::StdUnorderedMultisetIterator) = (state != iteratorend(v)) ? _unordered_multiset_iteration_tuple(v, iterator_next(state)) : nothing

src/StdLib/StdSetTypes.jl

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,3 @@ for StdSetType in (StdSet, StdUnorderedSet)
99
Base.in(x, v::StdSetType) = set_in(v, x)
1010
Base.delete!(v::StdSetType, x) = (set_delete!(v, x); v)
1111
end
12-
13-
Base.:(==)(a::StdSetIterator, b::StdSetIterator) = iterator_is_equal(a, b)
14-
_set_iteration_tuple(v::StdSet, state::StdSetIterator) = (state == iteratorend(v)) ? nothing : (iterator_value(state), state)
15-
Base.iterate(v::StdSet) = _set_iteration_tuple(v, iteratorbegin(v))
16-
Base.iterate(v::StdSet, state::StdSetIterator) = (state != iteratorend(v)) ? _set_iteration_tuple(v, iterator_next(state)) : nothing
17-
18-
Base.:(==)(a::StdUnorderedSetIterator, b::StdUnorderedSetIterator) = iterator_is_equal(a, b)
19-
_unordered_set_iteration_tuple(v::StdUnorderedSet, state::StdUnorderedSetIterator) = (state == iteratorend(v)) ? nothing : (iterator_value(state), state)
20-
Base.iterate(v::StdUnorderedSet) = _unordered_set_iteration_tuple(v, iteratorbegin(v))
21-
Base.iterate(v::StdUnorderedSet, state::StdUnorderedSetIterator) = (state != iteratorend(v)) ? _unordered_set_iteration_tuple(v, iterator_next(state)) : nothing

0 commit comments

Comments
 (0)