@@ -1026,7 +1026,26 @@ end
1026
1026
1027
1027
function nc_get_vars! (ncid:: Integer ,varid:: Integer ,startp,countp,stridep,ip)
1028
1028
@debug " nc_get_vars!: $startp ,$countp ,$stridep "
1029
- check (ccall ((:nc_get_vars ,libnetcdf),Cint,(Cint,Cint,Ptr{Csize_t},Ptr{Csize_t},Ptr{Cint},Ptr{Nothing}),ncid,varid,startp,countp,stridep,ip))
1029
+
1030
+ if any (< (0 ),stridep)
1031
+ reverse_dim = stridep .< 0
1032
+ strider = copy (stridep)
1033
+ startr = copy (startp)
1034
+
1035
+ for i = 1 : length (stridep)
1036
+ if reverse_dim[i]
1037
+ strider[i] = - stridep[i]
1038
+ startr[i] = startp[i] + (countp[i]- 1 )* stridep[i]
1039
+ end
1040
+ end
1041
+
1042
+ check (ccall ((:nc_get_vars ,libnetcdf),Cint,(Cint,Cint,Ptr{Csize_t},Ptr{Csize_t},Ptr{Cint},Ptr{Nothing}),ncid,varid,startr,countp,strider,ip))
1043
+
1044
+ # reverse(reverse_dim) is necessary because stride uses the C ordering
1045
+ reverse! (ip,dims= Tuple (findall (reverse (reverse_dim))))
1046
+ else
1047
+ check (ccall ((:nc_get_vars ,libnetcdf),Cint,(Cint,Cint,Ptr{Csize_t},Ptr{Csize_t},Ptr{Cint},Ptr{Nothing}),ncid,varid,startp,countp,stridep,ip))
1048
+ end
1030
1049
end
1031
1050
1032
1051
0 commit comments