Index: components/query_parser/query_parser.cc |
diff --git a/components/query_parser/query_parser.cc b/components/query_parser/query_parser.cc |
index 260a75afd9f6132664bb8932b0186ae98736422f..c65b06ee2525fb24f1cdc430ec3519afef4a8f3a 100644 |
--- a/components/query_parser/query_parser.cc |
+++ b/components/query_parser/query_parser.cc |
@@ -11,7 +11,7 @@ |
#include "base/i18n/case_conversion.h" |
#include "base/logging.h" |
#include "base/macros.h" |
-#include "base/stl_util.h" |
+#include "base/memory/ptr_util.h" |
#include "base/strings/utf_string_conversions.h" |
namespace query_parser { |
@@ -156,9 +156,9 @@ class QueryNodeList : public QueryNode { |
QueryNodeList(); |
~QueryNodeList() override; |
- QueryNodeStarVector* children() { return &children_; } |
+ QueryNodeVector* children() { return &children_; } |
- void AddChild(QueryNode* node); |
+ void AddChild(std::unique_ptr<QueryNode> node); |
// Remove empty subnodes left over from other parsing. |
void RemoveEmptySubnodes(); |
@@ -175,7 +175,7 @@ class QueryNodeList : public QueryNode { |
protected: |
int AppendChildrenToString(base::string16* query) const; |
- QueryNodeStarVector children_; |
+ QueryNodeVector children_; |
private: |
DISALLOW_COPY_AND_ASSIGN(QueryNodeList); |
@@ -184,11 +184,10 @@ class QueryNodeList : public QueryNode { |
QueryNodeList::QueryNodeList() {} |
QueryNodeList::~QueryNodeList() { |
- base::STLDeleteElements(&children_); |
} |
-void QueryNodeList::AddChild(QueryNode* node) { |
- children_.push_back(node); |
+void QueryNodeList::AddChild(std::unique_ptr<QueryNode> node) { |
+ children_.push_back(std::move(node)); |
} |
void QueryNodeList::RemoveEmptySubnodes() { |
@@ -196,12 +195,11 @@ void QueryNodeList::RemoveEmptySubnodes() { |
if (children_[i]->IsWord()) |
continue; |
- QueryNodeList* list_node = static_cast<QueryNodeList*>(children_[i]); |
+ QueryNodeList* list_node = static_cast<QueryNodeList*>(children_[i].get()); |
list_node->RemoveEmptySubnodes(); |
if (list_node->children()->empty()) { |
children_.erase(children_.begin() + i); |
--i; |
- delete list_node; |
} |
} |
} |
@@ -237,8 +235,7 @@ void QueryNodeList::AppendWords(std::vector<base::string16>* words) const { |
int QueryNodeList::AppendChildrenToString(base::string16* query) const { |
int num_words = 0; |
- for (QueryNodeStarVector::const_iterator node = children_.begin(); |
- node != children_.end(); ++node) { |
+ for (auto node = children_.begin(); node != children_.end(); ++node) { |
if (node != children_.begin()) |
query->push_back(L' '); |
num_words += (*node)->AppendToSQLiteQuery(query); |
@@ -358,14 +355,14 @@ void QueryParser::ParseQueryWords(const base::string16& query, |
void QueryParser::ParseQueryNodes(const base::string16& query, |
MatchingAlgorithm matching_algorithm, |
- QueryNodeStarVector* nodes) { |
+ QueryNodeVector* nodes) { |
QueryNodeList root; |
if (ParseQueryImpl(base::i18n::ToLower(query), matching_algorithm, &root)) |
nodes->swap(*root.children()); |
} |
bool QueryParser::DoesQueryMatch(const base::string16& text, |
- const QueryNodeStarVector& query_nodes, |
+ const QueryNodeVector& query_nodes, |
Snippet::MatchPositions* match_positions) { |
if (query_nodes.empty()) |
return false; |
@@ -396,7 +393,7 @@ bool QueryParser::DoesQueryMatch(const base::string16& text, |
} |
bool QueryParser::DoesQueryMatch(const QueryWordVector& query_words, |
- const QueryNodeStarVector& query_nodes) { |
+ const QueryNodeVector& query_nodes) { |
if (query_nodes.empty() || query_words.empty()) |
return false; |
@@ -426,17 +423,19 @@ bool QueryParser::ParseQueryImpl(const base::string16& query, |
// is not necessarily a word, but could also be a sequence of punctuation |
// or whitespace. |
if (iter.IsWord()) { |
- QueryNodeWord* word_node = new QueryNodeWord(iter.GetString(), |
- matching_algorithm); |
+ std::unique_ptr<QueryNodeWord> word_node = |
+ base::MakeUnique<QueryNodeWord>(iter.GetString(), matching_algorithm); |
if (in_quotes) |
word_node->set_literal(true); |
- query_stack.back()->AddChild(word_node); |
+ query_stack.back()->AddChild(std::move(word_node)); |
} else { // Punctuation. |
if (IsQueryQuote(query[iter.prev()])) { |
if (!in_quotes) { |
- QueryNodeList* quotes_node = new QueryNodePhrase; |
- query_stack.back()->AddChild(quotes_node); |
- query_stack.push_back(quotes_node); |
+ std::unique_ptr<QueryNodeList> quotes_node = |
+ base::MakeUnique<QueryNodePhrase>(); |
+ QueryNodeList* quotes_node_ptr = quotes_node.get(); |
+ query_stack.back()->AddChild(std::move(quotes_node)); |
+ query_stack.push_back(quotes_node_ptr); |
in_quotes = true; |
} else { |
query_stack.pop_back(); // Stop adding to the quoted phrase. |