Index: components/policy/core/common/schema.cc |
diff --git a/components/policy/core/common/schema.cc b/components/policy/core/common/schema.cc |
index 92244789629f37bcd72a32c30487980870d91c6f..84a1a3c999feb6d98febc8dabc953273f15ba8f6 100644 |
--- a/components/policy/core/common/schema.cc |
+++ b/components/policy/core/common/schema.cc |
@@ -10,10 +10,10 @@ |
#include <utility> |
#include "base/compiler_specific.h" |
+#include "base/containers/scoped_ptr_map.h" |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/scoped_vector.h" |
-#include "base/stl_util.h" |
#include "base/strings/stringprintf.h" |
#include "components/json_schema/json_schema_constants.h" |
#include "components/json_schema/json_schema_validator.h" |
@@ -247,8 +247,7 @@ class Schema::InternalStorage |
// Cache for CompileRegex(), will memorize return value of every call to |
// CompileRegex() and return results directly next time. |
- mutable std::map<std::string, re2::RE2*> regex_cache_; |
- STLValueDeleter<std::map<std::string, re2::RE2*> > regex_cache_deleter_; |
+ mutable base::ScopedPtrMap<std::string, scoped_ptr<re2::RE2>> regex_cache_; |
SchemaData schema_data_; |
std::vector<std::string> strings_; |
@@ -262,10 +261,11 @@ class Schema::InternalStorage |
DISALLOW_COPY_AND_ASSIGN(InternalStorage); |
}; |
-Schema::InternalStorage::InternalStorage() |
- : regex_cache_deleter_(®ex_cache_) {} |
+Schema::InternalStorage::InternalStorage() { |
+} |
-Schema::InternalStorage::~InternalStorage() {} |
+Schema::InternalStorage::~InternalStorage() { |
+} |
// static |
scoped_refptr<const Schema::InternalStorage> Schema::InternalStorage::Wrap( |
@@ -342,11 +342,13 @@ Schema::InternalStorage::ParseSchema(const base::DictionaryValue& schema, |
re2::RE2* Schema::InternalStorage::CompileRegex( |
const std::string& pattern) const { |
- std::map<std::string, re2::RE2*>::iterator it = regex_cache_.find(pattern); |
+ base::ScopedPtrMap<std::string, scoped_ptr<re2::RE2>>::const_iterator it = |
+ regex_cache_.find(pattern); |
if (it == regex_cache_.end()) { |
- re2::RE2* compiled = new re2::RE2(pattern); |
- regex_cache_[pattern] = compiled; |
- return compiled; |
+ scoped_ptr<re2::RE2> compiled(new re2::RE2(pattern)); |
+ re2::RE2* compiled_ptr = compiled.get(); |
+ regex_cache_.insert(pattern, compiled.Pass()); |
+ return compiled_ptr; |
} |
return it->second; |
} |