33 Segments(std::initializer_list<const char*> initList) {
34 for (
const string& item : initList) {
39 Segments(std::initializer_list<string> initList) {
40 for (
const string& item : initList) {
45 void AddSegment(
const char* unmanagedString) {
46 indexes.push_back(std::make_pair(unmanaged.size(),
false));
47 unmanaged.push_back(unmanagedString);
50 void AddSegment(
const string& str) {
51 indexes.push_back(std::make_pair(managed.size(),
true));
52 managed.push_back(str);
55 class iterator :
public std::iterator<std::input_iterator_tag, const char*> {
59 : segments(_segments), cursor(_cursor) {
67 bool operator==(
const iterator& that)
const {
68 return cursor == that.cursor && segments == that.segments;
71 bool operator!=(
const iterator& that)
const {
72 return !this->operator==(that);
75 const char* operator*()
const {
76 return segments->At(cursor);
84 const char* At(
size_t cursor)
const {
85 const auto& index = indexes[cursor];
87 return managed[index.first].c_str();
89 return unmanaged[index.first];
93 size_t Length()
const {
94 return indexes.size();
97 iterator begin()
const {
98 return iterator(
this, 0);
101 iterator end()
const {
102 return iterator(
this, indexes.size());
105 string ToString()
const {
108 std::ostringstream buffer;
109 for (
const char* segment : *
this) {
116 Segments(
const Segments&) {
119 vector<const char*> unmanaged;
120 vector<string> managed;
122 vector<std::pair<size_t, bool>> indexes;
Segmented text.
Definition: Segments.hpp:28
Definition: BinaryDict.hpp:24
Definition: Segments.hpp:55