16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 1999-2011, International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/chariter.h"
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgForwardCharacterIterator::~ForwardCharacterIterator() {}
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgForwardCharacterIterator::ForwardCharacterIterator()
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: UObject()
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{}
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other)
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: UObject(other)
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{}
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::CharacterIterator()
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: textLength(0), pos(0), begin(0), end(0) {
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::CharacterIterator(int32_t length)
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: textLength(length), pos(0), begin(0), end(length) {
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(textLength < 0) {
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        textLength = end = 0;
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::CharacterIterator(int32_t length, int32_t position)
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: textLength(length), pos(position), begin(0), end(length) {
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(textLength < 0) {
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        textLength = end = 0;
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(pos < 0) {
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        pos = 0;
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if(pos > end) {
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        pos = end;
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position)
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: textLength(length), pos(position), begin(textBegin), end(textEnd) {
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(textLength < 0) {
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        textLength = 0;
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(begin < 0) {
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        begin = 0;
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if(begin > textLength) {
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        begin = textLength;
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(end < begin) {
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        end = begin;
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if(end > textLength) {
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        end = textLength;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(pos < begin) {
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        pos = begin;
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if(pos > end) {
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        pos = end;
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::~CharacterIterator() {}
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::CharacterIterator(const CharacterIterator &that) :
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgForwardCharacterIterator(that),
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtextLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end)
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator &
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::operator=(const CharacterIterator &that) {
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ForwardCharacterIterator::operator=(that);
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    textLength = that.textLength;
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    pos = that.pos;
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    begin = that.begin;
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    end = that.end;
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return *this;
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// implementing first[32]PostInc() directly in a subclass should be faster
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// but these implementations make subclassing a little easier
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::firstPostInc(void) {
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    setToStart();
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return nextPostInc();
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator::first32PostInc(void) {
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    setToStart();
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return next32PostInc();
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
99