00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#ifndef SEARCH_H
00011
#define SEARCH_H
00012
00013
#include "unicode/unistr.h"
00014
#include "unicode/chariter.h"
00015
#include "unicode/brkiter.h"
00016
#include "unicode/usearch.h"
00017
00018
struct USearch;
00019
typedef struct USearch USearch;
00020
00021 U_NAMESPACE_BEGIN
00022
00061 class U_I18N_API SearchIterator {
00062
00063
public:
00064
00065
00066
00073 SearchIterator(
const SearchIterator &other);
00074
00079
virtual ~SearchIterator();
00080
00081
00082
00094
virtual void setOffset(int32_t position, UErrorCode &status) = 0;
00095
00104
virtual int32_t getOffset(
void)
const = 0;
00105
00115
void setAttribute(USearchAttribute attribute,
00116 USearchAttributeValue value,
00117 UErrorCode &status);
00118
00125 USearchAttributeValue getAttribute(USearchAttribute attribute)
const;
00126
00139 int32_t getMatchedStart(
void)
const;
00140
00151 int32_t getMatchedLength(
void)
const;
00152
00163
void getMatchedText(
UnicodeString &result)
const;
00164
00179
void setBreakIterator(
BreakIterator *breakiter, UErrorCode &status);
00180
00190
const BreakIterator * getBreakIterator(
void)
const;
00191
00202
virtual void setText(
const UnicodeString &text, UErrorCode &status);
00203
00219
virtual void setText(
CharacterIterator &text, UErrorCode &status);
00220
00226
const UnicodeString & getText(
void)
const;
00227
00228
00229
00238
virtual UBool operator==(
const SearchIterator &that)
const;
00239
00246 UBool operator!=(
const SearchIterator &that)
const;
00247
00248
00249
00257
virtual SearchIterator* safeClone(
void)
const = 0;
00258
00271 int32_t first(UErrorCode &status);
00272
00287 int32_t following(int32_t position, UErrorCode &status);
00288
00301 int32_t last(UErrorCode &status);
00302
00317 int32_t preceding(int32_t position, UErrorCode &status);
00318
00332 int32_t next(UErrorCode &status);
00333
00346 int32_t previous(UErrorCode &status);
00347
00356
virtual void reset();
00357
00358
protected:
00359
00360
00364 USearch *m_search_;
00365
00373 BreakIterator *m_breakiterator_;
00374
00378 UnicodeString m_text_;
00379
00380
00381
00386 SearchIterator();
00387
00400 SearchIterator(
const UnicodeString &text,
00401
BreakIterator *breakiter = NULL);
00402
00419 SearchIterator(
CharacterIterator &text,
BreakIterator *breakiter = NULL);
00420
00421
00422
00428 SearchIterator & operator=(
const SearchIterator &that);
00429
00447
virtual int32_t handleNext(int32_t position, UErrorCode &status)
00448 = 0;
00449
00467
virtual int32_t handlePrev(int32_t position, UErrorCode &status)
00468 = 0;
00469
00477
virtual void setMatchLength(int32_t length);
00478
00486
virtual void setMatchStart(int32_t position);
00487
00491
void setMatchNotFound();
00492 };
00493
00494 inline UBool
SearchIterator::operator!=(
const SearchIterator &that)
const
00495
{
00496
return !
operator==(that);
00497 }
00498 U_NAMESPACE_END
00499
00500
#endif
00501