Skip to content

Commit 939288e

Browse files
committed
Improve text even more
1 parent cb31326 commit 939288e

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

src/ldpl_lib/ldpl_lib.cpp

+8-9
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class graphemedText
4242
private:
4343
bool graphemeIndexDirty = true;
4444
vector<size_t> graphemeIndexMap;
45-
vector<size_t> graphemeSizeMap;
4645
string stringRep;
4746
void createFromString(const string &cstr);
4847
void createFromChar(const char *cstr);
@@ -122,7 +121,6 @@ void graphemedText::regenerateGraphemeIndex()
122121
graphemeIndexDirty = false;
123122

124123
graphemeIndexMap.clear();
125-
graphemeSizeMap.clear();
126124
size_t i = 0;
127125
size_t currentGraphemeSize = 0;
128126

@@ -178,7 +176,6 @@ void graphemedText::regenerateGraphemeIndex()
178176
if (currentGraphemeSize > 0)
179177
{
180178
graphemeIndexMap.push_back(i);
181-
graphemeSizeMap.push_back(currentGraphemeSize);
182179
}
183180
currentGraphemeSize = 0;
184181
}
@@ -193,8 +190,10 @@ void graphemedText::regenerateGraphemeIndex()
193190
if (currentGraphemeSize > 0)
194191
{
195192
graphemeIndexMap.push_back(i);
196-
graphemeSizeMap.push_back(currentGraphemeSize);
197193
}
194+
195+
// '\0'
196+
graphemeIndexMap.push_back(stringRep.length());
198197
}
199198
}
200199

@@ -221,7 +220,7 @@ size_t graphemedText::size()
221220
if (stringRep.length() <= 1)
222221
return stringRep.length();
223222
regenerateGraphemeIndex();
224-
return graphemeIndexMap.size();
223+
return graphemeIndexMap.size() - 1;
225224
}
226225
bool graphemedText::empty() const
227226
{
@@ -291,12 +290,12 @@ graphemedText &graphemedText::operator=(char x)
291290
string graphemedText::operator[](size_t i)
292291
{
293292
regenerateGraphemeIndex();
294-
if (i >= graphemeIndexMap.size())
293+
if (i >= size())
295294
{
296295
cout << "Out-of-bounds index access." << endl;
297296
exit(1);
298297
}
299-
return stringRep.substr(graphemeIndexMap[i], graphemeSizeMap[i]);
298+
return stringRep.substr(graphemeIndexMap[i], graphemeIndexMap[i+1] - graphemeIndexMap[i]);
300299
}
301300
// [] for setting
302301
/*string graphemedText::operator[](int i)
@@ -426,7 +425,7 @@ double graphemedText::getNumber() const
426425
graphemedText graphemedText::substr(size_t from, size_t count)
427426
{
428427
regenerateGraphemeIndex();
429-
count = from + count > graphemeIndexMap.size() ? graphemeIndexMap.size() - from : count;
428+
count = from + count > size() ? size() - from : count;
430429
return stringRep.substr(graphemeIndexMap[from], graphemeIndexMap[from + count] - graphemeIndexMap[from]);
431430
}
432431

@@ -445,7 +444,7 @@ graphemedText graphemedText::substr(size_t from)
445444
{
446445
regenerateGraphemeIndex();
447446
string new_text = "";
448-
for (size_t i = from; i < graphemeIndexMap.size(); ++i)
447+
for (size_t i = from; i < size(); ++i)
449448
{
450449
new_text += graphemeIndexMap[i];
451450
}

0 commit comments

Comments
 (0)