+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/****************************************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2011, International Business Machines Corporation and
+ * Copyright (c) 1997-2014, International Business Machines Corporation and
* others. All Rights Reserved.
* Modification History:
*
****************************************************************************************/
#include <string.h>
-#include <typeinfo> // for 'typeid' to work
+#include "utypeinfo.h" // for 'typeid' to work
#include "unicode/chariter.h"
#include "unicode/ustring.h"
#include "unicode/putil.h"
#include "unicode/utf16.h"
#include "citrtest.h"
+#include "cmemory.h"
class SCharacterIterator : public CharacterIterator {
}
- virtual ~SCharacterIterator(){};
+ virtual ~SCharacterIterator(){}
void setText(const UnicodeString& newText){
return TRUE;
}
- virtual CharacterIterator* clone(void) const {
+ virtual SCharacterIterator* clone(void) const {
return NULL;
}
virtual int32_t hashCode(void) const{
}
virtual UChar nextPostInc(void){ return text.charAt(pos++);}
virtual UChar32 next32PostInc(void){return text.char32At(pos++);}
- virtual UBool hasNext() { return TRUE;};
- virtual UChar first(){return DONE;};
- virtual UChar32 first32(){return DONE;};
- virtual UChar last(){return DONE;};
- virtual UChar32 last32(){return DONE;};
- virtual UChar setIndex(int32_t /*pos*/){return DONE;};
- virtual UChar32 setIndex32(int32_t /*pos*/){return DONE;};
- virtual UChar current() const{return DONE;};
- virtual UChar32 current32() const{return DONE;};
- virtual UChar next(){return DONE;};
- virtual UChar32 next32(){return DONE;};
- virtual UChar previous(){return DONE;};
- virtual UChar32 previous32(){return DONE;};
+ virtual UBool hasNext() { return TRUE;}
+ virtual UChar first(){return DONE;}
+ virtual UChar32 first32(){return DONE;}
+ virtual UChar last(){return DONE;}
+ virtual UChar32 last32(){return DONE;}
+ virtual UChar setIndex(int32_t /*pos*/){return DONE;}
+ virtual UChar32 setIndex32(int32_t /*pos*/){return DONE;}
+ virtual UChar current() const{return DONE;}
+ virtual UChar32 current32() const{return DONE;}
+ virtual UChar next(){return DONE;}
+ virtual UChar32 next32(){return DONE;}
+ virtual UChar previous(){return DONE;}
+ virtual UChar32 previous32(){return DONE;}
virtual int32_t move(int32_t delta,CharacterIterator::EOrigin origin){
switch(origin) {
case kStart:
}
return pos;
- };
+ }
virtual int32_t move32(int32_t delta, CharacterIterator::EOrigin origin){
switch(origin) {
case kStart:
}
return pos;
- };
- virtual UBool hasPrevious() {return TRUE;};
+ }
+ virtual UBool hasPrevious() {return TRUE;}
SCharacterIterator& operator=(const SCharacterIterator& that){
text = that.text;
};
const char SCharacterIterator::fgClassID=0;
-#define LENGTHOF(array) ((int32_t)(sizeof(array)/sizeof((array)[0])))
-
CharIterTest::CharIterTest()
{
}
UnicodeString testText2("Don't bother using this string.");
UnicodeString result1, result2, result3;
- CharacterIterator* test1 = new StringCharacterIterator(testText);
+ StringCharacterIterator* test1 = new StringCharacterIterator(testText);
CharacterIterator* test1b= new StringCharacterIterator(testText, -1);
CharacterIterator* test1c= new StringCharacterIterator(testText, 100);
CharacterIterator* test1d= new StringCharacterIterator(testText, -2, 100, 5);
StringCharacterIterator* testChar1=new StringCharacterIterator(testText);
StringCharacterIterator* testChar2=new StringCharacterIterator(testText2);
- StringCharacterIterator* testChar3=(StringCharacterIterator*)test1->clone();
+ StringCharacterIterator* testChar3=test1->clone();
testChar1->getText(result1);
testChar2->getText(result2);
UCharCharacterIterator* test2 = new UCharCharacterIterator(testText, u_strlen(testText), 5);
UCharCharacterIterator* test3 = new UCharCharacterIterator(testText, u_strlen(testText), 2, 20, 5);
UCharCharacterIterator* test4 = new UCharCharacterIterator(testText2, u_strlen(testText2));
- UCharCharacterIterator* test5 = (UCharCharacterIterator*)test1->clone();
+ UCharCharacterIterator* test5 = test1->clone();
UCharCharacterIterator* test6 = new UCharCharacterIterator(*test1);
// j785: length=-1 will use u_strlen()
errln("setIndex32() isn't working right");
if (c != CharacterIterator::DONE) {
c = iter.next32();
- i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i+2 : i+1;
+ i += U16_LENGTH(c);
}
} while (c != CharacterIterator::DONE);
if(iter.hasNext() == TRUE)
errln("getIndex() isn't working right");
if (c != CharacterIterator::DONE) {
c = iter.previous32();
- i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i-2 : i-1;
+ i -= U16_LENGTH(c);
}
} while (c != CharacterIterator::DONE);
if(iter.hasPrevious() == TRUE)
if(c != text.char32At(i))
errln("Character mismatch at position %d, iterator has %X, string has %X", i, c, text.char32At(i));
- i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i+2 : i+1;
+ i += U16_LENGTH(c);
if(iter.getIndex() != i)
errln("getIndex() aftr next32PostInc() isn't working right");
if(iter.current32() != text.char32At(i))
if (c != CharacterIterator::DONE) {
c = iter.next32();
- i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i+2 : i+1;
+ i += U16_LENGTH(c);
}
} while (c != CharacterIterator::DONE);
c=iter.next32();
if (c != CharacterIterator::DONE) {
c = iter.previous32();
- i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i-2 : i-1;
+ i -= U16_LENGTH(c);
}
} while (c != CharacterIterator::DONE);
public:
// public default constructor, to get coverage of CharacterIterator()
SubCharIter() : CharacterIterator() {
- textLength=end=LENGTHOF(s);
+ textLength=end=UPRV_LENGTHOF(s);
s[0]=0x61; // 'a'
s[1]=0xd900; // U+50400
s[2]=0xdd00;
// useful stuff, mostly dummy but testing coverage and subclassability
virtual UChar nextPostInc() {
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
return s[pos++];
} else {
return DONE;
}
virtual UChar32 next32PostInc() {
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
UChar32 c;
- U16_NEXT(s, pos, LENGTHOF(s), c);
+ U16_NEXT(s, pos, UPRV_LENGTHOF(s), c);
return c;
} else {
return DONE;
}
virtual UBool hasNext() {
- return pos<LENGTHOF(s);
+ return pos<UPRV_LENGTHOF(s);
}
virtual UChar first() {
virtual UChar32 first32() {
UChar32 c;
pos=0;
- U16_NEXT(s, pos, LENGTHOF(s), c);
+ U16_NEXT(s, pos, UPRV_LENGTHOF(s), c);
pos=0;
return c;
}
virtual UChar setIndex(int32_t position) {
- if(0<=position && position<=LENGTHOF(s)) {
+ if(0<=position && position<=UPRV_LENGTHOF(s)) {
pos=position;
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
return s[pos];
}
}
}
virtual UChar32 setIndex32(int32_t position) {
- if(0<=position && position<=LENGTHOF(s)) {
+ if(0<=position && position<=UPRV_LENGTHOF(s)) {
pos=position;
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
UChar32 c;
- U16_GET(s, 0, pos, LENGTHOF(s), c);
+ U16_GET(s, 0, pos, UPRV_LENGTHOF(s), c);
return c;
}
}
}
virtual UChar current() const {
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
return s[pos];
} else {
return DONE;
}
virtual UChar32 current32() const {
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
UChar32 c;
- U16_GET(s, 0, pos, LENGTHOF(s), c);
+ U16_GET(s, 0, pos, UPRV_LENGTHOF(s), c);
return c;
} else {
return DONE;
}
virtual UChar next() {
- if(pos<LENGTHOF(s) && ++pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s) && ++pos<UPRV_LENGTHOF(s)) {
return s[pos];
} else {
return DONE;
}
virtual UChar32 next32() {
- if(pos<LENGTHOF(s)) {
- U16_FWD_1(s, pos, LENGTHOF(s));
+ if(pos<UPRV_LENGTHOF(s)) {
+ U16_FWD_1(s, pos, UPRV_LENGTHOF(s));
}
- if(pos<LENGTHOF(s)) {
+ if(pos<UPRV_LENGTHOF(s)) {
UChar32 c;
int32_t i=pos;
- U16_NEXT(s, i, LENGTHOF(s), c);
+ U16_NEXT(s, i, UPRV_LENGTHOF(s), c);
return c;
} else {
return DONE;
}
virtual void getText(UnicodeString &result) {
- result.setTo(s, LENGTHOF(s));
+ result.setTo(s, UPRV_LENGTHOF(s));
}
// dummy implementations of other pure virtual base class functions