xref: /aosp_15_r20/external/cronet/components/prefs/pref_value_map.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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