1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project**********************************************************************
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*   Copyright (C) 2001-2005 IBM and others. All rights reserved.
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project**********************************************************************
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*   Date        Name        Description
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*  06/28/2001   synwee      Creation.
7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project**********************************************************************
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef USEARCH_H
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define USEARCH_H
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "unicode/utypes.h"
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if !UCONFIG_NO_COLLATION
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "unicode/ucol.h"
17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "unicode/ucoleitr.h"
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "unicode/ubrk.h"
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * \file
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * \brief C API: StringSearch
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * C Apis for an engine that provides language-sensitive text searching based
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * on the comparison rules defined in a <tt>UCollator</tt> data struct,
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * see <tt>ucol.h</tt>. This ensures that language eccentricity can be
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * handled, e.g. for the German collator, characters &szlig; and SS will be matched
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * if case is chosen to be ignored.
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * See the <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm">
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "ICU Collation Design Document"</a> for more information.
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * The algorithm implemented is a modified form of the Boyer Moore's search.
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * For more information  see
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <a href="http://icu.sourceforge.net/docs/papers/efficient_text_searching_in_java.html">
35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "Efficient Text Searching in Java"</a>, published in <i>Java Report</i>
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in February, 1999, for further information on the algorithm.
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * There are 2 match options for selection:<br>
39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Let S' be the sub-string of a text string S between the offsets start and
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * end <start, end>.
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <br>
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A pattern string P matches a text string S at the offsets <start, end>
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * if
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <pre>
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * option 1. Some canonical equivalent of P matches some canonical equivalent
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *           of S'
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * option 2. P matches S' and if P starts or ends with a combining mark,
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *           there exists no non-ignorable combining mark before or after S'
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *           in S respectively.
50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * </pre>
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Option 2. will be the default.
52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This search has APIs similar to that of other text iteration mechanisms
54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * such as the break iterators in <tt>ubrk.h</tt>. Using these
55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * APIs, it is easy to scan through text looking for all occurances of
56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * a given pattern. This search iterator allows changing of direction by
57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * calling a <tt>reset</tt> followed by a <tt>next</tt> or <tt>previous</tt>.
58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Though a direction change can occur without calling <tt>reset</tt> first,
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this operation comes with some speed penalty.
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Generally, match results in the forward direction will match the result
61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * matches in the backwards direction in the reverse order
62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <tt>usearch.h</tt> provides APIs to specify the starting position
64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * within the text string to be searched, e.g. <tt>usearch_setOffset</tt>,
65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <tt>usearch_preceding</tt> and <tt>usearch_following</tt>. Since the
66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * starting position will be set as it is specified, please take note that
67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * there are some dangerous positions which the search may render incorrect
68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * results:
69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <ul>
70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <li> The midst of a substring that requires normalization.
71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <li> If the following match is to be found, the position should not be the
72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      second character which requires to be swapped with the preceding
73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      character. Vice versa, if the preceding match is to be found,
74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      position to search from should not be the first character which
75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      requires to be swapped with the next character. E.g certain Thai and
76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      Lao characters require swapping.
77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <li> If a following pattern match is to be found, any position within a
78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      contracting sequence except the first will fail. Vice versa if a
79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      preceding pattern match is to be found, a invalid starting point
80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *      would be any character within a contracting sequence except the last.
81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * </ul>
82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A breakiterator can be used if only matches at logical breaks are desired.
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Using a breakiterator will only give you results that exactly matches the
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * boundaries given by the breakiterator. For instance the pattern "e" will
86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * not be found in the string "\u00e9" if a character break iterator is used.
87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Options are provided to handle overlapping matches.
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * E.g. In English, overlapping matches produces the result 0 and 2
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * for the pattern "abab" in the text "ababab", where else mutually
91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * exclusive matches only produce the result of 0.
92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Though collator attributes will be taken into consideration while
94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * performing matches, there are no APIs here for setting and getting the
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * attributes. These attributes can be set by getting the collator
96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * from <tt>usearch_getCollator</tt> and using the APIs in <tt>ucol.h</tt>.
97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Lastly to update String Search to the new collator attributes,
98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * usearch_reset() has to be called.
99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Restriction: <br>
101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Currently there are no composite characters that consists of a
102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * character with combining class > 0 before a character with combining
103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * class == 0. However, if such a character exists in the future, the
104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * search mechanism does not guarantee the results for option 1.
105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <p>
107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Example of use:<br>
108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * <pre><code>
109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * char *tgtstr = "The quick brown fox jumped over the lazy fox";
110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * char *patstr = "fox";
111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * UChar target[64];
112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * UChar pattern[16];
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * UErrorCode status = U_ZERO_ERROR;
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * u_uastrcpy(target, tgtstr);
115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * u_uastrcpy(pattern, patstr);
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * UStringSearch *search = usearch_open(pattern, -1, target, -1, "en_US",
118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *                                  &status);
119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * if (U_SUCCESS(status)) {
120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     for (int pos = usearch_first(search, &status);
121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *                                      pos != USEARCH_DONE;
122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *                                      pos = usearch_next(search, &status)) {
123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *         printf("Found match at %d pos, length is %d\n", pos,
124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *                                        usearch_getMatchLength(search));
125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     }
126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * }
127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * </code></pre>
128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * @stable ICU 2.4
129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* DONE is returned by previous() and next() after all valid matches have
133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* been returned, and by first() and last() if there are no matches at all.
134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define USEARCH_DONE -1
137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Data structure for searching
140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstruct UStringSearch;
143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Data structure for searching
145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projecttypedef struct UStringSearch UStringSearch;
148635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
149635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projecttypedef enum {
153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    /** Option for overlapping matches */
154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_OVERLAP,
155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    /**
156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Option for canonical matches. option 1 in header documentation.
157635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    The default value will be USEARCH_OFF
158635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    */
159635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_CANONICAL_MATCH,
160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_ATTRIBUTE_COUNT
161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} USearchAttribute;
162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projecttypedef enum {
167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    /** default value for any USearchAttribute */
168635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_DEFAULT = -1,
169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    /** value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH */
170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_OFF,
171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    /** value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH */
172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_ON,
173635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    USEARCH_ATTRIBUTE_VALUE_COUNT
174635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} USearchAttributeValue;
175635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* open and close ------------------------------------------------------ */
177635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
178635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
179635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Creating a search iterator data struct using the argument locale language
180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* rule set. A collator will be created in the process, which will be owned by
181635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* this search and will be deleted in <tt>usearch_close</tt>.
182635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param pattern for matching
183635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param patternlength length of the pattern, -1 for null-termination
184635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param text text string
185635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param textlength length of the text string, -1 for null-termination
186635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param locale name of locale for the rules to be used
187635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param breakiter A BreakIterator that will be used to restrict the points
188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  at which matches are detected. If a match is found, but
189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  the match's start or end index is not a boundary as
190635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  determined by the <tt>BreakIterator</tt>, the match will
191635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  be rejected and another will be searched for.
192635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  If this parameter is <tt>NULL</tt>, no break detection is
193635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  attempted.
194635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs. If pattern or text is NULL, or if
195635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               patternlength or textlength is 0 then an
196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               U_ILLEGAL_ARGUMENT_ERROR is returned.
197635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return search iterator data structure, or NULL if there is an error.
198635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
199635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
200635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern,
201635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                              int32_t         patternlength,
202635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                        const UChar          *text,
203635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                              int32_t         textlength,
204635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                        const char           *locale,
205635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                              UBreakIterator *breakiter,
206635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                              UErrorCode     *status);
207635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
208635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
209635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Creating a search iterator data struct using the argument collator language
210635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* rule set. Note, user retains the ownership of this collator, thus the
211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* responsibility of deletion lies with the user.
212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* NOTE: string search cannot be instantiated from a collator that has
213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* collate digits as numbers (CODAN) turned on.
214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param pattern for matching
215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param patternlength length of the pattern, -1 for null-termination
216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param text text string
217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param textlength length of the text string, -1 for null-termination
218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param collator used for the language rules
219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param breakiter A BreakIterator that will be used to restrict the points
220635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  at which matches are detected. If a match is found, but
221635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  the match's start or end index is not a boundary as
222635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  determined by the <tt>BreakIterator</tt>, the match will
223635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  be rejected and another will be searched for.
224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  If this parameter is <tt>NULL</tt>, no break detection is
225635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  attempted.
226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs. If collator, pattern or text is NULL,
227635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               or if patternlength or textlength is 0 then an
228635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               U_ILLEGAL_ARGUMENT_ERROR is returned.
229635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return search iterator data structure, or NULL if there is an error.
230635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
231635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
232635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE UStringSearch * U_EXPORT2 usearch_openFromCollator(
233635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                         const UChar *pattern,
234635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               int32_t         patternlength,
235635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                         const UChar          *text,
236635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               int32_t         textlength,
237635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                         const UCollator      *collator,
238635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UBreakIterator *breakiter,
239635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UErrorCode     *status);
240635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
241635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
242635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Destroying and cleaning up the search iterator data struct.
243635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a collator is created in <tt>usearch_open</tt>, it will be destroyed here.
244635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param searchiter data struct to clean up
245635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
246635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
247635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_close(UStringSearch *searchiter);
248635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
249635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* get and set methods -------------------------------------------------- */
250635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
251635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
252635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Sets the current position in the text string which the next search will
253635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* start from. Clears previous states.
254635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* This method takes the argument index and sets the position in the text
255635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* string accordingly without checking if the index is pointing to a
256635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* valid starting point to begin searching.
257635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Search positions that may render incorrect results are highlighted in the
258635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* header comments
259635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
260635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param position position to start next search from. If position is less
261635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*          than or greater than the text range for searching,
262635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*          an U_INDEX_OUTOFBOUNDS_ERROR will be returned
263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status error status if any.
264635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
265635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
266635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,
267635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                        int32_t    position,
268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                        UErrorCode    *status);
269635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
270635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
271635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Return the current index in the string text being searched.
272635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If the iteration has gone past the end of the text (or past the beginning
273635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* for a backwards search), <tt>USEARCH_DONE</tt> is returned.
274635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
275635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
276635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
277635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
278635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
279635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
280635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
281635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Sets the text searching attributes located in the enum USearchAttribute
282635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* with values from the enum USearchAttributeValue.
283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>USEARCH_DEFAULT</tt> can be used for all attributes for resetting.
284635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
285635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param attribute text attribute to be set
286635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param value text attribute value
287635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getAttribute
289635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
290635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
291635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch         *strsrch,
292635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                           USearchAttribute       attribute,
293635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                           USearchAttributeValue  value,
294635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                           UErrorCode            *status);
295635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
296635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
297635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Gets the text searching attributes.
298635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
299635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param attribute text attribute to be retrieve
300635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return text attribute value
301635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_setAttribute
302635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
303635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
304635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute(
305635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                         const UStringSearch    *strsrch,
306635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               USearchAttribute  attribute);
307635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
308635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
309635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the index to the match in the text string that was searched.
310635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* This call returns a valid result only after a successful call to
311635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>,
312635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* or <tt>usearch_last</tt>.
313635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Just after construction, or after a searching method returns
314635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>USEARCH_DONE</tt>, this method will return <tt>USEARCH_DONE</tt>.
315635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <p>
316635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Use <tt>usearch_getMatchedLength</tt> to get the matched string length.
317635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
318635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return index to a substring within the text string that is being
319635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         searched.
320635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_first
321635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_next
322635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_previous
323635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_last
324635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
325635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
326635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
327635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_getMatchedStart(
328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               const UStringSearch *strsrch);
329635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
331635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the length of text in the string which matches the search pattern.
332635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* This call returns a valid result only after a successful call to
333635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>,
334635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* or <tt>usearch_last</tt>.
335635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Just after construction, or after a searching method returns
336635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>USEARCH_DONE</tt>, this method will return 0.
337635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
338635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The length of the match in the string text, or 0 if there is no
339635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         match currently.
340635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_first
341635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_next
342635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_previous
343635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_last
344635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
345635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
346635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
347635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_getMatchedLength(
348635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               const UStringSearch *strsrch);
349635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
350635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
351635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the text that was matched by the most recent call to
352635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>,
353635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* or <tt>usearch_last</tt>.
354635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If the iterator is not pointing at a valid match (e.g. just after
355635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* construction or after <tt>USEARCH_DONE</tt> has been returned, returns
356635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* an empty string. If result is not large enough to store the matched text,
357635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* result will be filled with the partial text and an U_BUFFER_OVERFLOW_ERROR
358635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* will be returned in status. result will be null-terminated whenever
359635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* possible. If the buffer fits the matched text exactly, a null-termination
360635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* is not possible, then a U_STRING_NOT_TERMINATED_ERROR set in status.
361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Pre-flighting can be either done with length = 0 or the API
362635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_getMatchLength</tt>.
363635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
364635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param result UChar buffer to store the matched string
365635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param resultCapacity length of the result buffer
366635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status error returned if result is not large enough
367635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return exact length of the matched text, not counting the null-termination
368635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_first
369635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_next
370635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_previous
371635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_last
372635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
373635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
374635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
375635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch,
376635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                            UChar         *result,
377635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                            int32_t        resultCapacity,
378635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                            UErrorCode    *status);
379635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
380635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if !UCONFIG_NO_BREAK_ITERATION
381635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
382635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
383635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Set the BreakIterator that will be used to restrict the points at which
384635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* matches are detected.
385635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
386635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param breakiter A BreakIterator that will be used to restrict the points
387635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  at which matches are detected. If a match is found, but
388635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  the match's start or end index is not a boundary as
389635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  determined by the <tt>BreakIterator</tt>, the match will
390635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  be rejected and another will be searched for.
391635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  If this parameter is <tt>NULL</tt>, no break detection is
392635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*                  attempted.
393635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
394635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getBreakIterator
395635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
396635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
397635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch  *strsrch,
398635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UBreakIterator *breakiter,
399635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UErrorCode     *status);
400635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
401635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
402635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the BreakIterator that is used to restrict the points at which
403635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* matches are detected. This will be the same object that was passed to the
404635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* constructor or to <tt>usearch_setBreakIterator</tt>. Note that
405635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>NULL</tt>
406635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* is a legal value; it means that break detection should not be attempted.
407635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
408635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return break iterator used
409635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_setBreakIterator
410635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
411635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
412635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE const UBreakIterator * U_EXPORT2 usearch_getBreakIterator(
413635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                              const UStringSearch *strsrch);
414635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
415635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
416635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
417635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
418635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Set the string text to be searched. Text iteration will hence begin at the
419635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* start of the text string. This method is useful if you want to re-use an
420635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* iterator to search for the same pattern within a different body of text.
421635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
422635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param text new string to look for match
423635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param textlength length of the new string, -1 for null-termination
424635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs. If text is NULL, or textlength is 0
425635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change
426635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               done to strsrch.
427635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getText
428635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
429635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
430635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_setText(      UStringSearch *strsrch,
431635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                      const UChar         *text,
432635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                            int32_t        textlength,
433635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                            UErrorCode    *status);
434635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
435635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
436635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Return the string text to be searched.
437635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
438635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param length returned string text length
439635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return string text
440635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_setText
441635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
442635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
443635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch,
444635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               int32_t       *length);
445635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
446635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
447635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Gets the collator used for the language rules.
448635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <p>
449635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Deleting the returned <tt>UCollator</tt> before calling
450635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_close</tt> would cause the string search to fail.
451635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_close</tt> will delete the collator if this search owns it.
452635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
453635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return collator
454635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
455635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
456635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE UCollator * U_EXPORT2 usearch_getCollator(
457635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               const UStringSearch *strsrch);
458635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
459635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
460635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Sets the collator used for the language rules. User retains the ownership
461635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* of this collator, thus the responsibility of deletion lies with the user.
462635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* This method causes internal data such as Boyer-Moore shift tables to
463635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* be recalculated, but the iterator's position is unchanged.
464635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
465635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param collator to be used
466635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
467635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
468635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
469635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_setCollator(      UStringSearch *strsrch,
470635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                          const UCollator     *collator,
471635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                                UErrorCode    *status);
472635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
473635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
474635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Sets the pattern used for matching.
475635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Internal data like the Boyer Moore table will be recalculated, but the
476635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* iterator's position is unchanged.
477635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
478635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param pattern string
479635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param patternlength pattern length, -1 for null-terminated string
480635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs. If text is NULL, or textlength is 0
481635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change
482635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               done to strsrch.
483635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
484635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
485635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_setPattern(      UStringSearch *strsrch,
486635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                         const UChar         *pattern,
487635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               int32_t        patternlength,
488635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UErrorCode    *status);
489635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
490635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
491635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Gets the search pattern
492635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
493635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param length return length of the pattern, -1 indicates that the pattern
494635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*               is null-terminated
495635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return pattern string
496635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
497635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
498635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE const UChar * U_EXPORT2 usearch_getPattern(
499635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               const UStringSearch *strsrch,
500635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                                     int32_t       *length);
501635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
502635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* methods ------------------------------------------------------------- */
503635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
504635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
505635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the first index at which the string text matches the search
506635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* pattern.
507635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* The iterator is adjusted so that its current index (as returned by
508635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>usearch_getOffset</tt>) is the match position if one was found.
509635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
510635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>.
511635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
512635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
513635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The character index of the first match, or
514635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <tt>USEARCH_DONE</tt> if there are no matches.
515635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getOffset
516635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
517635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
518635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
519635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch,
520635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                           UErrorCode    *status);
521635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
522635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
523635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the first index greater than <tt>position</tt> at which the string
524635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* text
525635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* matches the search pattern. The iterator is adjusted so that its current
526635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
527635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* one was found.
528635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
529635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
530635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <p>
531635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Search positions that may render incorrect results are highlighted in the
532635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* header comments. If position is less than or greater than the text range
533635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned
534635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
535635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param position to start the search at
536635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
537635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The character index of the first match following <tt>pos</tt>,
538635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         or <tt>USEARCH_DONE</tt> if there are no matches.
539635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getOffset
540635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
541635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
542635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
543635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch,
544635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               int32_t    position,
545635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UErrorCode    *status);
546635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
547635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
548635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the last index in the target text at which it matches the search
549635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* pattern. The iterator is adjusted so that its current
550635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
551635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* one was found.
552635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
553635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>.
554635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
555635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
556635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The index of the first match, or <tt>USEARCH_DONE</tt> if there
557635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         are no matches.
558635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getOffset
559635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
560635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
561635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
562635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch,
563635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                          UErrorCode    *status);
564635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
565635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
566635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the first index less than <tt>position</tt> at which the string text
567635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* matches the search pattern. The iterator is adjusted so that its current
568635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
569635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* one was found.
570635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
571635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
572635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* <p>
573635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Search positions that may render incorrect results are highlighted in the
574635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* header comments. If position is less than or greater than the text range
575635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned
576635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
577635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param position index position the search is to begin at
578635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
579635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The character index of the first match preceding <tt>pos</tt>,
580635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         or <tt>USEARCH_DONE</tt> if there are no matches.
581635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getOffset
582635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
583635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
584635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
585635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch,
586635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               int32_t    position,
587635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                               UErrorCode    *status);
588635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
589635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
590635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the index of the next point at which the string text matches the
591635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* search pattern, starting from the current position.
592635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* The iterator is adjusted so that its current
593635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
594635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* one was found.
595635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
596635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
597635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
598635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
599635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The index of the next match after the current position, or
600635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         <tt>USEARCH_DONE</tt> if there are no more matches.
601635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_first
602635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getOffset
603635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
604635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
605635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
606635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
607635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                          UErrorCode    *status);
608635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
609635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
610635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Returns the index of the previous point at which the string text matches
611635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the search pattern, starting at the current position.
612635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* The iterator is adjusted so that its current
613635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
614635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* one was found.
615635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
616635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
617635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
618635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param status for errors if it occurs
619635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @return The index of the previous match before the current position,
620635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*         or <tt>USEARCH_DONE</tt> if there are no more matches.
621635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_last
622635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_getOffset
623635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #USEARCH_DONE
624635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
625635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
626635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
627635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                              UErrorCode    *status);
628635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
629635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
630635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Reset the iteration.
631635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* Search will begin at the start of the text string if a forward iteration
632635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* is initiated before a backwards iteration. Otherwise if a backwards
633635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* iteration is initiated before a forwards iteration, the search will begin
634635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* at the end of the text string.
635635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @param strsrch search iterator data struct
636635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @see #usearch_first
637635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project* @stable ICU 2.4
638635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
639635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectU_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch);
640635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
641635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif /* #if !UCONFIG_NO_COLLATION */
642635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
643635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
644