1919
2020Load all attributes from the CDF file.
2121"""
22- function attrib(cdf:: CDFDataset ; predicate = is_global)
22+ function attrib(cdf:: CDFDataset ; predicate= is_global)
2323 RecordSizeType = recordsize_type(cdf)
2424 buffer = cdf. buffer
2525 cdf_encoding = cdf. cdr. encoding
2626 offsets = get_offsets(buffer, cdf. gdr. ADRhead, RecordSizeType)
2727 adrs = map(of -> ADR(buffer, of, RecordSizeType), offsets)
28- adrs = filter(predicate, adrs)
28+ adrs = filter! (predicate, adrs)
2929 names = map(adr -> String(adr. Name), adrs)
3030 aedrs = map(adrs) do adr
3131 load_attribute_entries(buffer, adr, RecordSizeType, cdf_encoding)
@@ -42,7 +42,7 @@ function attrib(cdf::CDFDataset, name::String)
4242 RecordSizeType = recordsize_type(cdf)
4343 buffer = cdf. buffer
4444 cdf_encoding = cdf. cdr. encoding
45- offsets = get_offsets (buffer, cdf. gdr. ADRhead, RecordSizeType)
45+ offsets = get_offsets_lazy (buffer, cdf. gdr. ADRhead, RecordSizeType)
4646 for offset in offsets
4747 adr = ADR(buffer, offset, RecordSizeType)
4848 name == String(adr. Name) && return load_attribute_entries(buffer, adr, RecordSizeType, cdf_encoding)
@@ -59,11 +59,11 @@ function vattrib(cdf::CDFDataset, varnum::Integer)
5959 RecordSizeType = recordsize_type(cdf)
6060 buffer = cdf. buffer
6161 cdf_encoding = cdf. cdr. encoding
62- attributes = Dict{String, Union{String, Vector}}()
63- offsets = get_offsets (buffer, cdf. gdr. ADRhead, RecordSizeType)
62+ attributes = Dict{String,Union{String,Vector}}()
63+ offsets = get_offsets_lazy (buffer, cdf. gdr. ADRhead, RecordSizeType)
6464 for offset in offsets
65+ is_global(buffer, offset, RecordSizeType) && continue
6566 adr = ADR(buffer, offset, RecordSizeType)
66- is_global(adr) && continue
6767 @assert min(adr. AgrEDRhead, adr. AzEDRhead) == 0
6868 head = max(adr. AgrEDRhead, adr. AzEDRhead)
6969 found = _search_aedr_entries(buffer, head, RecordSizeType, cdf_encoding, varnum)
@@ -95,11 +95,11 @@ function vattrib(cdf, varnum, name)
9595 cdf_encoding = cdf. cdr. encoding
9696
9797 # Search for the specific attribute by name first
98- offsets = get_offsets (buffer, cdf. gdr. ADRhead, RecordSizeType)
98+ offsets = get_offsets_lazy (buffer, cdf. gdr. ADRhead, RecordSizeType)
9999 name_bytes = codeunits(name)
100100 for offset in offsets
101+ is_global(buffer, offset, RecordSizeType) && continue
101102 adr = ADR(buffer, offset, RecordSizeType)
102- is_global(adr) && continue
103103 adr. Name != name_bytes && continue
104104 @assert min(adr. AgrEDRhead, adr. AzEDRhead) == 0
105105 head = max(adr. AgrEDRhead, adr. AzEDRhead)
@@ -127,15 +127,14 @@ end
127127
128128Return a list of attribute names in the CDF file.
129129"""
130- function attribnames(cdf:: CDFDataset ; filter = is_global)
130+ function attribnames(cdf:: CDFDataset ; predicate = is_global)
131131 names = String[]
132132 buffer = cdf. buffer
133133 RecordSizeType = recordsize_type(cdf)
134- offsets = get_offsets(buffer, cdf. gdr. ADRhead, RecordSizeType)
135- sizehint!(names, length(offsets))
134+ offsets = get_offsets_lazy(buffer, cdf. gdr. ADRhead, RecordSizeType)
136135 for offset in offsets
137136 adr = ADR(buffer, offset, RecordSizeType)
138- filter (adr) && push!(names, String(adr. Name))
137+ predicate (adr) && push!(names, String(adr. Name))
139138 end
140139 return names
141140end
0 commit comments