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/unistr.h"
00015
00016 U_NAMESPACE_BEGIN
00084 class U_COMMON_API ForwardCharacterIterator {
00085 public:
00091 enum { DONE = 0xffff };
00092
00097 virtual ~ForwardCharacterIterator() {}
00098
00104 virtual UBool operator==(const ForwardCharacterIterator& that) const = 0;
00105
00112 inline UBool operator!=(const ForwardCharacterIterator& that) const;
00113
00118 virtual int32_t hashCode(void) const = 0;
00119
00126 virtual UClassID getDynamicClassID(void) const = 0;
00127
00135 virtual UChar nextPostInc(void) = 0;
00136
00144 virtual UChar32 next32PostInc(void) = 0;
00145
00153 virtual UBool hasNext() = 0;
00154
00155 protected:
00156 ForwardCharacterIterator() {}
00157 ForwardCharacterIterator(const ForwardCharacterIterator&) {}
00158 ForwardCharacterIterator &operator=(const ForwardCharacterIterator&) { return *this; }
00159 };
00160
00330 class U_COMMON_API CharacterIterator : public ForwardCharacterIterator {
00331 public:
00336 enum EOrigin { kStart, kCurrent, kEnd };
00337
00345 virtual CharacterIterator* clone(void) const = 0;
00346
00353 virtual UChar first(void) = 0;
00354
00362 virtual UChar firstPostInc(void);
00363
00372 virtual UChar32 first32(void) = 0;
00373
00381 virtual UChar32 first32PostInc(void);
00382
00390 inline int32_t setToStart();
00391
00398 virtual UChar last(void) = 0;
00399
00406 virtual UChar32 last32(void) = 0;
00407
00415 inline int32_t setToEnd();
00416
00423 virtual UChar setIndex(int32_t position) = 0;
00424
00434 virtual UChar32 setIndex32(int32_t position) = 0;
00435
00440 virtual UChar current(void) const = 0;
00441
00446 virtual UChar32 current32(void) const = 0;
00447
00454 virtual UChar next(void) = 0;
00455
00465 virtual UChar32 next32(void) = 0;
00466
00473 virtual UChar previous(void) = 0;
00474
00481 virtual UChar32 previous32(void) = 0;
00482
00490 virtual UBool hasPrevious() = 0;
00491
00500 inline int32_t startIndex(void) const;
00501
00508 inline int32_t endIndex(void) const;
00509
00516 inline int32_t getIndex(void) const;
00517
00523 inline int32_t getLength() const;
00524
00533 virtual int32_t move(int32_t delta, EOrigin origin) = 0;
00534
00543 virtual int32_t move32(int32_t delta, EOrigin origin) = 0;
00544
00551 virtual void getText(UnicodeString& result) = 0;
00552
00553 protected:
00554 CharacterIterator() {}
00555 CharacterIterator(int32_t length);
00556 CharacterIterator(int32_t length, int32_t position);
00557 CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position);
00558 CharacterIterator(const CharacterIterator &that);
00559
00560 CharacterIterator &operator=(const CharacterIterator &that);
00561
00562 int32_t textLength;
00563 int32_t pos;
00564 int32_t begin;
00565 int32_t end;
00566 };
00567
00568 inline UBool
00569 ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that) const {
00570 return !operator==(that);
00571 }
00572
00573 inline int32_t
00574 CharacterIterator::setToStart() {
00575 return move(0, kStart);
00576 }
00577
00578 inline int32_t
00579 CharacterIterator::setToEnd() {
00580 return move(0, kEnd);
00581 }
00582
00583 inline int32_t
00584 CharacterIterator::startIndex(void) const {
00585 return begin;
00586 }
00587
00588 inline int32_t
00589 CharacterIterator::endIndex(void) const {
00590 return end;
00591 }
00592
00593 inline int32_t
00594 CharacterIterator::getIndex(void) const {
00595 return pos;
00596 }
00597
00598 inline int32_t
00599 CharacterIterator::getLength(void) const {
00600 return textLength;
00601 }
00602
00603 U_NAMESPACE_END
00604 #endif