about summary refs log tree commit diff
path: root/third_party/nix/src/libexpr/attr-set.hh
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/nix/src/libexpr/attr-set.hh')
-rw-r--r--third_party/nix/src/libexpr/attr-set.hh15
1 files changed, 12 insertions, 3 deletions
diff --git a/third_party/nix/src/libexpr/attr-set.hh b/third_party/nix/src/libexpr/attr-set.hh
index 6397008517d2..c02f3930fda5 100644
--- a/third_party/nix/src/libexpr/attr-set.hh
+++ b/third_party/nix/src/libexpr/attr-set.hh
@@ -25,15 +25,17 @@ using AttributeMap = absl::btree_map<Symbol, Attr>;
 
 class Bindings {
  public:
-  typedef AttributeMap::iterator iterator;
+  using iterator = AttributeMap::iterator;
+  using const_iterator = AttributeMap::const_iterator;
 
   // Allocate a new attribute set that is visible to the garbage
   // collector.
-  static Bindings* NewGC(size_t capacity = 0);
+  static std::unique_ptr<Bindings> New(size_t capacity = 0);
 
   // Create a new attribute set by merging two others. This is used to
   // implement the `//` operator in Nix.
-  static Bindings* Merge(const Bindings& lhs, const Bindings& rhs);
+  static std::unique_ptr<Bindings> Merge(const Bindings& lhs,
+                                         const Bindings& rhs);
 
   // Return the number of contained elements.
   size_t size() const;
@@ -44,11 +46,18 @@ class Bindings {
   // Insert, but do not replace, values in the attribute set.
   void push_back(const Attr& attr);
 
+  // Are these two attribute sets deeply equal?
+  // Note: Does not special-case derivations. Use state.eqValues() to check
+  // attrsets that may be derivations.
+  bool Equal(const Bindings* other, EvalState& state) const;
+
   // Look up a specific element of the attribute set.
   iterator find(const Symbol& name);
 
   iterator begin();
+  const_iterator cbegin() const;
   iterator end();
+  const_iterator cend() const;
 
   // Returns the elements of the attribute set as a vector, sorted
   // lexicographically by keys.