|
7 | 7 | `MetopVariable` wraps an `AbstractArray` so it can be used with `MetopDataset`.
|
8 | 8 | The data array is normally `AbstractMetopDiskArray`.
|
9 | 9 | """
|
10 |
| -struct MetopVariable{T, N, R} <: CDM.AbstractVariable{T, N} |
| 10 | +struct MetopVariable{T, N, R, A <: AbstractArray{T, N}} <: CDM.AbstractVariable{T, N} |
11 | 11 | parent::MetopDataset{R}
|
12 |
| - data_array::AbstractArray{T, N} |
| 12 | + data_array::A |
13 | 13 | field_name::Symbol
|
14 | 14 | end
|
15 | 15 |
|
@@ -80,7 +80,7 @@ function default_variable(ds::MetopDataset{R}, varname::CDM.SymbolOrString) wher
|
80 | 80 | T = eltype(disk_array)
|
81 | 81 | N = ndims(disk_array)
|
82 | 82 |
|
83 |
| - return MetopVariable{T, N, R}(ds, disk_array, varname) |
| 83 | + return MetopVariable{T, N, R, typeof(disk_array)}(ds, disk_array, varname) |
84 | 84 | end
|
85 | 85 |
|
86 | 86 | function default_dimnames(v::MetopVariable{T, N, R}) where {T, N, R}
|
@@ -130,12 +130,21 @@ function CDM.attrib(v::MetopVariable, name::CDM.SymbolOrString)
|
130 | 130 | end
|
131 | 131 |
|
132 | 132 | Base.size(v::MetopVariable) = size(v.data_array)
|
| 133 | +Base.parent(v::MetopVariable) = v.data_array |
133 | 134 |
|
134 |
| -### get index |
135 |
| -function Base.getindex(v::MetopVariable, indices...) |
136 |
| - checkbounds(v, indices...) |
137 |
| - return getindex(v.data_array, indices...) |
| 135 | +function DiskArrays.readblock!(v::MetopVariable{T, N, R, <:DiskArrays.AbstractArray}, |
| 136 | + aout, |
| 137 | + indexes::Vararg{OrdinalRange, N}) where {T, N, R} |
| 138 | + return DiskArrays.readblock!(parent(v), aout, indexes...) |
138 | 139 | end
|
| 140 | + |
| 141 | +function DiskArrays.readblock!(v::MetopVariable{T, N}, |
| 142 | + aout, |
| 143 | + indexes::Vararg{OrdinalRange, N}) where {T, N} |
| 144 | + aout .= getindex(parent(v), indexes...) |
| 145 | + return nothing |
| 146 | +end |
| 147 | + |
139 | 148 | # fix ambiguity
|
140 | 149 | Base.getindex(v::MetopVariable, n::CDM.CFStdName) = getindex(v::CDM.AbstractVariable, n)
|
141 | 150 | function Base.getindex(v::MetopVariable, name::CDM.SymbolOrString)
|
|
0 commit comments