/* ******************************************************************************* * * Copyright (C) 1998-1999, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * * File schriter.h * * Modification History: * * Date Name Description * 05/05/99 stephen Cleaned up. ******************************************************************************* */ #ifndef SCHRITER_H #define SCHRITER_H #include "unicode/utypes.h" #include "unicode/chariter.h" /** * A concrete subclass of CharacterIterator that iterates over the * characters in a UnicodeString. It's possible not only to create an * iterator that iterates over an entire UnicodeString, but also to * create only that iterates over only a subrange of a UnicodeString * (iterators over different subranges of the same UnicodeString don't * compare equal). */ class U_COMMON_API StringCharacterIterator : public CharacterIterator { public: /** * Create an iterator over the UnicodeString referred to by "text". * The iteration range is the whole string, and the starting position is 0. */ StringCharacterIterator(const UnicodeString& text); /** * Create an iterator over the UnicodeString referred to by "text". * The iteration range is the whole string, and the starting * position is specified by "pos". If "pos" is outside the valid * iteration range, the behavior of this object is undefined. */ StringCharacterIterator(const UnicodeString& text, UTextOffset pos); /** * Create an iterator over the UnicodeString referred to by "text". * The iteration range begins with the character specified by * "begin" and ends with the character BEFORE the character specfied * by "end". The starting position is specified by "pos". If * "begin" and "end" don't form a valid range on "text" (i.e., begin * >= end or either is negative or greater than text.size()), or * "pos" is outside the range defined by "begin" and "end", the * behavior of this iterator is undefined. */ StringCharacterIterator(const UnicodeString& text, UTextOffset begin, UTextOffset end, UTextOffset pos); /** * Copy constructor. The new iterator iterates over the same range * of the same string as "that", and its initial position is the * same as "that"'s current position. */ StringCharacterIterator(const StringCharacterIterator& that); /** * Destructor. */ virtual ~StringCharacterIterator(); /** * Assignment operator. *this is altered to iterate over the sane * range of the same string as "that", and refers to the same * character within that string as "that" does. */ StringCharacterIterator& operator=(const StringCharacterIterator& that); /** * Returns true if the iterators iterate over the same range of the * same string and are pointing at the same character. */ virtual bool_t operator==(const CharacterIterator& that) const; /** * Generates a hash code for this iterator. */ virtual int32_t hashCode(void) const; /** * Returns a new StringCharacterIterator referring to the same * character in the same range of the same string as this one. The * caller must delete the new iterator. */ virtual CharacterIterator* clone(void) const; /** * Sets the iterator to refer to the first character in its * iteration range, and returns that character, */ virtual UChar first(void); /** * Sets the iterator to refer to the last character in its iteration * range, and returns that character. */ virtual UChar last(void); /** * Sets the iterator to refer to the "position"-th character in the * UnicodeString the iterator refers to, and returns that character. * If the index is outside the iterator's iteration range, the * behavior of the iterator is undefined. */ virtual UChar setIndex(UTextOffset pos); /** * Returns the character the iterator currently refers to. */ virtual UChar current(void) const; /** * Advances to the next character in the iteration range (toward * last()), and returns that character. If there are no more * characters to return, returns DONE. */ virtual UChar next(void); /** * Advances to the previous character in the iteration rance (toward * first()), and returns that character. If there are no more * characters to return, returns DONE. */ virtual UChar previous(void); /** * Returns the numeric index of the first character in this * iterator's iteration range. */ virtual UTextOffset startIndex(void) const; /** * Returns the numeric index of the character immediately BEYOND the * last character in this iterator's iteration range. */ virtual UTextOffset endIndex(void) const; /** * Returns the numeric index in the underlying UnicodeString of the * character the iterator currently refers to (i.e., the character * returned by current()). */ virtual UTextOffset getIndex(void) const; /** * Sets the iterator to iterate over the provided string. */ virtual void setText(const UnicodeString& newText); /** * Copies the UnicodeString under iteration into the UnicodeString * referred to by "result". Even if this iterator iterates across * only a part of this string, the whole string is copied. @param * result Receives a copy of the text under iteration. */ virtual void getText(UnicodeString& result); /** * Return a class ID for this object (not really public) */ virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } /** * Return a class ID for this class (not really public) */ static UClassID getStaticClassID(void) { return (UClassID)(&fgClassID); } private: StringCharacterIterator(); UnicodeString text; UTextOffset pos; UTextOffset begin; UTextOffset end; static UClassID fgClassID; }; #endif