aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-11-26 19:57:20 +0100
committerEelco Dolstra <edolstra@gmail.com>2019-12-05 20:29:00 +0100
commit0d118ef0c95d5b2ba306372c97526cd2aaaac679 (patch)
treee4c237e7923c41c359eef852a234f81b40eda2b7 /src
parent50d483a2c1c77bef1bab742eb8708626a61dc00e (diff)
Bindings::get(): Add convenience method
This allows writing attribute lookups as if (auto name = value.attrs->get(state.sName)) ... (cherry picked from commit f216c76c56cdffb5214d074a7d44812843dd174f)
Diffstat (limited to 'src')
-rw-r--r--src/libexpr/attr-set.hh9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/libexpr/attr-set.hh b/src/libexpr/attr-set.hh
index 3119a1848..6c5fb21ad 100644
--- a/src/libexpr/attr-set.hh
+++ b/src/libexpr/attr-set.hh
@@ -4,6 +4,7 @@
#include "symbol-table.hh"
#include <algorithm>
+#include <optional>
namespace nix {
@@ -63,6 +64,14 @@ public:
return end();
}
+ std::optional<Attr *> get(const Symbol & name)
+ {
+ Attr key(name, 0);
+ iterator i = std::lower_bound(begin(), end(), key);
+ if (i != end() && i->name == name) return &*i;
+ return {};
+ }
+
iterator begin() { return &attrs[0]; }
iterator end() { return &attrs[size_]; }