1/********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2003, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6
7#ifndef SFDWCHIT_H
8#define SFDWCHIT_H
9
10#include "unicode/chariter.h"
11#include "intltest.h"
12
13class SimpleFwdCharIterator : public ForwardCharacterIterator {
14public:
15    // not used -- SimpleFwdCharIterator(const UnicodeString& s);
16    SimpleFwdCharIterator(UChar *s, int32_t len, UBool adopt = FALSE);
17
18    virtual ~SimpleFwdCharIterator();
19
20  /**
21   * Returns true when both iterators refer to the same
22   * character in the same character-storage object.
23   */
24  // not used -- virtual UBool operator==(const ForwardCharacterIterator& that) const;
25
26  /**
27   * Generates a hash code for this iterator.
28   */
29  virtual int32_t hashCode(void) const;
30
31  /**
32   * Returns a UClassID for this ForwardCharacterIterator ("poor man's
33   * RTTI").<P> Despite the fact that this function is public,
34   * DO NOT CONSIDER IT PART OF CHARACTERITERATOR'S API!
35   */
36  virtual UClassID getDynamicClassID(void) const;
37
38  /**
39   * Gets the current code unit for returning and advances to the next code unit
40   * in the iteration range
41   * (toward endIndex()).  If there are
42   * no more code units to return, returns DONE.
43   */
44  virtual UChar         nextPostInc(void);
45
46  /**
47   * Gets the current code point for returning and advances to the next code point
48   * in the iteration range
49   * (toward endIndex()).  If there are
50   * no more code points to return, returns DONE.
51   */
52  virtual UChar32       next32PostInc(void);
53
54  /**
55   * Returns FALSE if there are no more code units or code points
56   * at or after the current position in the iteration range.
57   * This is used with nextPostInc() or next32PostInc() in forward
58   * iteration.
59   */
60  virtual UBool        hasNext();
61
62protected:
63    SimpleFwdCharIterator() {}
64    SimpleFwdCharIterator(const SimpleFwdCharIterator &other)
65        : ForwardCharacterIterator(other) {}
66    SimpleFwdCharIterator &operator=(const SimpleFwdCharIterator&) { return *this; }
67private:
68    static const int32_t            kInvalidHashCode;
69    static const int32_t            kEmptyHashCode;
70
71    UChar *fStart, *fEnd, *fCurrent;
72    int32_t fLen;
73    UBool fBogus;
74    int32_t fHashCode;
75};
76
77#endif
78