32   Segments(std::initializer_list<const char*> initList) {
    33     for (
const string& item : initList) {
    38   Segments(std::initializer_list<string> initList) {
    39     for (
const string& item : initList) {
    44   void AddSegment(
const char* unmanagedString) {
    45     indexes.push_back(std::make_pair(unmanaged.size(), 
false));
    46     unmanaged.push_back(unmanagedString);
    49   void AddSegment(
const string& str) {
    50     indexes.push_back(std::make_pair(managed.size(), 
true));
    51     managed.push_back(str);
    54   class iterator : 
public std::iterator<std::input_iterator_tag, const char*> {
    57         : segments(_segments), cursor(_cursor) {}
    64     bool operator==(
const iterator& that)
 const {
    65       return cursor == that.cursor && segments == that.segments;
    68     bool operator!=(
const iterator& that)
 const {
    69       return !this->operator==(that);
    72     const char* operator*()
 const { 
return segments->At(cursor); }
    79   const char* At(
size_t cursor)
 const {
    80     const auto& index = indexes[cursor];
    82       return managed[index.first].c_str();
    84       return unmanaged[index.first];
    88   size_t Length()
 const { 
return indexes.size(); }
    90   iterator begin()
 const { 
return iterator(
this, 0); }
    92   iterator end()
 const { 
return iterator(
this, indexes.size()); }
    94   string ToString()
 const {
    97     std::ostringstream buffer;
    98     for (
const char* segment : *
this) {
   105   Segments(
const Segments&) {}
   107   vector<const char*> unmanaged;
   108   vector<string> managed;
   110   vector<std::pair<size_t, bool>> indexes;
 Segmented text. 
Definition: Segments.hpp:28
Definition: BinaryDict.hpp:24
Definition: Segments.hpp:54