1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_PREFS_PREF_VALUE_MAP_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_PREFS_PREF_VALUE_MAP_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <map> 9*6777b538SAndroid Build Coastguard Worker #include <string> 10*6777b538SAndroid Build Coastguard Worker #include <vector> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/values.h" 14*6777b538SAndroid Build Coastguard Worker #include "components/prefs/prefs_export.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker // A generic string to value map used by the PrefStore implementations. 17*6777b538SAndroid Build Coastguard Worker class COMPONENTS_PREFS_EXPORT PrefValueMap { 18*6777b538SAndroid Build Coastguard Worker public: 19*6777b538SAndroid Build Coastguard Worker using Map = std::map<std::string, base::Value, std::less<void>>; 20*6777b538SAndroid Build Coastguard Worker using iterator = Map::iterator; 21*6777b538SAndroid Build Coastguard Worker using const_iterator = Map::const_iterator; 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker PrefValueMap(); 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker PrefValueMap(const PrefValueMap&) = delete; 26*6777b538SAndroid Build Coastguard Worker PrefValueMap& operator=(const PrefValueMap&) = delete; 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker virtual ~PrefValueMap(); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // Gets the value for |key| and stores it in |value|. Ownership remains with 31*6777b538SAndroid Build Coastguard Worker // the map. Returns true if a value is present. If not, |value| is not 32*6777b538SAndroid Build Coastguard Worker // touched. 33*6777b538SAndroid Build Coastguard Worker bool GetValue(base::StringPiece key, const base::Value** value) const; 34*6777b538SAndroid Build Coastguard Worker bool GetValue(base::StringPiece key, base::Value** value); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Sets a new |value| for |key|. Returns true if the value changed. 37*6777b538SAndroid Build Coastguard Worker bool SetValue(const std::string& key, base::Value value); 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // Removes the value for |key| from the map. Returns true if a value was 40*6777b538SAndroid Build Coastguard Worker // removed. 41*6777b538SAndroid Build Coastguard Worker bool RemoveValue(const std::string& key); 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker // Clears the map. 44*6777b538SAndroid Build Coastguard Worker void Clear(); 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // Clear the preferences which start with |prefix|. 47*6777b538SAndroid Build Coastguard Worker void ClearWithPrefix(const std::string& prefix); 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // Swaps the contents of two maps. 50*6777b538SAndroid Build Coastguard Worker void Swap(PrefValueMap* other); 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker iterator begin(); 53*6777b538SAndroid Build Coastguard Worker iterator end(); 54*6777b538SAndroid Build Coastguard Worker const_iterator begin() const; 55*6777b538SAndroid Build Coastguard Worker const_iterator end() const; 56*6777b538SAndroid Build Coastguard Worker bool empty() const; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Gets a boolean value for |key| and stores it in |value|. Returns true if 59*6777b538SAndroid Build Coastguard Worker // the value was found and of the proper type. 60*6777b538SAndroid Build Coastguard Worker bool GetBoolean(const std::string& key, bool* value) const; 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker // Sets the value for |key| to the boolean |value|. 63*6777b538SAndroid Build Coastguard Worker void SetBoolean(const std::string& key, bool value); 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker // Gets a string value for |key| and stores it in |value|. Returns true if 66*6777b538SAndroid Build Coastguard Worker // the value was found and of the proper type. 67*6777b538SAndroid Build Coastguard Worker bool GetString(const std::string& key, std::string* value) const; 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker // Sets the value for |key| to the string |value|. 70*6777b538SAndroid Build Coastguard Worker void SetString(const std::string& key, const std::string& value); 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker // Gets an int value for |key| and stores it in |value|. Returns true if 73*6777b538SAndroid Build Coastguard Worker // the value was found and of the proper type. 74*6777b538SAndroid Build Coastguard Worker bool GetInteger(const std::string& key, int* value) const; 75*6777b538SAndroid Build Coastguard Worker 76*6777b538SAndroid Build Coastguard Worker // Sets the value for |key| to the int |value|. 77*6777b538SAndroid Build Coastguard Worker void SetInteger(const std::string& key, const int value); 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker // Sets the value for |key| to the double |value|. 80*6777b538SAndroid Build Coastguard Worker void SetDouble(const std::string& key, const double value); 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker // Compares this value map against |other| and stores all key names that have 83*6777b538SAndroid Build Coastguard Worker // different values in |differing_keys|. This includes keys that are present 84*6777b538SAndroid Build Coastguard Worker // only in one of the maps. 85*6777b538SAndroid Build Coastguard Worker void GetDifferingKeys(const PrefValueMap* other, 86*6777b538SAndroid Build Coastguard Worker std::vector<std::string>* differing_keys) const; 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker // Copies the map into a Value::Dict. 89*6777b538SAndroid Build Coastguard Worker base::Value::Dict AsDict() const; 90*6777b538SAndroid Build Coastguard Worker 91*6777b538SAndroid Build Coastguard Worker private: 92*6777b538SAndroid Build Coastguard Worker Map prefs_; 93*6777b538SAndroid Build Coastguard Worker }; 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_PREFS_PREF_VALUE_MAP_H_ 96