@@ -16,24 +16,44 @@ struct NetCDFDataset
1616end
1717NetCDFDataset (filename) = NetCDFDataset (filename,NC_NOWRITE)
1818
19+ import . NetCDF: AbstractDiskArray, readblock!, writeblock!, haschunks, eachchunk
20+
21+ struct NetCDFVariable{T,N} <: AbstractDiskArray{T,N}
22+ filename:: String
23+ varname:: String
24+ size:: NTuple{N,Int}
25+ end
26+ # Define method forwarding for DiskArray methods
27+ for m in [:haschunks , :eachchunk ]
28+ eval (:(function $ (m)(v:: NetCDFVariable ,args... ;kwargs... )
29+ NetCDF. open (a-> $ (m)(a,args... ;kwargs... ), v. filename, v. varname)
30+ end
31+ ))
32+ end
33+ writeblock! (v:: NetCDFVariable , aout, r:: AbstractUnitRange... ) = NetCDF. open (a-> writeblock! (a,aout,r... ), v. filename, v. varname, mode= NC_WRITE)
34+ readblock! (v:: NetCDFVariable , aout, r:: AbstractUnitRange... ) = NetCDF. open (a-> readblock! (a,aout,r... ), v. filename, v. varname)
35+
36+ Base. size (v:: NetCDFVariable ) = v. size
37+
1938get_var_dims (ds:: NetCDFDataset ,name) = NetCDF. open (v-> map (i-> i. name,v[name]. dim),ds. filename)
2039get_varnames (ds:: NetCDFDataset ) = NetCDF. open (v-> collect (keys (v. vars)),ds. filename)
2140get_var_attrs (ds:: NetCDFDataset , name) = NetCDF. open (v-> v[name]. atts,ds. filename)
2241function Base. getindex (ds:: NetCDFDataset , i)
23- NetCDF. open (ds. filename,i,mode= ds. mode)
42+ s,et = NetCDF. open (j-> (size (j),eltype (j)),ds. filename,i)
43+ NetCDFVariable {et,length(s)} (ds. filename, i, s)
2444end
2545Base. haskey (ds:: NetCDFDataset ,k) = NetCDF. open (nc-> haskey (nc. vars,k),ds. filename)
2646
2747function add_var (p:: NetCDFDataset , T:: Type , varname, s, dimnames, attr;
2848 chunksize= s, compress = - 1 )
2949 dimsdescr = Iterators. flatten (zip (dimnames,s))
3050 nccreate (p. filename, varname, dimsdescr... , atts = attr, t= T, chunksize= chunksize, compress= compress)
31- NetCDF . open ( p. filename,varname,mode = p . mode )
51+ NetCDFVariable {T,length(s)} ( p. filename,varname,s )
3252end
3353
3454function create_empty (:: Type{NetCDFDataset} , path)
3555 NetCDF. create (path, NcVar[])
36- NetCDFDataset (path,NC_WRITE )
56+ NetCDFDataset (path)
3757end
3858
3959allow_parallel_write (:: NetCDFDataset ) = false
0 commit comments