You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.1 KiB
123 lines
3.1 KiB
// © 2016 and later: Unicode, Inc. and others.
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
/********************************************************************
|
|
* COPYRIGHT:
|
|
* Copyright (c) 1997-2003, International Business Machines Corporation and
|
|
* others. All Rights Reserved.
|
|
********************************************************************/
|
|
/* file name: sfwdchit.cpp
|
|
* encoding: UTF-8
|
|
* 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;
|
|
|
|
#if 0 // not used
|
|
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);
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
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;
|
|
}
|
|
|
|
#if 0 // not used
|
|
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;
|
|
}
|
|
#endif
|
|
|
|
int32_t SimpleFwdCharIterator::hashCode(void) const {
|
|
if (fHashCode == kInvalidHashCode)
|
|
{
|
|
UHashTok 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;
|
|
}
|