00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef SEARCH_H
00013 #define SEARCH_H
00014
00015 #include "unicode/utypes.h"
00016
00022 #if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
00023
00024 #include "unicode/uobject.h"
00025 #include "unicode/unistr.h"
00026 #include "unicode/chariter.h"
00027 #include "unicode/brkiter.h"
00028 #include "unicode/usearch.h"
00029
00033 struct USearch;
00037 typedef struct USearch USearch;
00038
00039 U_NAMESPACE_BEGIN
00040
00081 class U_I18N_API SearchIterator : public UObject {
00082
00083 public:
00084
00085
00086
00093 SearchIterator(const SearchIterator &other);
00094
00099 virtual ~SearchIterator();
00100
00101
00102
00116 virtual void setOffset(int32_t position, UErrorCode &status) = 0;
00117
00126 virtual int32_t getOffset(void) const = 0;
00127
00137 void setAttribute(USearchAttribute attribute,
00138 USearchAttributeValue value,
00139 UErrorCode &status);
00140
00147 USearchAttributeValue getAttribute(USearchAttribute attribute) const;
00148
00165 int32_t getMatchedStart(void) const;
00166
00181 int32_t getMatchedLength(void) const;
00182
00197 void getMatchedText(UnicodeString &result) const;
00198
00214 void setBreakIterator(BreakIterator *breakiter, UErrorCode &status);
00215
00226 const BreakIterator * getBreakIterator(void) const;
00227
00238 virtual void setText(const UnicodeString &text, UErrorCode &status);
00239
00255 virtual void setText(CharacterIterator &text, UErrorCode &status);
00256
00262 const UnicodeString & getText(void) const;
00263
00264
00265
00274 virtual UBool operator==(const SearchIterator &that) const;
00275
00282 UBool operator!=(const SearchIterator &that) const;
00283
00284
00285
00293 virtual SearchIterator* safeClone(void) const = 0;
00294
00308 int32_t first(UErrorCode &status);
00309
00327 int32_t following(int32_t position, UErrorCode &status);
00328
00342 int32_t last(UErrorCode &status);
00343
00367 int32_t preceding(int32_t position, UErrorCode &status);
00368
00383 int32_t next(UErrorCode &status);
00384
00398 int32_t previous(UErrorCode &status);
00399
00408 virtual void reset();
00409
00410 protected:
00411
00412
00417 USearch *m_search_;
00418
00427 BreakIterator *m_breakiterator_;
00428
00433 UnicodeString m_text_;
00434
00435
00436
00442 SearchIterator();
00443
00459 SearchIterator(const UnicodeString &text,
00460 BreakIterator *breakiter = NULL);
00461
00481 SearchIterator(CharacterIterator &text, BreakIterator *breakiter = NULL);
00482
00483
00484
00491 SearchIterator & operator=(const SearchIterator &that);
00492
00512 virtual int32_t handleNext(int32_t position, UErrorCode &status)
00513 = 0;
00514
00534 virtual int32_t handlePrev(int32_t position, UErrorCode &status)
00535 = 0;
00536
00547 virtual void setMatchLength(int32_t length);
00548
00559 virtual void setMatchStart(int32_t position);
00560
00565 void setMatchNotFound();
00566 };
00567
00568 inline UBool SearchIterator::operator!=(const SearchIterator &that) const
00569 {
00570 return !operator==(that);
00571 }
00572 U_NAMESPACE_END
00573
00574 #endif
00575
00576 #endif
00577