boost::locale::boundary::segment_index< BaseIterator > Class Template Reference
Boundary Analysis

This class holds an index of segments in the text range and allows to iterate over them. More...

`#include <boost/locale/boundary/index.hpp>`

## Public Types

typedef BaseIterator | base_iterator
| The type of the iterator used to iterate over the original text.
typedef unspecified_iterator_type | iterator
typedef unspecified_iterator_type | const_iterator
typedef segment< base_iterator > | value_type

## Public Member Functions

| segment_index ()
| segment_index (boundary_type type, base_iterator begin, base_iterator end, rule_type mask, const std::locale &loc=std::locale())
| segment_index (boundary_type type, base_iterator begin, base_iterator end, const std::locale &loc=std::locale())
| segment_index (const boundary_point_index< base_iterator > &)
segment_index & | operator= (const boundary_point_index< base_iterator > &)
void | map (boundary_type type, base_iterator begin, base_iterator end, const std::locale &loc=std::locale())
iterator | begin () const
iterator | end () const
iterator | find (base_iterator p) const
rule_type | rule () const
| Get the mask of rules that are used.
void | rule (rule_type v)
| Set the mask of rules that are used.
bool | full_select () const
void | full_select (bool v)

## Friends

class | boundary_point_index< base_iterator >

## Detailed Description

template<typename BaseIterator>
class boost::locale::boundary::segment_index< BaseIterator >

This class holds an index of segments in the text range and allows to iterate over them.

This class is provides begin() and end() member functions that return bidirectional iterators to the segment objects.

It provides two options on way of selecting segments:

- rule(rule_type mask) - a mask that allows to select only specific types of segments according to various masks as word_any.
  The default is to select any types of boundaries.
  For example: using word boundary analysis, when the provided mask is word_kana then the iterators would iterate only over the words containing Kana letters and word_any would select all types of words excluding ranges that consist of white space and punctuation marks. So iterating over the text "to be or not to be?" with word_any rule would return segments "to", "be", "or", "not", "to", "be", instead of default "to", " ", "be", " ", "or", " ", "not", " ", "to", " ", "be", "?".
- full_select(bool how) - a flag that defines the way a range is selected if the rule of the previous boundary point does not fit the selected rule.
  For example: We want to fetch all sentences from the following text: "Hello! How\nare you?".
  This text contains three boundary points separating it to sentences by different rules:
  - The exclamation mark "!" ends the sentence "Hello!"
  - The line feed that splits the sentence "How\nare you?" into two parts.
  - The question mark that ends the second sentence.
    If you would only change the rule() to sentence_term then the segment_index would provide two sentences "Hello!" and "are you?" as only them actually terminated with required terminator "!" or "?". But changing full_select() to true, the selected segment would include all the text up to previous valid boundary point and would return two expected sentences: "Hello!" and "How\nare you?".

This class allows to find a segment according to the given iterator in range using find() member function.

Note

- Changing any of the options - rule() or full_select() and of course re-indexing the text invalidates existing iterators and they can't be used any more.
- segment_index can be created from boundary_point_index or other segment_index that was created with same boundary_type. This is very fast operation as they shared same index and it does not require its regeneration.

See also

- boundary_point_index
- segment
- boundary_point

Examples
  boundary.cpp, and wboundary.cpp.

The documentation for this class was generated from the following file:

- boost/locale/boundary/index.hpp

- © Copyright 2009-2012 Artyom Beilis, Distributed under the Boost Software License, Version 1.0.