1 /********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2003, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6 /* file name: sfwdchit.cpp
7 * encoding: US-ASCII
8 * tab size: 8 (not used)
9 * indentation:4
10 */
11
12 #include "sfwdchit.h"
13 #include "unicode/ustring.h"
14 #include "unicode/unistr.h"
15 #include "uhash.h"
16 #include "cmemory.h"
17
18 // A hash code of kInvalidHashCode indicates that the has code needs
19 // to be computed. A hash code of kEmptyHashCode is used for empty keys
20 // and for any key whose computed hash code is kInvalidHashCode.
21 const int32_t SimpleFwdCharIterator::kInvalidHashCode = 0;
22 const int32_t SimpleFwdCharIterator::kEmptyHashCode = 1;
23
24 #if 0 // not used
25 SimpleFwdCharIterator::SimpleFwdCharIterator(const UnicodeString& s) {
26
27 fHashCode = kInvalidHashCode;
28 fLen = s.length();
29 fStart = new UChar[fLen];
30 if(fStart == NULL) {
31 fBogus = TRUE;
32 } else {
33 fEnd = fStart+fLen;
34 fCurrent = fStart;
35 fBogus = FALSE;
36 s.extract(0, fLen, fStart);
37 }
38
39 }
40 #endif
41
SimpleFwdCharIterator(UChar * s,int32_t len,UBool adopt)42 SimpleFwdCharIterator::SimpleFwdCharIterator(UChar *s, int32_t len, UBool adopt) {
43
44 fHashCode = kInvalidHashCode;
45
46 fLen = len==-1 ? u_strlen(s) : len;
47
48 if(adopt == FALSE) {
49 fStart = new UChar[fLen];
50 if(fStart == NULL) {
51 fBogus = TRUE;
52 } else {
53 uprv_memcpy(fStart, s, fLen);
54 fEnd = fStart+fLen;
55 fCurrent = fStart;
56 fBogus = FALSE;
57 }
58 } else { // adopt = TRUE
59 fCurrent = fStart = s;
60 fEnd = fStart + fLen;
61 fBogus = FALSE;
62 }
63
64 }
65
~SimpleFwdCharIterator()66 SimpleFwdCharIterator::~SimpleFwdCharIterator() {
67 delete[] fStart;
68 }
69
70 #if 0 // not used
71 UBool SimpleFwdCharIterator::operator==(const ForwardCharacterIterator& that) const {
72 if(this == &that) {
73 return TRUE;
74 }
75 /*
76 if(that->fHashCode != kInvalidHashCode && this->fHashCode = that->fHashCode) {
77 return TRUE;
78 }
79
80 if(this->fStart == that->fStart) {
81 return TRUE;
82 }
83
84 if(this->fLen == that->fLen && uprv_memcmp(this->fStart, that->fStart, this->fLen) {
85 return TRUE;
86 }
87 */
88 return FALSE;
89 }
90 #endif
91
hashCode(void) const92 int32_t SimpleFwdCharIterator::hashCode(void) const {
93 if (fHashCode == kInvalidHashCode)
94 {
95 UHashTok key;
96 key.pointer = fStart;
97 ((SimpleFwdCharIterator *)this)->fHashCode = uhash_hashUChars(key);
98 }
99 return fHashCode;
100 }
101
getDynamicClassID(void) const102 UClassID SimpleFwdCharIterator::getDynamicClassID(void) const {
103 return NULL;
104 }
105
nextPostInc(void)106 UChar SimpleFwdCharIterator::nextPostInc(void) {
107 if(fCurrent == fEnd) {
108 return ForwardCharacterIterator::DONE;
109 } else {
110 return *(fCurrent)++;
111 }
112 }
113
next32PostInc(void)114 UChar32 SimpleFwdCharIterator::next32PostInc(void) {
115 return ForwardCharacterIterator::DONE;
116 }
117
hasNext()118 UBool SimpleFwdCharIterator::hasNext() {
119 return fCurrent < fEnd;
120 }
121