@@ -26,7 +26,8 @@ import Base: AbstractArray, AbstractMatrix, AbstractVector,
2626 AbstractArray, AbstractVector, axes, (:), _sub2ind_recurse, broadcast, promote_eltypeof,
2727 similar, @_gc_preserve_end , @_gc_preserve_begin ,
2828 @nexprs , @ncall , @ntuple , tuple_type_tail,
29- all, any, isbitsunion, issubset, replace_in_print_matrix, replace_with_centered_mark
29+ all, any, isbitsunion, issubset, replace_in_print_matrix, replace_with_centered_mark,
30+ strides, unsafe_convert
3031
3132import Base. Broadcast: BroadcastStyle, AbstractArrayStyle, Broadcasted, broadcasted,
3233 combine_eltypes, DefaultArrayStyle, instantiate, materialize,
@@ -64,6 +65,15 @@ abstract type LayoutArray{T,N} <: AbstractArray{T,N} end
6465const LayoutMatrix{T} = LayoutArray{T,2 }
6566const LayoutVector{T} = LayoutArray{T,1 }
6667
68+ # # TODO : Following are type piracy whch may be removed in Julia v1.5
69+ _transpose_strides (a) = (a,1 )
70+ _transpose_strides (a,b) = (b,a)
71+ strides (A:: Adjoint ) = _transpose_strides (strides (parent (A))... )
72+ strides (A:: Transpose ) = _transpose_strides (strides (parent (A))... )
73+
74+ unsafe_convert (:: Type{Ptr{T}} , A:: Adjoint{<:Real} ) where T<: Real = unsafe_convert (Ptr{T}, parent (A))
75+ unsafe_convert (:: Type{Ptr{T}} , A:: Transpose ) where T = unsafe_convert (Ptr{T}, parent (A))
76+
6777include (" memorylayout.jl" )
6878include (" muladd.jl" )
6979include (" lmul.jl" )
@@ -74,7 +84,7 @@ include("factorizations.jl")
7484
7585@inline sub_materialize (_, V, _) = Array (V)
7686@inline sub_materialize (L, V) = sub_materialize (L, V, axes (V))
77- @inline sub_materialize (V:: SubArray ) = sub_materialize (MemoryLayout (typeof (V) ), V)
87+ @inline sub_materialize (V:: SubArray ) = sub_materialize (MemoryLayout (V ), V)
7888
7989@inline layout_getindex (A, I... ) = sub_materialize (view (A, I... ))
8090
@@ -104,22 +114,22 @@ _copyto!(_, _, dest::AbstractArray{T,N}, src::AbstractArray{V,N}) where {T,V,N}
104114
105115
106116copyto! (dest:: LayoutArray{<:Any,N} , src:: LayoutArray{<:Any,N} ) where N =
107- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
117+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
108118copyto! (dest:: AbstractArray{<:Any,N} , src:: LayoutArray{<:Any,N} ) where N =
109- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
119+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
110120copyto! (dest:: LayoutArray{<:Any,N} , src:: AbstractArray{<:Any,N} ) where N =
111- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
121+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
112122
113123copyto! (dest:: SubArray{<:Any,N,<:LayoutArray} , src:: SubArray{<:Any,N,<:LayoutArray} ) where N =
114- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
124+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
115125copyto! (dest:: SubArray{<:Any,N,<:LayoutArray} , src:: LayoutArray{<:Any,N} ) where N =
116- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
126+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
117127copyto! (dest:: LayoutArray{<:Any,N} , src:: SubArray{<:Any,N,<:LayoutArray} ) where N =
118- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
128+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
119129copyto! (dest:: SubArray{<:Any,N,<:LayoutArray} , src:: AbstractArray{<:Any,N} ) where N =
120- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
130+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
121131copyto! (dest:: AbstractArray{<:Any,N} , src:: SubArray{<:Any,N,<:LayoutArray} ) where N =
122- _copyto! (MemoryLayout (typeof ( dest)) , MemoryLayout (typeof ( src) ), dest, src)
132+ _copyto! (MemoryLayout (dest), MemoryLayout (src), dest, src)
123133
124134
125135
0 commit comments