00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef SEARCH_H
00011 #define SEARCH_H
00012
00013 #include "unicode/utypes.h"
00014
00020 #if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
00021
00022 #include "unicode/uobject.h"
00023 #include "unicode/unistr.h"
00024 #include "unicode/chariter.h"
00025 #include "unicode/brkiter.h"
00026 #include "unicode/usearch.h"
00027
00031 struct USearch;
00035 typedef struct USearch USearch;
00036
00037 U_NAMESPACE_BEGIN
00038
00079 class U_I18N_API SearchIterator : public UObject {
00080
00081 public:
00082
00083
00084
00091 SearchIterator(const SearchIterator &other);
00092
00097 virtual ~SearchIterator();
00098
00099
00100
00114 virtual void setOffset(int32_t position, UErrorCode &status) = 0;
00115
00124 virtual int32_t getOffset(void) const = 0;
00125
00135 void setAttribute(USearchAttribute attribute,
00136 USearchAttributeValue value,
00137 UErrorCode &status);
00138
00145 USearchAttributeValue getAttribute(USearchAttribute attribute) const;
00146
00163 int32_t getMatchedStart(void) const;
00164
00179 int32_t getMatchedLength(void) const;
00180
00195 void getMatchedText(UnicodeString &result) const;
00196
00212 void setBreakIterator(BreakIterator *breakiter, UErrorCode &status);
00213
00224 const BreakIterator * getBreakIterator(void) const;
00225
00236 virtual void setText(const UnicodeString &text, UErrorCode &status);
00237
00253 virtual void setText(CharacterIterator &text, UErrorCode &status);
00254
00260 const UnicodeString & getText(void) const;
00261
00262
00263
00272 virtual UBool operator==(const SearchIterator &that) const;
00273
00280 UBool operator!=(const SearchIterator &that) const;
00281
00282
00283
00291 virtual SearchIterator* safeClone(void) const = 0;
00292
00306 int32_t first(UErrorCode &status);
00307
00325 int32_t following(int32_t position, UErrorCode &status);
00326
00340 int32_t last(UErrorCode &status);
00341
00359 int32_t preceding(int32_t position, UErrorCode &status);
00360
00375 int32_t next(UErrorCode &status);
00376
00390 int32_t previous(UErrorCode &status);
00391
00400 virtual void reset();
00401
00402 protected:
00403
00404
00409 USearch *m_search_;
00410
00419 BreakIterator *m_breakiterator_;
00420
00425 UnicodeString m_text_;
00426
00427
00428
00434 SearchIterator();
00435
00451 SearchIterator(const UnicodeString &text,
00452 BreakIterator *breakiter = NULL);
00453
00473 SearchIterator(CharacterIterator &text, BreakIterator *breakiter = NULL);
00474
00475
00476
00483 SearchIterator & operator=(const SearchIterator &that);
00484
00504 virtual int32_t handleNext(int32_t position, UErrorCode &status)
00505 = 0;
00506
00526 virtual int32_t handlePrev(int32_t position, UErrorCode &status)
00527 = 0;
00528
00539 virtual void setMatchLength(int32_t length);
00540
00551 virtual void setMatchStart(int32_t position);
00552
00557 void setMatchNotFound();
00558 };
00559
00560 inline UBool SearchIterator::operator!=(const SearchIterator &that) const
00561 {
00562 return !operator==(that);
00563 }
00564 U_NAMESPACE_END
00565
00566 #endif
00567
00568 #endif
00569