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"
00016
00017
U_NAMESPACE_BEGIN
00085 class U_COMMON_API ForwardCharacterIterator :
public UObject {
00086
public:
00092
enum { DONE = 0xffff };
00093
00098
virtual ~ForwardCharacterIterator();
00099
00108
virtual UBool operator==(
const ForwardCharacterIterator& that)
const = 0;
00109
00120
inline UBool operator!=(
const ForwardCharacterIterator& that)
const;
00121
00127
virtual int32_t hashCode(
void)
const = 0;
00128
00136
virtual UClassID getDynamicClassID(
void)
const = 0;
00137
00146
virtual UChar nextPostInc(
void) = 0;
00147
00156
virtual UChar32 next32PostInc(
void) = 0;
00157
00167
virtual UBool hasNext() = 0;
00168
00169
protected:
00171 ForwardCharacterIterator() :
UObject() {}
00172
00174 ForwardCharacterIterator(
const ForwardCharacterIterator &other) :
UObject(other) {}
00175
00180 ForwardCharacterIterator &operator=(
const ForwardCharacterIterator&) {
return *
this; }
00181 };
00182
00352 class U_COMMON_API CharacterIterator :
public ForwardCharacterIterator {
00353
public:
00358 enum EOrigin { kStart, kCurrent, kEnd };
00359
00368
virtual CharacterIterator* clone(
void) const = 0;
00369
00377 virtual
UChar first(
void) = 0;
00378
00387 virtual UChar firstPostInc(
void);
00388
00398 virtual
UChar32 first32(
void) = 0;
00399
00408 virtual UChar32 first32PostInc(
void);
00409
00417 inline int32_t setToStart();
00418
00426 virtual UChar last(
void) = 0;
00427
00435 virtual UChar32 last32(
void) = 0;
00436
00444 inline int32_t setToEnd();
00445
00454 virtual UChar setIndex(int32_t position) = 0;
00455
00467 virtual UChar32 setIndex32(int32_t position) = 0;
00468
00474 virtual UChar current(
void) const = 0;
00475
00481 virtual UChar32 current32(
void) const = 0;
00482
00490 virtual UChar next(
void) = 0;
00491
00502 virtual UChar32 next32(
void) = 0;
00503
00511 virtual UChar previous(
void) = 0;
00512
00520 virtual UChar32 previous32(
void) = 0;
00521
00531 virtual UBool hasPrevious() = 0;
00532
00543 inline int32_t startIndex(
void) const;
00544
00554 inline int32_t endIndex(
void) const;
00555
00564 inline int32_t getIndex(
void) const;
00565
00572 inline int32_t getLength() const;
00573
00585 virtual int32_t move(int32_t delta, EOrigin origin) = 0;
00586
00598 virtual int32_t move32(int32_t delta, EOrigin origin) = 0;
00599
00606 virtual
void getText(
UnicodeString& result) = 0;
00607
00608 protected:
00613 CharacterIterator();
00614
00619 CharacterIterator(int32_t length);
00620
00625 CharacterIterator(int32_t length, int32_t position);
00626
00631 CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position);
00632
00639 CharacterIterator(const CharacterIterator &that);
00640
00648 CharacterIterator &operator=(const CharacterIterator &that);
00649
00655 int32_t textLength;
00656
00661 int32_t pos;
00662
00667 int32_t begin;
00668
00673 int32_t end;
00674 };
00675
00676 inline
UBool
00677 ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that)
const {
00678
return !operator==(that);
00679 }
00680
00681
inline int32_t
00682 CharacterIterator::setToStart() {
00683
return move(0, kStart);
00684 }
00685
00686
inline int32_t
00687 CharacterIterator::setToEnd() {
00688
return move(0, kEnd);
00689 }
00690
00691
inline int32_t
00692 CharacterIterator::startIndex(
void)
const {
00693
return begin;
00694 }
00695
00696
inline int32_t
00697 CharacterIterator::endIndex(
void)
const {
00698
return end;
00699 }
00700
00701
inline int32_t
00702 CharacterIterator::getIndex(
void)
const {
00703
return pos;
00704 }
00705
00706
inline int32_t
00707 CharacterIterator::getLength(
void)
const {
00708
return textLength;
00709 }
00710
00711
U_NAMESPACE_END
00712
#endif