@@ -42,7 +42,6 @@ class graphemedText
42
42
private:
43
43
bool graphemeIndexDirty = true ;
44
44
vector<size_t > graphemeIndexMap;
45
- vector<size_t > graphemeSizeMap;
46
45
string stringRep;
47
46
void createFromString (const string &cstr);
48
47
void createFromChar (const char *cstr);
@@ -122,7 +121,6 @@ void graphemedText::regenerateGraphemeIndex()
122
121
graphemeIndexDirty = false ;
123
122
124
123
graphemeIndexMap.clear ();
125
- graphemeSizeMap.clear ();
126
124
size_t i = 0 ;
127
125
size_t currentGraphemeSize = 0 ;
128
126
@@ -178,7 +176,6 @@ void graphemedText::regenerateGraphemeIndex()
178
176
if (currentGraphemeSize > 0 )
179
177
{
180
178
graphemeIndexMap.push_back (i);
181
- graphemeSizeMap.push_back (currentGraphemeSize);
182
179
}
183
180
currentGraphemeSize = 0 ;
184
181
}
@@ -193,8 +190,10 @@ void graphemedText::regenerateGraphemeIndex()
193
190
if (currentGraphemeSize > 0 )
194
191
{
195
192
graphemeIndexMap.push_back (i);
196
- graphemeSizeMap.push_back (currentGraphemeSize);
197
193
}
194
+
195
+ // '\0'
196
+ graphemeIndexMap.push_back (stringRep.length ());
198
197
}
199
198
}
200
199
@@ -221,7 +220,7 @@ size_t graphemedText::size()
221
220
if (stringRep.length () <= 1 )
222
221
return stringRep.length ();
223
222
regenerateGraphemeIndex ();
224
- return graphemeIndexMap.size ();
223
+ return graphemeIndexMap.size () - 1 ;
225
224
}
226
225
bool graphemedText::empty () const
227
226
{
@@ -291,12 +290,12 @@ graphemedText &graphemedText::operator=(char x)
291
290
string graphemedText::operator [](size_t i)
292
291
{
293
292
regenerateGraphemeIndex ();
294
- if (i >= graphemeIndexMap. size ())
293
+ if (i >= size ())
295
294
{
296
295
cout << " Out-of-bounds index access." << endl;
297
296
exit (1 );
298
297
}
299
- return stringRep.substr (graphemeIndexMap[i], graphemeSizeMap [i]);
298
+ return stringRep.substr (graphemeIndexMap[i], graphemeIndexMap[i+ 1 ] - graphemeIndexMap [i]);
300
299
}
301
300
// [] for setting
302
301
/* string graphemedText::operator[](int i)
@@ -426,7 +425,7 @@ double graphemedText::getNumber() const
426
425
graphemedText graphemedText::substr (size_t from, size_t count)
427
426
{
428
427
regenerateGraphemeIndex ();
429
- count = from + count > graphemeIndexMap. size () ? graphemeIndexMap. size () - from : count;
428
+ count = from + count > size () ? size () - from : count;
430
429
return stringRep.substr (graphemeIndexMap[from], graphemeIndexMap[from + count] - graphemeIndexMap[from]);
431
430
}
432
431
@@ -445,7 +444,7 @@ graphemedText graphemedText::substr(size_t from)
445
444
{
446
445
regenerateGraphemeIndex ();
447
446
string new_text = " " ;
448
- for (size_t i = from; i < graphemeIndexMap. size (); ++i)
447
+ for (size_t i = from; i < size (); ++i)
449
448
{
450
449
new_text += graphemeIndexMap[i];
451
450
}
0 commit comments