104 lines
2.5 KiB
C++
104 lines
2.5 KiB
C++
|
#include "sfwdchit.h"
|
||
|
#include "unicode/ustring.h"
|
||
|
#include "unicode/unistr.h"
|
||
|
#include "uhash.h"
|
||
|
#include "cmemory.h"
|
||
|
|
||
|
// A hash code of kInvalidHashCode indicates that the has code needs
|
||
|
// to be computed. A hash code of kEmptyHashCode is used for empty keys
|
||
|
// and for any key whose computed hash code is kInvalidHashCode.
|
||
|
const int32_t SimpleFwdCharIterator::kInvalidHashCode = 0;
|
||
|
const int32_t SimpleFwdCharIterator::kEmptyHashCode = 1;
|
||
|
|
||
|
SimpleFwdCharIterator::SimpleFwdCharIterator(const UnicodeString& s) {
|
||
|
|
||
|
fHashCode = kInvalidHashCode;
|
||
|
fLen = s.length();
|
||
|
fStart = new UChar[fLen];
|
||
|
if(fStart == NULL) {
|
||
|
fBogus = TRUE;
|
||
|
} else {
|
||
|
fEnd = fStart+fLen;
|
||
|
fCurrent = fStart;
|
||
|
fBogus = FALSE;
|
||
|
s.extract(0, fLen, fStart);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
SimpleFwdCharIterator::SimpleFwdCharIterator(UChar *s, int32_t len, UBool adopt) {
|
||
|
|
||
|
fHashCode = kInvalidHashCode;
|
||
|
|
||
|
fLen = len==-1 ? u_strlen(s) : len;
|
||
|
|
||
|
if(adopt == FALSE) {
|
||
|
fStart = new UChar[fLen];
|
||
|
if(fStart == NULL) {
|
||
|
fBogus = TRUE;
|
||
|
} else {
|
||
|
uprv_memcpy(fStart, s, fLen);
|
||
|
fEnd = fStart+fLen;
|
||
|
fCurrent = fStart;
|
||
|
fBogus = FALSE;
|
||
|
}
|
||
|
} else { // adopt = TRUE
|
||
|
fCurrent = fStart = s;
|
||
|
fEnd = fStart + fLen;
|
||
|
fBogus = FALSE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
SimpleFwdCharIterator::~SimpleFwdCharIterator() {
|
||
|
delete[] fStart;
|
||
|
}
|
||
|
|
||
|
UBool SimpleFwdCharIterator::operator==(const ForwardCharacterIterator& that) const {
|
||
|
if(this == &that) {
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*
|
||
|
if(that->fHashCode != kInvalidHashCode && this->fHashCode = that->fHashCode) {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(this->fStart == that->fStart) {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(this->fLen == that->fLen && uprv_memcmp(this->fStart, that->fStart, this->fLen) {
|
||
|
return TRUE;
|
||
|
}
|
||
|
*/
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
int32_t SimpleFwdCharIterator::hashCode(void) const {
|
||
|
if (fHashCode == kInvalidHashCode)
|
||
|
{
|
||
|
((SimpleFwdCharIterator *)this)->fHashCode = uhash_hashUChars(fStart);
|
||
|
}
|
||
|
return fHashCode;
|
||
|
}
|
||
|
|
||
|
UClassID SimpleFwdCharIterator::getDynamicClassID(void) const {
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
UChar SimpleFwdCharIterator::nextPostInc(void) {
|
||
|
if(fCurrent == fEnd) {
|
||
|
return ForwardCharacterIterator::DONE;
|
||
|
} else {
|
||
|
return *(fCurrent)++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
UChar32 SimpleFwdCharIterator::next32PostInc(void) {
|
||
|
return ForwardCharacterIterator::DONE;
|
||
|
}
|
||
|
|
||
|
UBool SimpleFwdCharIterator::hasNext() {
|
||
|
return fCurrent < fEnd;
|
||
|
}
|