@@ -8,7 +8,7 @@ Load all attribute entries for a given attribute from its AEDRs.
88"""
99@inline function load_attribute_entries(buffer:: Vector{UInt8} , adr, RecordSizeType, cdf_encoding)
1010 head = max(adr. AgrEDRhead, adr. AzEDRhead)
11- offsets = get_offsets (buffer, head, RecordSizeType )
11+ offsets = OffsetsIterator{RecordSizeType} (buffer, head)
1212 needs_byte_swap = is_big_endian_encoding(cdf_encoding)
1313 return map(offsets) do offset
1414 load_aedr_data(buffer, offset, RecordSizeType, needs_byte_swap)
@@ -24,7 +24,7 @@ function attrib(cdf::CDFDataset; predicate = is_global)
2424 RecordSizeType = recordsize_type(cdf)
2525 buffer = cdf. buffer
2626 cdf_encoding = cdf. cdr. encoding
27- offsets = get_offsets(buffer, cdf. gdr . ADRhead, RecordSizeType )
27+ offsets = collect(OffsetsIterator( cdf) )
2828 adrs = map(of -> ADR(buffer, of, RecordSizeType), offsets)
2929 adrs = filter!(predicate, adrs)
3030 names = map(adr -> String(adr. Name), adrs)
@@ -43,10 +43,11 @@ function attrib(cdf::CDFDataset, name::String)
4343 RecordSizeType = recordsize_type(cdf)
4444 buffer = cdf. buffer
4545 cdf_encoding = cdf. cdr. encoding
46- offsets = get_offsets_lazy(buffer, cdf. gdr. ADRhead, RecordSizeType)
46+ offsets = OffsetsIterator(cdf)
47+ cu = codeunits(name)
4748 for offset in offsets
4849 adr = ADR(buffer, offset, RecordSizeType)
49- name == String( adr. Name) && return load_attribute_entries(buffer, adr, RecordSizeType, cdf_encoding)
50+ cu == adr. Name && return load_attribute_entries(buffer, adr, RecordSizeType, cdf_encoding)
5051 end
5152 error(" Attribute '$name ' not found in CDF file" )
5253end
@@ -61,7 +62,7 @@ function vattrib(cdf::CDFDataset, varnum::Integer)
6162 buffer = cdf. buffer
6263 cdf_encoding = cdf. cdr. encoding
6364 attributes = Dict{String, Union{String, Vector}}()
64- offsets = get_offsets_lazy(buffer, cdf. gdr . ADRhead, RecordSizeType )
65+ offsets = OffsetsIterator( cdf)
6566 needs_byte_swap = is_big_endian_encoding(cdf_encoding)
6667 for offset in offsets
6768 is_global(buffer, offset, RecordSizeType) && continue
@@ -99,7 +100,7 @@ function vattrib(cdf, varnum, name)
99100 cdf_encoding = cdf. cdr. encoding
100101
101102 # Search for the specific attribute by name first
102- offsets = get_offsets_lazy(buffer, cdf. gdr . ADRhead, RecordSizeType )
103+ offsets = OffsetsIterator( cdf)
103104 name_bytes = codeunits(name)
104105 needs_byte_swap = is_big_endian_encoding(cdf_encoding)
105106 for offset in offsets
@@ -141,7 +142,7 @@ function attribnames(cdf::CDFDataset; predicate = is_global)
141142 names = String[]
142143 buffer = cdf. buffer
143144 RecordSizeType = recordsize_type(cdf)
144- offsets = get_offsets_lazy(buffer, cdf. gdr . ADRhead, RecordSizeType )
145+ offsets = OffsetsIterator( cdf)
145146 for offset in offsets
146147 adr = ADR(buffer, offset, RecordSizeType)
147148 predicate(adr) && push!(names, String(adr. Name))
0 commit comments