diff --git a/README.md b/README.md index 98769460..ca10d3ac 100644 --- a/README.md +++ b/README.md @@ -21,11 +21,11 @@ To find out functions supported by ThreadsX.jl, just type ``````julia julia> ThreadsX. -MergeSort any findlast mapreduce sort -QuickSort count foreach maximum sort! -Set extrema issorted minimum sum -StableQuickSort findall map prod unique -all findfirst map! reduce +MergeSort any findfirst map! reduce +QuickSort collect findlast mapreduce sort +Set count foreach maximum sort! +StableQuickSort extrema issorted minimum sum +all findall map prod unique `````` ## Interoperability diff --git a/src/ThreadsX.jl b/src/ThreadsX.jl index 99408c86..1840d681 100644 --- a/src/ThreadsX.jl +++ b/src/ThreadsX.jl @@ -1,5 +1,6 @@ baremodule ThreadsX +function collect end function map end function mapreduce end diff --git a/src/map.jl b/src/map.jl index 07bd1643..49a95eae 100644 --- a/src/map.jl +++ b/src/map.jl @@ -32,3 +32,12 @@ function ThreadsX.map!(f, dest, array, arrays...; kw...) end return dest end + +struct ConvertTo{T} end +(::ConvertTo{T})(x) where {T} = convert(T, x) + +ThreadsX.collect(::Type{T}, itr; kwargs...) where {T} = + tcopy(Map(ConvertTo{T}()), Vector{T}, itr; basesize = default_basesize(itr), kwargs...) + +ThreadsX.collect(itr; kwargs...) = + tcollect(itr; basesize = default_basesize(itr), kwargs...) diff --git a/test/test_with_base.jl b/test/test_with_base.jl index 04d47201..1c4f3bc3 100644 --- a/test/test_with_base.jl +++ b/test/test_with_base.jl @@ -8,6 +8,10 @@ args_and_kwargs(args...; kwargs...) = args, (; kwargs...) inc(x) = x + 1 raw_testdata = """ +collect(1:10) +collect(Float64, 1:10) +collect(inc(x) for x in 1:10) +collect(Float64, (inc(x) for x in 1:10)) map(inc, 1:10) map(inc, Float64[]) map(inc, ones(3, 3))