Home | History | Annotate | Download | only in search
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_TOKENIZED_STRING_MATCH_H_
      6 #define CHROME_BROWSER_UI_APP_LIST_SEARCH_TOKENIZED_STRING_MATCH_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/strings/string16.h"
     12 #include "ui/base/range/range.h"
     13 
     14 namespace app_list {
     15 
     16 class TokenizedString;
     17 
     18 // TokenizedStringMatch takes two tokenized strings: one as the text and
     19 // the other one as the query. It matches the query against the text,
     20 // calculates a relevance score between [0, 1] and marks the matched portions
     21 // of text. A relevance of zero means the two are completely different to each
     22 // other. The higher the relevance score, the better the two strings are
     23 // matched. Matched portions of text are stored as index ranges.
     24 class TokenizedStringMatch {
     25  public:
     26   typedef std::vector<ui::Range> Hits;
     27 
     28   TokenizedStringMatch();
     29   ~TokenizedStringMatch();
     30 
     31   // Calculates the relevance and hits. Returns true if the two strings are
     32   // somewhat matched, i.e. relevance score is not zero.
     33   bool Calculate(const TokenizedString& query, const TokenizedString& text);
     34 
     35   // Convenience wrapper to calculate match from raw string input.
     36   bool Calculate(const string16& query, const string16& text);
     37 
     38   double relevance() const { return relevance_; }
     39   const Hits& hits() const { return hits_; }
     40 
     41  private:
     42   double relevance_;
     43   Hits hits_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(TokenizedStringMatch);
     46 };
     47 
     48 }  // namespace app_list
     49 
     50 #endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_TOKENIZED_STRING_MATCH_H_
     51