ICU 62.1 62.1
chariter.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4********************************************************************
5*
6* Copyright (C) 1997-2011, International Business Machines
7* Corporation and others. All Rights Reserved.
8*
9********************************************************************
10*/
11
12#ifndef CHARITER_H
13#define CHARITER_H
14
15#include "unicode/utypes.h"
16#include "unicode/uobject.h"
17#include "unicode/unistr.h"
92public:
98 enum { DONE = 0xffff };
99
105
114 virtual UBool operator==(const ForwardCharacterIterator& that) const = 0;
115
126 inline UBool operator!=(const ForwardCharacterIterator& that) const;
127
133 virtual int32_t hashCode(void) const = 0;
134
142 virtual UClassID getDynamicClassID(void) const = 0;
143
152 virtual char16_t nextPostInc(void) = 0;
153
162 virtual UChar32 next32PostInc(void) = 0;
163
173 virtual UBool hasNext() = 0;
174
175protected:
178
181
187};
188
359public:
364 enum EOrigin { kStart, kCurrent, kEnd };
365
371
380 virtual CharacterIterator* clone(void) const = 0;
381
389 virtual char16_t first(void) = 0;
390
399 virtual char16_t firstPostInc(void);
400
410 virtual UChar32 first32(void) = 0;
411
420 virtual UChar32 first32PostInc(void);
421
429 inline int32_t setToStart();
430
438 virtual char16_t last(void) = 0;
439
447 virtual UChar32 last32(void) = 0;
448
456 inline int32_t setToEnd();
457
466 virtual char16_t setIndex(int32_t position) = 0;
467
479 virtual UChar32 setIndex32(int32_t position) = 0;
480
486 virtual char16_t current(void) const = 0;
487
493 virtual UChar32 current32(void) const = 0;
494
502 virtual char16_t next(void) = 0;
503
514 virtual UChar32 next32(void) = 0;
515
523 virtual char16_t previous(void) = 0;
524
532 virtual UChar32 previous32(void) = 0;
533
543 virtual UBool hasPrevious() = 0;
544
555 inline int32_t startIndex(void) const;
556
566 inline int32_t endIndex(void) const;
567
576 inline int32_t getIndex(void) const;
577
584 inline int32_t getLength() const;
585
597 virtual int32_t move(int32_t delta, EOrigin origin) = 0;
598
610#ifdef move32
611 // One of the system headers right now is sometimes defining a conflicting macro we don't use
612#undef move32
613#endif
614 virtual int32_t move32(int32_t delta, EOrigin origin) = 0;
615
622 virtual void getText(UnicodeString& result) = 0;
623
624protected:
630
635 CharacterIterator(int32_t length);
636
641 CharacterIterator(int32_t length, int32_t position);
642
647 CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position);
648
656
665
671 int32_t textLength;
672
677 int32_t pos;
678
683 int32_t begin;
684
689 int32_t end;
690};
691
692inline UBool
693ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that) const {
694 return !operator==(that);
695}
696
697inline int32_t
698CharacterIterator::setToStart() {
699 return move(0, kStart);
700}
701
702inline int32_t
703CharacterIterator::setToEnd() {
704 return move(0, kEnd);
705}
706
707inline int32_t
708CharacterIterator::startIndex(void) const {
709 return begin;
710}
711
712inline int32_t
713CharacterIterator::endIndex(void) const {
714 return end;
715}
716
717inline int32_t
718CharacterIterator::getIndex(void) const {
719 return pos;
720}
721
722inline int32_t
723CharacterIterator::getLength(void) const {
724 return textLength;
725}
726
728#endif
Abstract class that defines an API for iteration on text objects.
Definition chariter.h:358
EOrigin
Origin enumeration for the move() and move32() functions.
Definition chariter.h:364
int32_t textLength
Base class text length field.
Definition chariter.h:671
virtual UChar32 first32PostInc(void)
Sets the iterator to refer to the first code point in its iteration range, returns that code point,...
CharacterIterator(int32_t length, int32_t position)
Constructor, just setting the length and position fields in this base class.
virtual char16_t first(void)=0
Sets the iterator to refer to the first code unit in its iteration range, and returns that code unit.
virtual void getText(UnicodeString &result)=0
Copies the text under iteration into the UnicodeString referred to by "result".
virtual int32_t move(int32_t delta, EOrigin origin)=0
Moves the current position relative to the start or end of the iteration range, or relative to the cu...
virtual char16_t current(void) const =0
Returns the code unit the iterator currently refers to.
CharacterIterator & operator=(const CharacterIterator &that)
Assignment operator.
virtual UChar32 next32(void)=0
Advances to the next code point in the iteration range (toward endIndex()), and returns that code poi...
virtual ~CharacterIterator()
Destructor.
virtual char16_t firstPostInc(void)
Sets the iterator to refer to the first code unit in its iteration range, returns that code unit,...
virtual UChar32 setIndex32(int32_t position)=0
Sets the iterator to refer to the beginning of the code point that contains the "position"-th code un...
virtual UChar32 last32(void)=0
Sets the iterator to refer to the last code point in its iteration range, and returns that code unit.
virtual char16_t previous(void)=0
Advances to the previous code unit in the iteration range (toward startIndex()), and returns that cod...
virtual char16_t next(void)=0
Advances to the next code unit in the iteration range (toward endIndex()), and returns that code unit...
virtual UChar32 first32(void)=0
Sets the iterator to refer to the first code point in its iteration range, and returns that code unit...
int32_t begin
Base class field for the start of the iteration range.
Definition chariter.h:683
CharacterIterator(int32_t length)
Constructor, just setting the length field in this base class.
virtual UChar32 current32(void) const =0
Returns the code point the iterator currently refers to.
int32_t pos
Base class field for the current position.
Definition chariter.h:677
int32_t end
Base class field for the end of the iteration range.
Definition chariter.h:689
virtual UChar32 previous32(void)=0
Advances to the previous code point in the iteration range (toward startIndex()), and returns that co...
virtual CharacterIterator * clone(void) const =0
Returns a pointer to a new CharacterIterator of the same concrete class as this one,...
virtual int32_t move32(int32_t delta, EOrigin origin)=0
Moves the current position relative to the start or end of the iteration range, or relative to the cu...
CharacterIterator(const CharacterIterator &that)
Copy constructor.
virtual UBool hasPrevious()=0
Returns FALSE if there are no more code units or code points before the current position in the itera...
virtual char16_t setIndex(int32_t position)=0
Sets the iterator to refer to the "position"-th code unit in the text-storage object the iterator ref...
CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position)
Constructor, just setting the length, start, end, and position fields in this base class.
virtual char16_t last(void)=0
Sets the iterator to refer to the last code unit in its iteration range, and returns that code unit.
CharacterIterator()
Empty constructor.
Abstract class that defines an API for forward-only iteration on text objects.
Definition chariter.h:91
virtual ~ForwardCharacterIterator()
Destructor.
virtual UBool operator==(const ForwardCharacterIterator &that) const =0
Returns true when both iterators refer to the same character in the same character-storage object.
virtual UClassID getDynamicClassID(void) const =0
Returns a UClassID for this ForwardCharacterIterator ("poor man's RTTI").
ForwardCharacterIterator(const ForwardCharacterIterator &other)
Copy constructor to be overridden in the implementing class.
ForwardCharacterIterator & operator=(const ForwardCharacterIterator &)
Assignment operator to be overridden in the implementing class.
Definition chariter.h:186
ForwardCharacterIterator()
Default constructor to be overridden in the implementing class.
virtual int32_t hashCode(void) const =0
Generates a hash code for this iterator.
virtual UBool hasNext()=0
Returns FALSE if there are no more code units or code points at or after the current position in the ...
virtual char16_t nextPostInc(void)=0
Gets the current code unit for returning and advances to the next code unit in the iteration range (t...
virtual UChar32 next32PostInc(void)=0
Gets the current code point for returning and advances to the next code point in the iteration range ...
UObject is the common ICU "boilerplate" class.
Definition uobject.h:223
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:287
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
UBool operator!=(const StringPiece &x, const StringPiece &y)
Global operator != for StringPiece.
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition umachine.h:400
int8_t UBool
The ICU boolean type.
Definition umachine.h:236
C++ API: Unicode String.
C++ API: Common ICU base class UObject.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:93
Basic definitions for ICU, for both C and C++ APIs.
#define U_COMMON_API
Set to export library symbols from inside the common library, and to import them from outside.
Definition utypes.h:359
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:138
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:137