chore(3p/nix/libexpr): Expose separate insert & "upsert" methods
Reading more through the old code, it seems like the intention /sometimes/ is to replace values.
This commit is contained in:
parent
8c28be1b69
commit
6b447f4b25
2 changed files with 10 additions and 3 deletions
7
third_party/nix/src/libexpr/attr-set.cc
vendored
7
third_party/nix/src/libexpr/attr-set.cc
vendored
|
@ -21,7 +21,7 @@ namespace nix {
|
|||
// This behaviour is mimicked by using .insert(), which will *not*
|
||||
// override existing values.
|
||||
void Bindings::push_back(const Attr& attr) {
|
||||
auto [_, inserted] = attributes_.insert_or_assign(attr.name, attr);
|
||||
auto [_, inserted] = attributes_.insert({attr.name, attr});
|
||||
|
||||
if (!inserted) {
|
||||
DLOG(WARNING) << "attempted to insert duplicate attribute for key '"
|
||||
|
@ -29,6 +29,11 @@ void Bindings::push_back(const Attr& attr) {
|
|||
}
|
||||
}
|
||||
|
||||
// Insert or assign (i.e. replace) a value in the attribute set.
|
||||
void Bindings::insert_or_assign(const Attr& attr) {
|
||||
attributes_.insert_or_assign(attr.name, attr);
|
||||
}
|
||||
|
||||
size_t Bindings::size() { return attributes_.size(); }
|
||||
|
||||
size_t Bindings::capacity() { return 0; }
|
||||
|
|
6
third_party/nix/src/libexpr/attr-set.hh
vendored
6
third_party/nix/src/libexpr/attr-set.hh
vendored
|
@ -50,10 +50,12 @@ class Bindings {
|
|||
// Is this attribute set empty?
|
||||
bool empty();
|
||||
|
||||
// TODO(tazjin): rename
|
||||
// TODO(tazjin): does this need to copy?
|
||||
// Insert, but do not replace, values in the attribute set.
|
||||
void push_back(const Attr& attr);
|
||||
|
||||
// Insert a value, or replace an existing one.
|
||||
void insert_or_assign(const Attr& attr);
|
||||
|
||||
// Look up a specific element of the attribute set.
|
||||
iterator find(const Symbol& name);
|
||||
|
||||
|
|
Loading…
Reference in a new issue