blob: 7cbeedc0253bcd9c712a097831e682395a561d17 [file] [log] [blame]
/*
*******************************************************************************
* *
* COPYRIGHT: *
* (C) Copyright International Business Machines Corporation, 1998-1999 *
* Licensed Material - Program-Property of IBM - All Rights Reserved. *
* US Government Users Restricted Rights - Use, duplication, or disclosure *
* restricted by GSA ADP Schedule Contract with IBM Corp. *
* *
*******************************************************************************
*
* File schriter.cpp
*
* Modification History:
*
* Date Name Description
* 05/05/99 stephen Cleaned up.
*******************************************************************************
*/
#include "chariter.h"
#include "schriter.h"
ClassID StringCharacterIterator::fgClassID = 0;
StringCharacterIterator::StringCharacterIterator()
: CharacterIterator(),
text(),
pos(0),
begin(0),
end(0)
{
// NEVER DEFAULT CONSTRUCT!
}
StringCharacterIterator::StringCharacterIterator(const UnicodeString& text)
: CharacterIterator(),
text(text),
pos(0),
begin(0),
end(text.length())
{}
StringCharacterIterator::StringCharacterIterator(const UnicodeString& text,
UTextOffset pos)
: CharacterIterator(),
text(text),
pos(pos),
begin(0),
end(text.length())
{
// the Java code checks the parameters and throws exceptions we've
// decided to punt on this for the time being because changing this
// constructor to accept an error code is an API change with
// significant impact
}
StringCharacterIterator::StringCharacterIterator(const UnicodeString& text,
UTextOffset begin,
UTextOffset end,
UTextOffset pos)
: CharacterIterator(),
text(text),
pos(pos),
begin(begin),
end(end)
{
// the Java code checks the parameters and throws exceptions we've
// decided to punt on this for the time being because changing this
// constructor to accept an error code is an API change with
// significant impact
}
StringCharacterIterator::StringCharacterIterator(const StringCharacterIterator& that)
: CharacterIterator(that),
text(that.text),
pos(that.pos),
begin(that.begin),
end(that.end)
{
}
StringCharacterIterator::~StringCharacterIterator()
{}
StringCharacterIterator&
StringCharacterIterator::operator=(const StringCharacterIterator& that)
{
text = that.text;
pos = that.pos;
begin = that.begin;
end = that.end;
return *this;
}
bool_t
StringCharacterIterator::operator==(const CharacterIterator& that) const
{
if (this == &that)
return TRUE;
if (getDynamicClassID() != that.getDynamicClassID())
return FALSE;
StringCharacterIterator& realThat = (StringCharacterIterator&)that;
return text == realThat.text
&& pos == realThat.pos
&& begin == realThat.begin
&& end == realThat.end;
}
int32_t
StringCharacterIterator::hashCode() const
{
return text.hashCode() ^ pos ^ begin ^ end;
}
CharacterIterator*
StringCharacterIterator::clone() const
{
return new StringCharacterIterator(*this);
}
UChar
StringCharacterIterator::first()
{
pos = begin;
return text.charAt(pos);
}
UChar
StringCharacterIterator::last()
{
pos = end - 1;
return text.charAt(pos);
}
UChar
StringCharacterIterator::setIndex(UTextOffset pos)
{
// should check "pos" here and return an error code, but changing
// this function would have significant impact across TIFC, so we
// decided to hold off
this->pos = pos;
return text.charAt(pos);
}
UChar
StringCharacterIterator::current() const
{
if (pos >= begin && pos < end)
return text.charAt(pos);
else
return CharacterIterator::DONE;
}
UChar
StringCharacterIterator::next()
{
if(pos < end - 1) {
return text.charAt(++pos);
}
else {
pos = end;
return CharacterIterator::DONE;
}
}
UChar
StringCharacterIterator::previous()
{
if (pos > begin)
return text.charAt(--pos);
else
return DONE;
}
UTextOffset
StringCharacterIterator::startIndex() const
{
return begin;
}
UTextOffset
StringCharacterIterator::endIndex() const
{
return end;
}
UTextOffset
StringCharacterIterator::getIndex() const
{
return pos;
}
void
StringCharacterIterator::getText(UnicodeString& result)
{
result = text;
}