string_search.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1// Copyright (c) 2011 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 BASE_I18N_STRING_SEARCH_H_
6#define BASE_I18N_STRING_SEARCH_H_
7
8#include "base/i18n/base_i18n_export.h"
9#include "base/strings/string16.h"
10
11struct UStringSearch;
12
13namespace base {
14namespace i18n {
15
16// Returns true if |in_this| contains |find_this|. If |match_index| or
17// |match_length| are non-NULL, they are assigned the start position and total
18// length of the match.
19//
20// Only differences between base letters are taken into consideration. Case and
21// accent differences are ignored. Please refer to 'primary level' in
22// http://userguide.icu-project.org/collation/concepts for additional details.
23BASE_I18N_EXPORT
24    bool StringSearchIgnoringCaseAndAccents(const string16& find_this,
25                                            const string16& in_this,
26                                            size_t* match_index,
27                                            size_t* match_length);
28
29// This class is for speeding up multiple StringSearchIgnoringCaseAndAccents()
30// with the same |find_this| argument. |find_this| is passed as the constructor
31// argument, and precomputation for searching is done only at that timing.
32class BASE_I18N_EXPORT FixedPatternStringSearchIgnoringCaseAndAccents {
33 public:
34  explicit FixedPatternStringSearchIgnoringCaseAndAccents(
35      const string16& find_this);
36  ~FixedPatternStringSearchIgnoringCaseAndAccents();
37
38  // Returns true if |in_this| contains |find_this|. If |match_index| or
39  // |match_length| are non-NULL, they are assigned the start position and total
40  // length of the match.
41  bool Search(const string16& in_this,
42              size_t* match_index,
43              size_t* match_length);
44
45 private:
46  string16 find_this_;
47  UStringSearch* search_;
48};
49
50}  // namespace i18n
51}  // namespace base
52
53#endif  // BASE_I18N_STRING_SEARCH_H_
54