1c40f7aebd
X-SVN-Rev: 5196
117 lines
2.9 KiB
C++
117 lines
2.9 KiB
C++
/********************************************************************
|
|
* COPYRIGHT:
|
|
* Copyright (c) 1997-2001, International Business Machines Corporation and
|
|
* others. All Rights Reserved.
|
|
********************************************************************/
|
|
/* file name: sfwdchit.cpp
|
|
* encoding: US-ASCII
|
|
* tab size: 8 (not used)
|
|
* indentation:4
|
|
*/
|
|
|
|
#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)
|
|
{
|
|
UHashKey key;
|
|
key.pointer = fStart;
|
|
((SimpleFwdCharIterator *)this)->fHashCode = uhash_hashUChars(key);
|
|
}
|
|
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;
|
|
}
|