Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: components/prefs/pref_value_map.cc

Issue 2602553003: Remove base::ScopedPtrHashMap from components/prefs/. (Closed)
Patch Set: fix Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/prefs/pref_value_map.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/prefs/pref_value_map.h" 5 #include "components/prefs/pref_value_map.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/stl_util.h"
14 #include "base/values.h" 13 #include "base/values.h"
15 14
16 PrefValueMap::PrefValueMap() {} 15 PrefValueMap::PrefValueMap() {}
17 16
18 PrefValueMap::~PrefValueMap() {} 17 PrefValueMap::~PrefValueMap() {}
19 18
20 bool PrefValueMap::GetValue(const std::string& key, 19 bool PrefValueMap::GetValue(const std::string& key,
21 const base::Value** value) const { 20 const base::Value** value) const {
22 const base::Value* got_value = prefs_.get(key); 21 auto it = prefs_.find(key);
22 if (it == prefs_.end())
23 return false;
24
25 const base::Value* got_value = it->second.get();
23 if (value && got_value) 26 if (value && got_value)
24 *value = got_value; 27 *value = got_value;
25 28
26 return !!got_value; 29 return !!got_value;
27 } 30 }
28 31
29 bool PrefValueMap::GetValue(const std::string& key, base::Value** value) { 32 bool PrefValueMap::GetValue(const std::string& key, base::Value** value) {
30 base::Value* got_value = prefs_.get(key); 33 auto it = prefs_.find(key);
34 if (it == prefs_.end())
35 return false;
36
37 base::Value* got_value = it->second.get();
31 if (value && got_value) 38 if (value && got_value)
32 *value = got_value; 39 *value = got_value;
33 40
34 return !!got_value; 41 return !!got_value;
35 } 42 }
36 43
37 bool PrefValueMap::SetValue(const std::string& key, 44 bool PrefValueMap::SetValue(const std::string& key,
38 std::unique_ptr<base::Value> value) { 45 std::unique_ptr<base::Value> value) {
39 DCHECK(value); 46 DCHECK(value);
40 47
41 base::Value* old_value = prefs_.get(key); 48 std::unique_ptr<base::Value>& existing_value = prefs_[key];
42 if (old_value && value->Equals(old_value)) 49 if (existing_value && value->Equals(existing_value.get()))
43 return false; 50 return false;
44 51
45 prefs_.set(key, std::move(value)); 52 existing_value = std::move(value);
46 return true; 53 return true;
47 } 54 }
48 55
49 bool PrefValueMap::RemoveValue(const std::string& key) { 56 bool PrefValueMap::RemoveValue(const std::string& key) {
50 return prefs_.erase(key) != 0; 57 return prefs_.erase(key) != 0;
51 } 58 }
52 59
53 void PrefValueMap::Clear() { 60 void PrefValueMap::Clear() {
54 prefs_.clear(); 61 prefs_.clear();
55 } 62 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 void PrefValueMap::SetDouble(const std::string& key, const double value) { 118 void PrefValueMap::SetDouble(const std::string& key, const double value) {
112 SetValue(key, base::MakeUnique<base::FundamentalValue>(value)); 119 SetValue(key, base::MakeUnique<base::FundamentalValue>(value));
113 } 120 }
114 121
115 void PrefValueMap::GetDifferingKeys( 122 void PrefValueMap::GetDifferingKeys(
116 const PrefValueMap* other, 123 const PrefValueMap* other,
117 std::vector<std::string>* differing_keys) const { 124 std::vector<std::string>* differing_keys) const {
118 differing_keys->clear(); 125 differing_keys->clear();
119 126
120 // Put everything into ordered maps. 127 // Put everything into ordered maps.
121 std::map<std::string, base::Value*> this_prefs(prefs_.begin(), prefs_.end()); 128 std::map<std::string, base::Value*> this_prefs;
122 std::map<std::string, base::Value*> other_prefs(other->prefs_.begin(), 129 std::map<std::string, base::Value*> other_prefs;
123 other->prefs_.end()); 130 for (const auto& pair : prefs_)
131 this_prefs[pair.first] = pair.second.get();
132 for (const auto& pair : other->prefs_)
133 other_prefs[pair.first] = pair.second.get();
124 134
125 // Walk over the maps in lockstep, adding everything that is different. 135 // Walk over the maps in lockstep, adding everything that is different.
126 auto this_pref(this_prefs.begin()); 136 auto this_pref = this_prefs.begin();
127 auto other_pref(other_prefs.begin()); 137 auto other_pref = other_prefs.begin();
128 while (this_pref != this_prefs.end() && other_pref != other_prefs.end()) { 138 while (this_pref != this_prefs.end() && other_pref != other_prefs.end()) {
129 const int diff = this_pref->first.compare(other_pref->first); 139 const int diff = this_pref->first.compare(other_pref->first);
130 if (diff == 0) { 140 if (diff == 0) {
131 if (!this_pref->second->Equals(other_pref->second)) 141 if (!this_pref->second->Equals(other_pref->second))
132 differing_keys->push_back(this_pref->first); 142 differing_keys->push_back(this_pref->first);
133 ++this_pref; 143 ++this_pref;
134 ++other_pref; 144 ++other_pref;
135 } else if (diff < 0) { 145 } else if (diff < 0) {
136 differing_keys->push_back(this_pref->first); 146 differing_keys->push_back(this_pref->first);
137 ++this_pref; 147 ++this_pref;
138 } else if (diff > 0) { 148 } else if (diff > 0) {
139 differing_keys->push_back(other_pref->first); 149 differing_keys->push_back(other_pref->first);
140 ++other_pref; 150 ++other_pref;
141 } 151 }
142 } 152 }
143 153
144 // Add the remaining entries. 154 // Add the remaining entries.
145 for ( ; this_pref != this_prefs.end(); ++this_pref) 155 for ( ; this_pref != this_prefs.end(); ++this_pref)
146 differing_keys->push_back(this_pref->first); 156 differing_keys->push_back(this_pref->first);
147 for ( ; other_pref != other_prefs.end(); ++other_pref) 157 for ( ; other_pref != other_prefs.end(); ++other_pref)
148 differing_keys->push_back(other_pref->first); 158 differing_keys->push_back(other_pref->first);
149 } 159 }
OLDNEW
« no previous file with comments | « components/prefs/pref_value_map.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698