Skip to content

Commit 3d2e158

Browse files
PraneethJainbarche
authored andcommitted
feat: add StdList and StdForwardList
1 parent 9b23b7f commit 3d2e158

File tree

3 files changed

+83
-2
lines changed

3 files changed

+83
-2
lines changed

src/CxxWrap.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -948,8 +948,8 @@ ConstCxxPtr, ConstCxxRef, CxxRef, CxxPtr,
948948
CppEnum, ConstArray, CxxBool, CxxLong, CxxULong, CxxChar, CxxChar16, CxxChar32, CxxWchar, CxxUChar, CxxSignedChar,
949949
CxxLongLong, CxxULongLong, ptrunion, gcprotect, gcunprotect, isnull
950950

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

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

955955
end # module

src/StdLib.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,23 @@ function Base.pop!(v::StdPriorityQueue)
251251
return val
252252
end
253253

254+
Base.size(v::StdList) = (Int(cppsize(v)),)
255+
Base.length(v::StdList) = Int(cppsize(v))
256+
Base.isempty(v::StdList) = list_isempty(v)
257+
Base.first(v::StdList) = list_front(v)
258+
Base.last(v::StdList) = list_back(v)
259+
Base.empty!(v::StdList) = (list_empty!(v); v)
260+
Base.push!(v::StdList, x) = (list_push_back!(v, x); v)
261+
Base.pushfirst!(v::StdList, x) = (list_push_front!(v, x); v)
262+
Base.pop!(v::StdList) = (list_pop_back!(v); v)
263+
Base.popfirst!(v::StdList) = (list_pop_front!(v); v)
264+
265+
Base.isempty(v::StdForwardList) = flist_isempty(v)
266+
Base.first(v::StdForwardList) = flist_front(v)
267+
Base.empty!(v::StdForwardList) = (flist_empty!(v); v)
268+
Base.pushfirst!(v::StdForwardList, x) = (flist_push_front!(v, x); v)
269+
Base.popfirst!(v::StdForwardList) = (flist_pop_front!(v); v)
270+
254271
function Base.fill!(v::T, x) where T <: Union{StdVector, StdValArray, StdDeque}
255272
StdFill(v, x)
256273
return v

test/stdlib.jl

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,70 @@ end
509509
end
510510
end
511511

512+
@testset "StdList" begin
513+
@testset "StdList with StdString" begin
514+
list = StdList{StdString}()
515+
@test isempty(list) == true
516+
@test length(list) == 0
517+
push!(list, StdString("ab"))
518+
list = pushfirst!(list, StdString("cd"))
519+
list = push!(list, StdString("ef"))
520+
@test length(list) == 3
521+
@test first(list) == "cd"
522+
@test last(list) == "ef"
523+
list = pop!(list)
524+
@test last(list) == "ab"
525+
list = popfirst!(list)
526+
@test first(list) == "ab"
527+
list = empty!(list)
528+
@test isempty(list) == true
529+
end
530+
531+
@testset "StdList with integers" begin
532+
list = StdList{Int64}()
533+
@test isempty(list) == true
534+
@test length(list) == 0
535+
list = push!(list, 10)
536+
pushfirst!(list, 20)
537+
list = pushfirst!(list, 30)
538+
@test first(list) == 30
539+
list = popfirst!(list)
540+
@test first(list) == 20
541+
@test last(list) == 10
542+
@test length(list) == 2
543+
empty!(list)
544+
@test isempty(list) == true
545+
end
546+
end
547+
548+
@testset "StdForwardList" begin
549+
@testset "StdForwardList with integers" begin
550+
forwardlist = StdList{Int64}()
551+
@test isempty(forwardlist) == true
552+
forwardlist = pushfirst!(forwardlist, 10)
553+
pushfirst!(forwardlist, 20)
554+
@test first(forwardlist) == 20
555+
forwardlist = popfirst!(forwardlist)
556+
@test first(forwardlist) == 10
557+
@test isempty(forwardlist) == false
558+
forwardlist = empty!(forwardlist)
559+
@test isempty(forwardlist) == true
560+
end
561+
562+
@testset "StdForwardList with StdString" begin
563+
forwardlist = StdList{StdString}()
564+
@test isempty(forwardlist) == true
565+
forwardlist = pushfirst!(forwardlist, StdString("ab"))
566+
pushfirst!(forwardlist, StdString("cd"))
567+
@test first(forwardlist) == "cd"
568+
forwardlist = popfirst!(forwardlist)
569+
@test first(forwardlist) == "ab"
570+
@test isempty(forwardlist) == false
571+
forwardlist = empty!(forwardlist)
572+
@test isempty(forwardlist) == true
573+
end
574+
end
575+
512576
@static if isdefined(StdLib, :HAS_RANGES)
513577

514578
@testset "StdFill" begin

0 commit comments

Comments
 (0)