1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Copyright (C) 2001-2008,2010 IBM and others. All rights reserved. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 03/22/2000 helena Creation. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/brkiter.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/schriter.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/search.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "usrchimp.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// public constructors and destructors ----------------------------------- 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator::SearchIterator(const SearchIterator &other) 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(other) 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_ = other.m_breakiterator_; 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_text_ = other.m_text_; 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_ = (USearch *)uprv_malloc(sizeof(USearch)); 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->breakIter = other.m_search_->breakIter; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = other.m_search_->isCanonicalMatch; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = other.m_search_->isOverlap; 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = other.m_search_->elementComparisonType; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex = other.m_search_->matchedIndex; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength = other.m_search_->matchedLength; 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->text = other.m_search_->text; 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength = other.m_search_->textLength; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator::~SearchIterator() 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_ != NULL) { 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_free(m_search_); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// public get and set methods ---------------------------------------- 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setAttribute(USearchAttribute attribute, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USearchAttributeValue value, 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode &status) 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (attribute) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case USEARCH_OVERLAP : 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = (value == USEARCH_ON ? TRUE : FALSE); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case USEARCH_CANONICAL_MATCH : 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = (value == USEARCH_ON ? TRUE : FALSE); 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case USEARCH_ELEMENT_COMPARISON : 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (value == USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD || value == USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD) { 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = (int16_t)value; 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = 0; 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (value == USEARCH_ATTRIBUTE_VALUE_COUNT) { 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUSearchAttributeValue SearchIterator::getAttribute( 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USearchAttribute attribute) const 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (attribute) { 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case USEARCH_OVERLAP : 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (m_search_->isOverlap == TRUE ? USEARCH_ON : USEARCH_OFF); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case USEARCH_CANONICAL_MATCH : 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (m_search_->isCanonicalMatch == TRUE ? USEARCH_ON : 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_OFF); 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case USEARCH_ELEMENT_COMPARISON : 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t value = m_search_->elementComparisonType; 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (value == USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD || value == USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD) { 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (USearchAttributeValue)value; 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return USEARCH_STANDARD_ELEMENT_COMPARISON; 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default : 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DEFAULT; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::getMatchedStart() const 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_search_->matchedIndex; 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::getMatchedLength() const 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_search_->matchedLength; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::getMatchedText(UnicodeString &result) const 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchedindex = m_search_->matchedIndex; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchedlength = m_search_->matchedLength; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchedindex != USEARCH_DONE && matchedlength != 0) { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.setTo(m_search_->text + matchedindex, matchedlength); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.remove(); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setBreakIterator(BreakIterator *breakiter, 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode &status) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 126c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if 0 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->breakIter = NULL; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the c++ breakiterator may not make use of ubreakiterator. 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // so we'll have to keep track of it ourselves. 130c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else 131c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Well, gee... the Constructors that take a BreakIterator 132c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // all cast the BreakIterator to a UBreakIterator and 133c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // pass it to the corresponding usearch_openFromXXX 134c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // routine, so there's no reason not to do this. 135c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // 136c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Besides, a UBreakIterator is a BreakIterator, so 137c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // any subclass of BreakIterator should work fine here... 138c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru m_search_->breakIter = (UBreakIterator *) breakiter; 139c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 140c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_ = breakiter; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst BreakIterator * SearchIterator::getBreakIterator(void) const 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_breakiterator_; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setText(const UnicodeString &text, UErrorCode &status) 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text.length() == 0) { 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_text_ = text; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->text = m_text_.getBuffer(); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength = m_text_.length(); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setText(CharacterIterator &text, UErrorCode &status) 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.getText(m_text_); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setText(m_text_, status); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst UnicodeString & SearchIterator::getText(void) const 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_text_; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// operator overloading ---------------------------------------------- 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool SearchIterator::operator==(const SearchIterator &that) const 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (this == &that) { 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (m_breakiterator_ == that.m_breakiterator_ && 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch == that.m_search_->isCanonicalMatch && 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap == that.m_search_->isOverlap && 18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType == that.m_search_->elementComparisonType && 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex == that.m_search_->matchedIndex && 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength == that.m_search_->matchedLength && 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength == that.m_search_->textLength && 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getOffset() == that.getOffset() && 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uprv_memcmp(m_search_->text, that.m_search_->text, 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength * sizeof(UChar)) == 0)); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// public methods ---------------------------------------------------- 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::first(UErrorCode &status) 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(0, status); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handleNext(0, status); 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::following(int32_t position, 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode &status) 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(position, status); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handleNext(position, status); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::last(UErrorCode &status) 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(m_search_->textLength, status); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handlePrev(m_search_->textLength, status); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::preceding(int32_t position, 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode &status) 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(position, status); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handlePrev(position, status); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::next(UErrorCode &status) 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset = getOffset(); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = m_search_->matchedIndex; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchlength = m_search_->matchedLength; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->reset = FALSE; 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_->isForwardSearching == TRUE) { 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t textlength = m_search_->textLength; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (offset == textlength || matchindex == textlength || 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (matchindex != USEARCH_DONE && 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex + matchlength >= textlength)) { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // not enough characters to match 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchNotFound(); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // switching direction. 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if matchedIndex == USEARCH_DONE, it means that either a 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setOffset has been called or that previous ran off the text 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // string. the iterator would have been set to offset 0 if a 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // match is not found. 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = TRUE; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_->matchedIndex != USEARCH_DONE) { 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // there's no need to set the collation element iterator 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the next call to next will set the offset. 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return matchindex; 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchlength > 0) { 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if matchlength is 0 we are at the start of the iteration 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_->isOverlap) { 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru offset ++; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru offset += matchlength; 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handleNext(offset, status); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t SearchIterator::previous(UErrorCode &status) 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_->reset) { 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru offset = m_search_->textLength; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = FALSE; 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->reset = FALSE; 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(offset, status); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru offset = getOffset(); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = m_search_->matchedIndex; 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_->isForwardSearching == TRUE) { 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // switching direction. 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if matchedIndex == USEARCH_DONE, it means that either a 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setOffset has been called or that next ran off the text 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // string. the iterator would have been set to offset textLength if 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // a match is not found. 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = FALSE; 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != USEARCH_DONE) { 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return matchindex; 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (offset == 0 || matchindex == 0) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // not enough characters to match 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchNotFound(); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != USEARCH_DONE) { 316c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (m_search_->isOverlap) { 317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru matchindex += m_search_->matchedLength - 2; 318c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 319c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handlePrev(matchindex, status); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return handlePrev(offset, status); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 325c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::reset() 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchNotFound(); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(0, status); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = FALSE; 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = FALSE; 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = 0; 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = TRUE; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->reset = TRUE; 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// protected constructors and destructors ----------------------------- 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator::SearchIterator() 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_ = (USearch *)uprv_malloc(sizeof(USearch)); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->breakIter = NULL; 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = FALSE; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = FALSE; 34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = 0; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = TRUE; 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->reset = TRUE; 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex = USEARCH_DONE; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength = 0; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->text = NULL; 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength = 0; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_ = NULL; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator::SearchIterator(const UnicodeString &text, 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breakiter) : 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_(breakiter), 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_text_(text) 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_ = (USearch *)uprv_malloc(sizeof(USearch)); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->breakIter = NULL; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = FALSE; 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = FALSE; 36850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = 0; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = TRUE; 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->reset = TRUE; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex = USEARCH_DONE; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength = 0; 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->text = m_text_.getBuffer(); 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength = text.length(); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator::SearchIterator(CharacterIterator &text, 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breakiter) : 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_(breakiter) 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_ = (USearch *)uprv_malloc(sizeof(USearch)); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->breakIter = NULL; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = FALSE; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = FALSE; 38550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = 0; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isForwardSearching = TRUE; 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->reset = TRUE; 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex = USEARCH_DONE; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength = 0; 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.getText(m_text_); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->text = m_text_.getBuffer(); 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength = m_text_.length(); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_ = breakiter; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// protected methods ------------------------------------------------------ 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator & SearchIterator::operator=(const SearchIterator &that) 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (this != &that) { 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_ = that.m_breakiterator_; 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_text_ = that.m_text_; 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->breakIter = that.m_search_->breakIter; 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isCanonicalMatch = that.m_search_->isCanonicalMatch; 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->isOverlap = that.m_search_->isOverlap; 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho m_search_->elementComparisonType = that.m_search_->elementComparisonType; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex = that.m_search_->matchedIndex; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength = that.m_search_->matchedLength; 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->text = that.m_search_->text; 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->textLength = that.m_search_->textLength; 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *this; 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setMatchLength(int32_t length) 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedLength = length; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setMatchStart(int32_t position) 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_search_->matchedIndex = position; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid SearchIterator::setMatchNotFound() 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchStart(USEARCH_DONE); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchLength(0); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // by default no errors should be returned here since offsets are within 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // range. 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_search_->isForwardSearching) { 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(m_search_->textLength, status); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setOffset(0, status); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */ 444