1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_INDEX_H_
6 #define COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_INDEX_H_
13 #include "base/basictypes.h"
14 #include "base/strings/string16.h"
15 #include "components/query_parser/query_parser.h"
24 // BookmarkIndex maintains an index of the titles and URLs of bookmarks for
25 // quick look up. BookmarkIndex is owned and maintained by BookmarkModel, you
26 // shouldn't need to interact directly with BookmarkIndex.
28 // BookmarkIndex maintains the index (index_) as a map of sets. The map (type
29 // Index) maps from a lower case string to the set (type NodeSet) of
30 // BookmarkNodes that contain that string in their title or URL.
33 // |languages| is used to help parse IDNs in URLs for the bookmark index.
34 BookmarkIndex(BookmarkClient
* client
,
35 const std::string
& languages
);
38 // Invoked when a bookmark has been added to the model.
39 void Add(const BookmarkNode
* node
);
41 // Invoked when a bookmark has been removed from the model.
42 void Remove(const BookmarkNode
* node
);
44 // Returns up to |max_count| of bookmarks containing each term from
45 // the text |query| in either the title or the URL.
46 void GetBookmarksMatching(
47 const base::string16
& query
,
49 std::vector
<BookmarkMatch
>* results
);
52 typedef std::vector
<const BookmarkNode
*> Nodes
;
53 typedef std::set
<const BookmarkNode
*> NodeSet
;
54 typedef std::map
<base::string16
, NodeSet
> Index
;
57 typedef std::vector
<Match
> Matches
;
59 // Extracts |matches.nodes| into Nodes, sorts the pairs in decreasing order of
60 // typed count (if supported by the client), and then de-dupes the matches.
61 void SortMatches(const Matches
& matches
, Nodes
* sorted_nodes
) const;
63 // Add |node| to |results| if the node matches the query.
64 void AddMatchToResults(
65 const BookmarkNode
* node
,
66 query_parser::QueryParser
* parser
,
67 const query_parser::QueryNodeStarVector
& query_nodes
,
68 std::vector
<BookmarkMatch
>* results
);
70 // Populates |matches| for the specified term. If |first_term| is true, this
71 // is the first term in the query. Returns true if there is at least one node
73 bool GetBookmarksMatchingTerm(const base::string16
& term
,
77 // Iterates over |matches| updating each Match's nodes to contain the
78 // intersection of the Match's current nodes and the nodes at |index_i|.
79 // If the intersection is empty, the Match is removed.
81 // This is invoked from GetBookmarksMatchingTerm.
82 void CombineMatchesInPlace(const Index::const_iterator
& index_i
,
85 // Iterates over |current_matches| calculating the intersection between the
86 // Match's nodes and the nodes at |index_i|. If the intersection between the
87 // two is non-empty, a new match is added to |result|.
89 // This differs from CombineMatchesInPlace in that if the intersection is
90 // non-empty the result is added to result, not combined in place. This
91 // variant is used for prefix matching.
93 // This is invoked from GetBookmarksMatchingTerm.
94 void CombineMatches(const Index::const_iterator
& index_i
,
95 const Matches
& current_matches
,
98 // Returns the set of query words from |query|.
99 std::vector
<base::string16
> ExtractQueryWords(const base::string16
& query
);
101 // Adds |node| to |index_|.
102 void RegisterNode(const base::string16
& term
, const BookmarkNode
* node
);
104 // Removes |node| from |index_|.
105 void UnregisterNode(const base::string16
& term
, const BookmarkNode
* node
);
109 BookmarkClient
* const client_
;
111 // Languages used to help parse IDNs in URLs for the bookmark index.
112 const std::string languages_
;
114 DISALLOW_COPY_AND_ASSIGN(BookmarkIndex
);
117 } // namespace bookmarks
119 #endif // COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_INDEX_H_