From f93977b1a44bd6f52cf44c852bce5a52f1c209b0 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 8 Feb 2020 15:52:32 +0100 Subject: [PATCH] implement get! and delete! for Attr --- src/types.jl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/types.jl b/src/types.jl index e57ca498..4ee8e9e0 100644 --- a/src/types.jl +++ b/src/types.jl @@ -30,6 +30,18 @@ Base.getindex(attr::Attr, k) = haskey(attr.explicit,k) ? attr.explicit[k] : attr.defaults[k] Base.haskey(attr::Attr, k) = haskey(attr.explicit,k) || haskey(attr.defaults,k) Base.get(attr::Attr, k, default) = haskey(attr, k) ? attr[k] : default +function Base.get!(attr::Attr, k, default) + v = if haskey(attr, k) + attr[k] + else + attr.defaults[k] = default + end + return v +end +function Base.delete!(attr::Attr, k) + haskey(attr.explicit, k) && delete!(attr.explicit, k) + haskey(attr.defaults, k) && delete!(attr.defaults, k) +end Base.length(attr::Attr) = length(union(keys(attr.explicit), keys(attr.defaults))) function Base.iterate(attr::Attr) exp_keys = keys(attr.explicit)