Home | History | Annotate | Download | only in intltest
      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 
     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 
     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 
     92 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 
    102 UClassID SimpleFwdCharIterator::getDynamicClassID(void) const {
    103     return NULL;
    104 }
    105 
    106 UChar SimpleFwdCharIterator::nextPostInc(void) {
    107     if(fCurrent == fEnd) {
    108         return ForwardCharacterIterator::DONE;
    109     } else {
    110         return *(fCurrent)++;
    111     }
    112 }
    113 
    114 UChar32 SimpleFwdCharIterator::next32PostInc(void) {
    115     return ForwardCharacterIterator::DONE;
    116 }
    117 
    118 UBool SimpleFwdCharIterator::hasNext() {
    119     return fCurrent < fEnd;
    120 }
    121