13 const uint64_t wordPos)
15 : m_word_content(word.data()), m_word_length(word.length()), m_wordPos(wordPos) {
19 : m_word_content(word_content), m_word_length(word_length), m_wordPos(wordPos) {
31 <<
", wordPos=" <<
m_wordPos <<
"}" << std::endl;
37 LDEBUG <<
"PrefixIterator::operator==():"
48 LDEBUG <<
"PrefixIterator::operator!=():"
57 const uint64_t wordPos)
67 const uint64_t wordPos)
139 LDEBUG <<
"ForwardPrefixIterator::clone: "
191 const char32_t searchChar, int32_t wordOffset, int32_t highCharTextPos )
const {
194 if( wordOffset > 1 ) {
196 int range = highCharTextPos;
199 LTRACE <<
"ForwardPrefixIterator::findEdge(" << searchChar <<
"): min = " << min
200 <<
" range = " << range;
203 int32_t offset = min;
205 offset = min + range/2;
206 int32_t offset0 = offset;
208 LTRACE <<
"ForwardPrefixIterator::findEdge(1): min = " << min
209 <<
" range = " << range <<
" try " << offset;
212 if( edgeLabel == searchChar ) {
214 LTRACE <<
"ForwardPrefixIterator::findEdge(1): match " << edgeLabel <<
" return " << offset0;
218 else if( searchChar > edgeLabel ){
219 range = min + range - offset0 - 1;
223 range = offset0 - min;
227 LTRACE <<
"ForwardPrefixIterator::findEdge(1): min = " << min
228 <<
" range = " << range <<
" try " << min;
230 int32_t offset0 = min;
232 if( edgeLabel == searchChar ) {
234 LTRACE <<
"ForwardPrefixIterator::findEdge(1): match " << edgeLabel <<
" return " << offset0;
240 LTRACE <<
"ForwardPrefixIterator::findEdge(1): unmatch " << edgeLabel <<
" and " << searchChar;
247 int32_t min = highCharTextPos;
251 LTRACE <<
"ForwardPrefixIterator::findEdge(" << searchChar <<
"): min = " << min
252 <<
" range = " << range;
255 int32_t offset = min;
257 offset = 2*(min + range/2);
258 int32_t offset0 = offset;
260 LTRACE <<
"ForwardPrefixIterator::findEdge(2): min = " << min
261 <<
" range = " << range <<
" try " << offset;
264 if( edgeLabel == searchChar ) {
266 LTRACE <<
"ForwardPrefixIterator::findEdge(2): match " << edgeLabel <<
" return " << offset0/2;
270 else if( searchChar > edgeLabel ){
271 range = min + range - offset0 - 2;
272 min = 2*(offset0 + 1);
275 range = offset0 - min;
279 LTRACE <<
"ForwardPrefixIterator::findEdge(2): min = " << min
280 <<
" range = " << range <<
" try " << min;
282 int32_t offset0 = min;
284 if( edgeLabel == searchChar ) {
286 LTRACE <<
"ForwardPrefixIterator::findEdge(2): match " << edgeLabel <<
" return " << offset0/2;
292 LTRACE <<
"ForwardPrefixIterator::findEdge(2): unmatch " << edgeLabel <<
" and " << searchChar;
PrefixIterator * clone(const PrefixIterator *const orig) const override
void next(const int32_t wordOffset) override
char32_t getNextLetter(int32_t &wordOffset) const override
int32_t getExternalWordPos() const override
bool hasNextLetter() const override
int32_t findEdge(const char32_t searchChar, int32_t wordOffset, int32_t highCharTextPos) const
void terminate() override
const LimaString getCurrentPrefix() const override
const LimaString getTotalPrefix() const override
const LimaString getPastPrefix() const override
const Lima::LimaChar * getCurrentContent() const override
bool operator!=(const PrefixIterator &it) const
friend LIMA_FSAACCESS_EXPORT std::ostream & operator<<(std::ostream &os, const PrefixIterator &t)
void print(std::ostream &os) const
PrefixIterator(const LimaString &word, const uint64_t offset)
friend class ReversePrefixIterator
const Lima::LimaChar *const m_word_content
bool operator==(const PrefixIterator &it) const
friend class ForwardPrefixIterator
bool hasNextLetter() const override
void terminate() override
const LimaString getPastPrefix() const override
void next(const int32_t wordOffset) override
char32_t getNextLetter(int32_t &wordOffset) const override
int32_t getExternalWordPos() const override
const LimaString getTotalPrefix() const override
const Lima::LimaChar * getCurrentContent() const override
PrefixIterator * clone(const PrefixIterator *const orig) const override
const LimaString getCurrentPrefix() const override
std::string limastring2utf8stdstring(const Lima::LimaString &phrase, uint32_t size0)
Convert a wide string to a string , in dest up to size bytes.