1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius*   Copyright (C) 1999-2011, International Business Machines
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/chariter.h"
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator::~ForwardCharacterIterator() {}
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator::ForwardCharacterIterator()
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: UObject()
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{}
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other)
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: UObject(other)
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{}
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator()
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(0), pos(0), begin(0), end(0) {
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(int32_t length)
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(length), pos(0), begin(0), end(length) {
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(textLength < 0) {
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        textLength = end = 0;
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(int32_t length, int32_t position)
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(length), pos(position), begin(0), end(length) {
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(textLength < 0) {
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        textLength = end = 0;
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(pos < 0) {
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        pos = 0;
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else if(pos > end) {
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        pos = end;
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position)
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(length), pos(position), begin(textBegin), end(textEnd) {
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(textLength < 0) {
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        textLength = 0;
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(begin < 0) {
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        begin = 0;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else if(begin > textLength) {
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        begin = textLength;
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(end < begin) {
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        end = begin;
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else if(end > textLength) {
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        end = textLength;
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(pos < begin) {
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        pos = begin;
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else if(pos > end) {
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        pos = end;
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
6683a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusCharacterIterator::~CharacterIterator() {}
6783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(const CharacterIterator &that) :
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator(that),
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerutextLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end)
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator &
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::operator=(const CharacterIterator &that) {
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ForwardCharacterIterator::operator=(that);
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    textLength = that.textLength;
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    pos = that.pos;
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    begin = that.begin;
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    end = that.end;
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return *this;
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// implementing first[32]PostInc() directly in a subclass should be faster
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// but these implementations make subclassing a little easier
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUChar
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::firstPostInc(void) {
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    setToStart();
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return nextPostInc();
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUChar32
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::first32PostInc(void) {
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    setToStart();
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return next32PostInc();
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
99