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

Side by Side Diff: components/policy/core/common/schema.cc

Issue 1096983002: Update usages of std::map to use ScopedPtrMap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@passwordmanager-scopedmemory
Patch Set: Rebase. Created 5 years, 6 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/policy/core/common/schema.h" 5 #include "components/policy/core/common/schema.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <climits> 8 #include <climits>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/containers/scoped_ptr_map.h"
13 #include "base/logging.h" 14 #include "base/logging.h"
14 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/scoped_vector.h" 16 #include "base/memory/scoped_vector.h"
16 #include "base/stl_util.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "components/json_schema/json_schema_constants.h" 18 #include "components/json_schema/json_schema_constants.h"
19 #include "components/json_schema/json_schema_validator.h" 19 #include "components/json_schema/json_schema_validator.h"
20 #include "components/policy/core/common/schema_internal.h" 20 #include "components/policy/core/common/schema_internal.h"
21 #include "third_party/re2/re2/re2.h" 21 #include "third_party/re2/re2/re2.h"
22 22
23 namespace schema = json_schema_constants; 23 namespace schema = json_schema_constants;
24 24
25 namespace policy { 25 namespace policy {
26 26
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 240
241 // Assigns the IDs in |id_map| to the pending references in the 241 // Assigns the IDs in |id_map| to the pending references in the
242 // |reference_list|. If an ID is missing then |error| is set and false is 242 // |reference_list|. If an ID is missing then |error| is set and false is
243 // returned; otherwise returns true. 243 // returned; otherwise returns true.
244 static bool ResolveReferences(const IdMap& id_map, 244 static bool ResolveReferences(const IdMap& id_map,
245 const ReferenceList& reference_list, 245 const ReferenceList& reference_list,
246 std::string* error); 246 std::string* error);
247 247
248 // Cache for CompileRegex(), will memorize return value of every call to 248 // Cache for CompileRegex(), will memorize return value of every call to
249 // CompileRegex() and return results directly next time. 249 // CompileRegex() and return results directly next time.
250 mutable std::map<std::string, re2::RE2*> regex_cache_; 250 mutable base::ScopedPtrMap<std::string, scoped_ptr<re2::RE2>> regex_cache_;
251 STLValueDeleter<std::map<std::string, re2::RE2*> > regex_cache_deleter_;
252 251
253 SchemaData schema_data_; 252 SchemaData schema_data_;
254 std::vector<std::string> strings_; 253 std::vector<std::string> strings_;
255 std::vector<SchemaNode> schema_nodes_; 254 std::vector<SchemaNode> schema_nodes_;
256 std::vector<PropertyNode> property_nodes_; 255 std::vector<PropertyNode> property_nodes_;
257 std::vector<PropertiesNode> properties_nodes_; 256 std::vector<PropertiesNode> properties_nodes_;
258 std::vector<RestrictionNode> restriction_nodes_; 257 std::vector<RestrictionNode> restriction_nodes_;
259 std::vector<int> int_enums_; 258 std::vector<int> int_enums_;
260 std::vector<const char*> string_enums_; 259 std::vector<const char*> string_enums_;
261 260
262 DISALLOW_COPY_AND_ASSIGN(InternalStorage); 261 DISALLOW_COPY_AND_ASSIGN(InternalStorage);
263 }; 262 };
264 263
265 Schema::InternalStorage::InternalStorage() 264 Schema::InternalStorage::InternalStorage() {
266 : regex_cache_deleter_(&regex_cache_) {} 265 }
267 266
268 Schema::InternalStorage::~InternalStorage() {} 267 Schema::InternalStorage::~InternalStorage() {
268 }
269 269
270 // static 270 // static
271 scoped_refptr<const Schema::InternalStorage> Schema::InternalStorage::Wrap( 271 scoped_refptr<const Schema::InternalStorage> Schema::InternalStorage::Wrap(
272 const SchemaData* data) { 272 const SchemaData* data) {
273 InternalStorage* storage = new InternalStorage(); 273 InternalStorage* storage = new InternalStorage();
274 storage->schema_data_.schema_nodes = data->schema_nodes; 274 storage->schema_data_.schema_nodes = data->schema_nodes;
275 storage->schema_data_.property_nodes = data->property_nodes; 275 storage->schema_data_.property_nodes = data->property_nodes;
276 storage->schema_data_.properties_nodes = data->properties_nodes; 276 storage->schema_data_.properties_nodes = data->properties_nodes;
277 storage->schema_data_.restriction_nodes = data->restriction_nodes; 277 storage->schema_data_.restriction_nodes = data->restriction_nodes;
278 storage->schema_data_.int_enums = data->int_enums; 278 storage->schema_data_.int_enums = data->int_enums;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 data->property_nodes = vector_as_array(&storage->property_nodes_); 335 data->property_nodes = vector_as_array(&storage->property_nodes_);
336 data->properties_nodes = vector_as_array(&storage->properties_nodes_); 336 data->properties_nodes = vector_as_array(&storage->properties_nodes_);
337 data->restriction_nodes = vector_as_array(&storage->restriction_nodes_); 337 data->restriction_nodes = vector_as_array(&storage->restriction_nodes_);
338 data->int_enums = vector_as_array(&storage->int_enums_); 338 data->int_enums = vector_as_array(&storage->int_enums_);
339 data->string_enums = vector_as_array(&storage->string_enums_); 339 data->string_enums = vector_as_array(&storage->string_enums_);
340 return storage; 340 return storage;
341 } 341 }
342 342
343 re2::RE2* Schema::InternalStorage::CompileRegex( 343 re2::RE2* Schema::InternalStorage::CompileRegex(
344 const std::string& pattern) const { 344 const std::string& pattern) const {
345 std::map<std::string, re2::RE2*>::iterator it = regex_cache_.find(pattern); 345 base::ScopedPtrMap<std::string, scoped_ptr<re2::RE2>>::const_iterator it =
346 regex_cache_.find(pattern);
346 if (it == regex_cache_.end()) { 347 if (it == regex_cache_.end()) {
347 re2::RE2* compiled = new re2::RE2(pattern); 348 scoped_ptr<re2::RE2> compiled(new re2::RE2(pattern));
348 regex_cache_[pattern] = compiled; 349 re2::RE2* compiled_ptr = compiled.get();
349 return compiled; 350 regex_cache_.insert(pattern, compiled.Pass());
351 return compiled_ptr;
350 } 352 }
351 return it->second; 353 return it->second;
352 } 354 }
353 355
354 // static 356 // static
355 void Schema::InternalStorage::DetermineStorageSizes( 357 void Schema::InternalStorage::DetermineStorageSizes(
356 const base::DictionaryValue& schema, 358 const base::DictionaryValue& schema,
357 StorageSizes* sizes) { 359 StorageSizes* sizes) {
358 std::string ref_string; 360 std::string ref_string;
359 if (schema.GetString(schema::kRef, &ref_string)) { 361 if (schema.GetString(schema::kRef, &ref_string)) {
(...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 return false; 1101 return false;
1100 } else { 1102 } else {
1101 int index = rnode->string_pattern_restriction.pattern_index; 1103 int index = rnode->string_pattern_restriction.pattern_index;
1102 DCHECK(index == rnode->string_pattern_restriction.pattern_index_backup); 1104 DCHECK(index == rnode->string_pattern_restriction.pattern_index_backup);
1103 re2::RE2* regex = storage_->CompileRegex(*storage_->string_enums(index)); 1105 re2::RE2* regex = storage_->CompileRegex(*storage_->string_enums(index));
1104 return re2::RE2::PartialMatch(str, *regex); 1106 return re2::RE2::PartialMatch(str, *regex);
1105 } 1107 }
1106 } 1108 }
1107 1109
1108 } // namespace policy 1110 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698