Skip to content

Commit 314e8dc

Browse files
committed
Finalize new axes stuff. Fixes #98. Closes #27.
1 parent 2799e49 commit 314e8dc

File tree

1 file changed

+17
-33
lines changed

1 file changed

+17
-33
lines changed

src/similar_convert_copy.jl

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,23 @@
1-
## ComponentArrays
1+
const CombinedAnyDims = Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}
2+
const AnyCombinedAnyDims = Tuple{<:CombinedOrRegularAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}
3+
const CombinedCombinedAnyDims = Tuple{<:CombinedAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}
4+
25
# Similar
36
Base.similar(x::ComponentArray) = ComponentArray(similar(getdata(x)), getaxes(x)...)
47
Base.similar(x::ComponentArray, ::Type{T}) where T = ComponentArray(similar(getdata(x), T), getaxes(x)...)
5-
function Base.similar(x::AbstractArray, dims::Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}})
6-
arr = similar(getdata(x), length.(_array_axis.(dims)))
7-
return ComponentArray(arr, _component_axis.(dims)...)
8-
end
9-
function Base.similar(x::AbstractArray, dims::Tuple{<:Union{Integer,AbstractUnitRange}, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}})
10-
arr = similar(getdata(x), length.(_array_axis.(dims)))
11-
return ComponentArray(arr, _component_axis.(dims)...)
12-
end
13-
function Base.similar(x::AbstractArray, dims::Tuple{<:CombinedAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}})
14-
arr = similar(getdata(x), length.(_array_axis.(dims)))
15-
return ComponentArray(arr, _component_axis.(dims)...)
16-
end
17-
function Base.similar(x::AbstractArray, ::Type{T}, dims::Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) where {T}
18-
arr = similar(getdata(x), T, length.(_array_axis.(dims)))
19-
return ComponentArray(arr, _component_axis.(dims)...)
20-
end
21-
function Base.similar(x::AbstractArray, ::Type{T}, dims::Tuple{<:Union{Integer,AbstractUnitRange}, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) where {T}
22-
arr = similar(getdata(x), T, length.(_array_axis.(dims)))
23-
return ComponentArray(arr, _component_axis.(dims)...)
24-
end
25-
function Base.similar(x::Type{<:AbstractArray}, dims::Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}})
26-
arr = similar(x, length.(_array_axis.(dims)))
27-
return ComponentArray(arr, _component_axis.(dims)...)
28-
end
29-
function Base.similar(x::Type{<:AbstractArray}, dims::Tuple{<:CombinedOrRegularAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}})
30-
arr = similar(x, length.(_array_axis.(dims)))
31-
return ComponentArray(arr, _component_axis.(dims)...)
32-
end
33-
function Base.similar(x::Type{<:AbstractArray}, dims::Tuple{<:CombinedAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}})
34-
arr = similar(x, length.(_array_axis.(dims)))
35-
return ComponentArray(arr, _component_axis.(dims)...)
36-
end
8+
Base.similar(x::AbstractArray, dims::CombinedAnyDims) = _similar(x, dims)
9+
Base.similar(x::AbstractArray, dims::AnyCombinedAnyDims) = _similar(x, dims)
10+
Base.similar(x::AbstractArray, dims::CombinedCombinedAnyDims) = _similar(x, dims)
11+
Base.similar(x::AbstractArray, ::Type{T}, dims::CombinedAnyDims) where {T} = _similar(x, T, dims)
12+
Base.similar(x::AbstractArray, ::Type{T}, dims::AnyCombinedAnyDims) where {T} = _similar(x, T, dims)
13+
Base.similar(x::AbstractArray, ::Type{T}, dims::CombinedCombinedAnyDims) where {T} = _similar(x, T, dims)
14+
Base.similar(x::Type{<:AbstractArray}, dims::CombinedAnyDims) = _similar(x, dims)
15+
Base.similar(x::Type{<:AbstractArray}, dims::AnyCombinedAnyDims) = _similar(x, dims)
16+
Base.similar(x::Type{<:AbstractArray}, dims::CombinedCombinedAnyDims) = _similar(x, dims)
17+
18+
_similar(x::AbstractArray, dims) = ComponentArray(similar(getdata(x), length.(_array_axis.(dims))), _component_axis.(dims)...)
19+
_similar(x::Type, dims) = ComponentArray(similar(x, length.(_array_axis.(dims))), _component_axis.(dims)...)
20+
_similar(x, T, dims) = ComponentArray(similar(getdata(x), T, length.(_array_axis.(dims))), _component_axis.(dims)...)
3721

3822

3923
Base.zero(x::ComponentArray) = zero.(x)

0 commit comments

Comments
 (0)