@@ -800,6 +800,7 @@ _view_vcat(a::Number, kr) = Fill(a,length(kr))
800
800
_view_vcat (a:: Number , kr, jr) = Fill (a,length (kr), length (jr))
801
801
_view_vcat (a, kr... ) = _viewifmutable (a, kr... )
802
802
803
+ _reverse_if_neg_step (args, kr:: Int ) = args
803
804
_reverse_if_neg_step (args, kr:: AbstractUnitRange ) = args
804
805
_reverse_if_neg_step (args, kr:: AbstractRange ) = step (kr) ≥ 0 ? args : reverse (args)
805
806
@@ -825,7 +826,7 @@ function _vcat_sub_arguments(L::ApplyLayout{typeof(hcat)}, A, V)
825
826
args = arguments (L, A)
826
827
k,jr = parentindices (V)
827
828
sz = size .(args,2 )
828
- sjr = intersect .(_argsindices (sz ), Ref (jr ))
829
+ sjr = intersect .(Ref (jr ), _argsindices (sz ))
829
830
sjr2 = broadcast ((a,b) -> a .- b .+ 1 , sjr, _vcat_firstinds (sz))
830
831
_view_hcat .(_reverse_if_neg_step (args, jr), k, sjr2)
831
832
end
@@ -841,9 +842,9 @@ function arguments(L::ApplyLayout{typeof(vcat)}, V::SubArray{<:Any,2})
841
842
args = arguments (L, A)
842
843
kr,jr = parentindices (V)
843
844
sz = size .(args,1 )
844
- skr = intersect .(_argsindices (sz ), Ref (kr ))
845
+ skr = intersect .(Ref (kr ), _argsindices (sz ))
845
846
skr2 = broadcast ((a,b) -> a .- b .+ 1 , skr, _vcat_firstinds (sz))
846
- _view_vcat .(_reverse_if_neg_step (args, kr), skr2, Ref (jr))
847
+ _view_vcat .(_reverse_if_neg_step (args, kr), _reverse_if_neg_step ( skr2, kr) , Ref (jr))
847
848
end
848
849
849
850
@inline _view_hcat (a:: Number , kr, jr) = Fill (a,length (kr),length (jr))
@@ -864,7 +865,7 @@ function arguments(L::ApplyLayout{typeof(hcat)}, V::SubArray)
864
865
sz = size .(args,2 )
865
866
sjr = intersect .(_argsindices (sz), Ref (jr))
866
867
sjr2 = broadcast ((a,b) -> a .- b .+ 1 , sjr, _vcat_firstinds (sz))
867
- __view_hcat (args, kr, sjr2)
868
+ __view_hcat (_reverse_if_neg_step ( args, jr), kr, _reverse_if_neg_step ( sjr2, jr) )
868
869
end
869
870
870
871
arguments (:: ApplyLayout{typeof(vcat)} , V:: SubArray{<:Any,2,<:Any,<:Tuple{<:Slice,<:Any}} ) =
@@ -886,11 +887,11 @@ end
886
887
887
888
sub_materialize (:: ApplyLayout{typeof(vcat)} , V:: AbstractVector , _) = ApplyVector (V)
888
889
889
- function sub_materialize (:: ApplyLayout{typeof(hcat)} , V, _)
890
+ function sub_materialize (lay :: ApplyLayout{typeof(hcat)} , V, _)
890
891
ret = similar (V)
891
892
n = 0
892
893
kr,_ = parentindices (V)
893
- for a in arguments (V)
894
+ for a in arguments (lay, V)
894
895
m = size (a,2 )
895
896
copyto! (view (ret,:,n+ 1 : n+ m), a)
896
897
n += m
0 commit comments