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