00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef CHARITER_H
00011 #define CHARITER_H
00012
00013 #include "unicode/utypes.h"
00014 #include "unicode/uobject.h"
00015 #include "unicode/unistr.h"
00021 U_NAMESPACE_BEGIN
00089 class U_COMMON_API ForwardCharacterIterator : public UObject {
00090 public:
00096 enum { DONE = 0xffff };
00097
00102 virtual ~ForwardCharacterIterator();
00103
00112 virtual UBool operator==(const ForwardCharacterIterator& that) const = 0;
00113
00124 inline UBool operator!=(const ForwardCharacterIterator& that) const;
00125
00131 virtual int32_t hashCode(void) const = 0;
00132
00140 virtual UClassID getDynamicClassID(void) const = 0;
00141
00150 virtual UChar nextPostInc(void) = 0;
00151
00160 virtual UChar32 next32PostInc(void) = 0;
00161
00171 virtual UBool hasNext() = 0;
00172
00173 protected:
00175 ForwardCharacterIterator();
00176
00178 ForwardCharacterIterator(const ForwardCharacterIterator &other);
00179
00184 ForwardCharacterIterator &operator=(const ForwardCharacterIterator&) { return *this; }
00185 };
00186
00356 class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
00357 public:
00362 enum EOrigin { kStart, kCurrent, kEnd };
00363
00372 virtual CharacterIterator* clone(void) const = 0;
00373
00381 virtual UChar first(void) = 0;
00382
00391 virtual UChar firstPostInc(void);
00392
00402 virtual UChar32 first32(void) = 0;
00403
00412 virtual UChar32 first32PostInc(void);
00413
00421 inline int32_t setToStart();
00422
00430 virtual UChar last(void) = 0;
00431
00439 virtual UChar32 last32(void) = 0;
00440
00448 inline int32_t setToEnd();
00449
00458 virtual UChar setIndex(int32_t position) = 0;
00459
00471 virtual UChar32 setIndex32(int32_t position) = 0;
00472
00478 virtual UChar current(void) const = 0;
00479
00485 virtual UChar32 current32(void) const = 0;
00486
00494 virtual UChar next(void) = 0;
00495
00506 virtual UChar32 next32(void) = 0;
00507
00515 virtual UChar previous(void) = 0;
00516
00524 virtual UChar32 previous32(void) = 0;
00525
00535 virtual UBool hasPrevious() = 0;
00536
00547 inline int32_t startIndex(void) const;
00548
00558 inline int32_t endIndex(void) const;
00559
00568 inline int32_t getIndex(void) const;
00569
00576 inline int32_t getLength() const;
00577
00589 virtual int32_t move(int32_t delta, EOrigin origin) = 0;
00590
00602 virtual int32_t move32(int32_t delta, EOrigin origin) = 0;
00603
00610 virtual void getText(UnicodeString& result) = 0;
00611
00612 protected:
00617 CharacterIterator();
00618
00623 CharacterIterator(int32_t length);
00624
00629 CharacterIterator(int32_t length, int32_t position);
00630
00635 CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position);
00636
00643 CharacterIterator(const CharacterIterator &that);
00644
00652 CharacterIterator &operator=(const CharacterIterator &that);
00653
00659 int32_t textLength;
00660
00665 int32_t pos;
00666
00671 int32_t begin;
00672
00677 int32_t end;
00678 };
00679
00680 inline UBool
00681 ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that) const {
00682 return !operator==(that);
00683 }
00684
00685 inline int32_t
00686 CharacterIterator::setToStart() {
00687 return move(0, kStart);
00688 }
00689
00690 inline int32_t
00691 CharacterIterator::setToEnd() {
00692 return move(0, kEnd);
00693 }
00694
00695 inline int32_t
00696 CharacterIterator::startIndex(void) const {
00697 return begin;
00698 }
00699
00700 inline int32_t
00701 CharacterIterator::endIndex(void) const {
00702 return end;
00703 }
00704
00705 inline int32_t
00706 CharacterIterator::getIndex(void) const {
00707 return pos;
00708 }
00709
00710 inline int32_t
00711 CharacterIterator::getLength(void) const {
00712 return textLength;
00713 }
00714
00715 U_NAMESPACE_END
00716 #endif