Index: base/values.h |
diff --git a/base/values.h b/base/values.h |
index d99a46fa13b692516035bd30b6e6382a75c516ee..57139d8f34849889436908062011eafbaa48cfac 100644 |
--- a/base/values.h |
+++ b/base/values.h |
@@ -367,6 +367,16 @@ class DictionaryValue : public Value { |
// replaced. |
void MergeDictionary(const DictionaryValue* dictionary); |
+ // Builds a vector containing all of the paths that are different between |
+ // the dictionary and a second specified dictionary. These are paths of |
+ // values that are either in one dictionary or the other but not both, OR |
+ // paths that are present in both dictionaries but differ in value. |
+ // Path strings are in ascending lexicographical order in the generated |
+ // vector. |different_paths| is cleared before added any paths. |
+ void GetDifferingPaths( |
+ const DictionaryValue* other, |
+ std::vector<std::string>* different_paths) const; |
+ |
// This class provides an iterator for the keys in the dictionary. |
// It can't be used to modify the dictionary. |
// |
@@ -393,6 +403,17 @@ class DictionaryValue : public Value { |
key_iterator end_keys() const { return key_iterator(dictionary_.end()); } |
private: |
+ // Does the actual heavy lifting for GetDifferingPaths. |
+ // Returns true if a path is added to different_paths, otherwise false. |
+ // The difference compuation is calculated recursively. The keys for |
+ // dictionaries that are handled by recursive calls more shallow than |
+ // the current one are concatenated and passed through to deeper calls in |
+ // |path_prefix|. |
+ bool GetDifferingPathsHelper( |
+ const std::string& path_prefix, |
+ const DictionaryValue* other, |
+ std::vector<std::string>* different_paths) const; |
+ |
ValueMap dictionary_; |
DISALLOW_COPY_AND_ASSIGN(DictionaryValue); |