# Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Public Types | Public Member Functions | Friends

# 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>`

List of all members.

## Public Types

typedef BaseIterator | base_iterator
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, std::locale const &loc=std::locale())
| segment_index (boundary_type type, base_iterator begin, base_iterator end, std::locale const &loc=std::locale())
| segment_index (boundary_point_index< base_iterator > const &)
segment_index const & | operator= (boundary_point_index< base_iterator > const &)
void | map (boundary_type type, base_iterator begin, base_iterator end, std::locale const &loc=std::locale())
iterator | begin () const
iterator | end () const
iterator | find (base_iterator p) const
rule_type | rule () const
void | rule (rule_type v)
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.

## Member Typedef Documentation

template<typename BaseIterator>

typedef BaseIterator boost::locale::boundary::segment_index< BaseIterator >::base_iterator

The type of the iterator used to iterate over the original text

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

- boost/locale/boundary/index.hpp