@@ -26,7 +26,8 @@ import Base: AbstractArray, AbstractMatrix, AbstractVector,
26
26
AbstractArray, AbstractVector, axes, (:), _sub2ind_recurse, broadcast, promote_eltypeof,
27
27
similar, @_gc_preserve_end , @_gc_preserve_begin ,
28
28
@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
30
31
31
32
import Base. Broadcast: BroadcastStyle, AbstractArrayStyle, Broadcasted, broadcasted,
32
33
combine_eltypes, DefaultArrayStyle, instantiate, materialize,
@@ -64,6 +65,15 @@ abstract type LayoutArray{T,N} <: AbstractArray{T,N} end
64
65
const LayoutMatrix{T} = LayoutArray{T,2 }
65
66
const LayoutVector{T} = LayoutArray{T,1 }
66
67
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
+
67
77
include (" memorylayout.jl" )
68
78
include (" muladd.jl" )
69
79
include (" lmul.jl" )
@@ -74,7 +84,7 @@ include("factorizations.jl")
74
84
75
85
@inline sub_materialize (_, V, _) = Array (V)
76
86
@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)
78
88
79
89
@inline layout_getindex (A, I... ) = sub_materialize (view (A, I... ))
80
90
@@ -104,22 +114,22 @@ _copyto!(_, _, dest::AbstractArray{T,N}, src::AbstractArray{V,N}) where {T,V,N}
104
114
105
115
106
116
copyto! (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)
108
118
copyto! (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)
110
120
copyto! (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)
112
122
113
123
copyto! (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)
115
125
copyto! (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)
117
127
copyto! (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)
119
129
copyto! (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)
121
131
copyto! (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)
123
133
124
134
125
135
0 commit comments