Skip to content

Commit

Permalink
feat: add StdList and StdForwardList
Browse files Browse the repository at this point in the history
  • Loading branch information
PraneethJain authored and barche committed Jun 21, 2024
1 parent 9b23b7f commit 3d2e158
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/CxxWrap.jl
Original file line number Diff line number Diff line change
Expand Up @@ -948,8 +948,8 @@ ConstCxxPtr, ConstCxxRef, CxxRef, CxxPtr,
CppEnum, ConstArray, CxxBool, CxxLong, CxxULong, CxxChar, CxxChar16, CxxChar32, CxxWchar, CxxUChar, CxxSignedChar,
CxxLongLong, CxxULongLong, ptrunion, gcprotect, gcunprotect, isnull

using .StdLib: StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdStack, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset, StdPriorityQueue
using .StdLib: StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdStack, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset, StdPriorityQueue, StdList, StdForwardList

export StdLib, StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdStack, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset, StdPriorityQueue
export StdLib, StdVector, StdString, StdWString, StdValArray, StdThread, StdDeque, StdQueue, StdStack, StdSet, StdMultiset, StdUnorderedSet, StdUnorderedMultiset, StdPriorityQueue, StdList, StdForwardList

end # module
17 changes: 17 additions & 0 deletions src/StdLib.jl
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,23 @@ function Base.pop!(v::StdPriorityQueue)
return val
end

Base.size(v::StdList) = (Int(cppsize(v)),)
Base.length(v::StdList) = Int(cppsize(v))
Base.isempty(v::StdList) = list_isempty(v)
Base.first(v::StdList) = list_front(v)
Base.last(v::StdList) = list_back(v)
Base.empty!(v::StdList) = (list_empty!(v); v)
Base.push!(v::StdList, x) = (list_push_back!(v, x); v)
Base.pushfirst!(v::StdList, x) = (list_push_front!(v, x); v)
Base.pop!(v::StdList) = (list_pop_back!(v); v)
Base.popfirst!(v::StdList) = (list_pop_front!(v); v)

Base.isempty(v::StdForwardList) = flist_isempty(v)
Base.first(v::StdForwardList) = flist_front(v)
Base.empty!(v::StdForwardList) = (flist_empty!(v); v)
Base.pushfirst!(v::StdForwardList, x) = (flist_push_front!(v, x); v)
Base.popfirst!(v::StdForwardList) = (flist_pop_front!(v); v)

function Base.fill!(v::T, x) where T <: Union{StdVector, StdValArray, StdDeque}
StdFill(v, x)
return v
Expand Down
64 changes: 64 additions & 0 deletions test/stdlib.jl
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,70 @@ end
end
end

@testset "StdList" begin
@testset "StdList with StdString" begin
list = StdList{StdString}()
@test isempty(list) == true
@test length(list) == 0
push!(list, StdString("ab"))
list = pushfirst!(list, StdString("cd"))
list = push!(list, StdString("ef"))
@test length(list) == 3
@test first(list) == "cd"
@test last(list) == "ef"
list = pop!(list)
@test last(list) == "ab"
list = popfirst!(list)
@test first(list) == "ab"
list = empty!(list)
@test isempty(list) == true
end

@testset "StdList with integers" begin
list = StdList{Int64}()
@test isempty(list) == true
@test length(list) == 0
list = push!(list, 10)
pushfirst!(list, 20)
list = pushfirst!(list, 30)
@test first(list) == 30
list = popfirst!(list)
@test first(list) == 20
@test last(list) == 10
@test length(list) == 2
empty!(list)
@test isempty(list) == true
end
end

@testset "StdForwardList" begin
@testset "StdForwardList with integers" begin
forwardlist = StdList{Int64}()
@test isempty(forwardlist) == true
forwardlist = pushfirst!(forwardlist, 10)
pushfirst!(forwardlist, 20)
@test first(forwardlist) == 20
forwardlist = popfirst!(forwardlist)
@test first(forwardlist) == 10
@test isempty(forwardlist) == false
forwardlist = empty!(forwardlist)
@test isempty(forwardlist) == true
end

@testset "StdForwardList with StdString" begin
forwardlist = StdList{StdString}()
@test isempty(forwardlist) == true
forwardlist = pushfirst!(forwardlist, StdString("ab"))
pushfirst!(forwardlist, StdString("cd"))
@test first(forwardlist) == "cd"
forwardlist = popfirst!(forwardlist)
@test first(forwardlist) == "ab"
@test isempty(forwardlist) == false
forwardlist = empty!(forwardlist)
@test isempty(forwardlist) == true
end
end

@static if isdefined(StdLib, :HAS_RANGES)

@testset "StdFill" begin
Expand Down

0 comments on commit 3d2e158

Please sign in to comment.