@@ -1078,45 +1078,28 @@ function copyto_unaliased!(deststyle::IndexStyle, dest::AbstractArray, srcstyle:
1078
1078
if srcstyle isa IndexLinear
1079
1079
# Single-index implementation
1080
1080
@inbounds for i in srcinds
1081
- if isassigned (src, i)
1082
- dest[i + Δi] = src[i]
1083
- else
1084
- _unsetindex! (dest, i + Δi)
1085
- end
1081
+ dest[i + Δi] = src[i]
1086
1082
end
1087
1083
else
1088
1084
# Dual-index implementation
1089
1085
i = idf - 1
1090
- @inbounds for a in eachindex (src)
1091
- i += 1
1092
- if isassigned (src, a)
1093
- dest[i] = src[a]
1094
- else
1095
- _unsetindex! (dest, i)
1096
- end
1086
+ @inbounds for a in src
1087
+ dest[i+= 1 ] = a
1097
1088
end
1098
1089
end
1099
1090
else
1100
1091
iterdest, itersrc = eachindex (dest), eachindex (src)
1101
1092
if iterdest == itersrc
1102
1093
# Shared-iterator implementation
1103
- @inbounds for I in iterdest
1104
- if isassigned (src, I)
1105
- dest[I] = src[I]
1106
- else
1107
- _unsetindex! (dest, I)
1108
- end
1094
+ for I in iterdest
1095
+ @inbounds dest[I] = src[I]
1109
1096
end
1110
1097
else
1111
1098
# Dual-iterator implementation
1112
1099
ret = iterate (iterdest)
1113
- @inbounds for a in itersrc
1100
+ @inbounds for a in src
1114
1101
idx, state = ret:: NTuple{2,Any}
1115
- if isassigned (src, a)
1116
- dest[idx] = src[a]
1117
- else
1118
- _unsetindex! (dest, idx)
1119
- end
1102
+ dest[idx] = a
1120
1103
ret = iterate (iterdest, state)
1121
1104
end
1122
1105
end
@@ -1145,11 +1128,7 @@ function copyto!(dest::AbstractArray, dstart::Integer,
1145
1128
(checkbounds (Bool, srcinds, sstart) && checkbounds (Bool, srcinds, sstart+ n- 1 )) || throw (BoundsError (src, sstart: sstart+ n- 1 ))
1146
1129
src′ = unalias (dest, src)
1147
1130
@inbounds for i = 0 : n- 1
1148
- if isassigned (src′, sstart+ i)
1149
- dest[dstart+ i] = src′[sstart+ i]
1150
- else
1151
- _unsetindex! (dest, dstart+ i)
1152
- end
1131
+ dest[dstart+ i] = src′[sstart+ i]
1153
1132
end
1154
1133
return dest
1155
1134
end
@@ -1160,7 +1139,7 @@ function copy(a::AbstractArray)
1160
1139
end
1161
1140
1162
1141
function copyto! (B:: AbstractVecOrMat{R} , ir_dest:: AbstractRange{Int} , jr_dest:: AbstractRange{Int} ,
1163
- A:: AbstractVecOrMat{S} , ir_src:: AbstractRange{Int} , jr_src:: AbstractRange{Int} ) where {R,S}
1142
+ A:: AbstractVecOrMat{S} , ir_src:: AbstractRange{Int} , jr_src:: AbstractRange{Int} ) where {R,S}
1164
1143
if length (ir_dest) != length (ir_src)
1165
1144
throw (ArgumentError (LazyString (" source and destination must have same size (got " ,
1166
1145
length (ir_src)," and " ,length (ir_dest)," )" )))
0 commit comments