Skip to content

Commit

Permalink
[2_1] Minor perf improvements on tm_decode
Browse files Browse the repository at this point in the history
  • Loading branch information
da-liii authored Jun 20, 2024
1 parent 6085922 commit 2be1272
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 22 deletions.
44 changes: 22 additions & 22 deletions Data/String/cork.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,6 @@ tm_encode (string s) {
return r;
}

string
tm_decode (string s) {
// TeXmacs encoding to verbatim
int i;
string r;
for (i= 0; i < N (s); i++) {
if (s[i] == '<') {
int j;
for (j= i + 1; j < N (s); j++)
if (s[j] == '>') break;
if (j < N (s)) j++;
if (s (i, j) == "<less>") r << "<";
else if (s (i, j) == "<gtr>") r << ">";
else if (i + 7 == j && s[i + 1] == '#' && s[j - 1] == '>') r << s (i, j);
i= j - 1;
if (s[i] != '>') return r;
}
else if (s[i] != '>') r << s[i];
}
return r;
}

string
tm_var_encode (string s) {
int i, n= N (s);
Expand All @@ -79,6 +57,28 @@ tm_var_encode (string s) {
return r;
}

string
tm_decode (string s) {
// TeXmacs encoding to verbatim
string r;
int s_N= N (s);
for (int i= 0; i < s_N; i++) {
if (s[i] == '<') {
int j;
for (j= i + 1; j < s_N; j++)
if (s[j] == '>') break;
if (j < s_N) j++;
if (s (i, j) == "<less>") r << "<";
else if (s (i, j) == "<gtr>") r << ">";
else if (i + 7 == j && s[i + 1] == '#' && s[j - 1] == '>') r << s (i, j);
i= j - 1;
if (s[i] != '>') return r;
}
else if (s[i] != '>') r << s[i];
}
return r;
}

string
tm_correct (string s) {
int i;
Expand Down
14 changes: 14 additions & 0 deletions tests/Data/String/cork_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,20 @@ TEST_CASE ("tm_encode") {
string_eq (tm_encode (""), "");
}

TEST_CASE ("tm_var_encode") {
string_eq (tm_var_encode ("<>"), "<less><gtr>");
string_eq (tm_var_encode ("<#ABCD>"), "<#ABCD>");
string_eq (tm_encode ("abc"), "abc");
string_eq (tm_encode (""), "");
}

TEST_CASE ("tm_decode") {
string_eq (tm_decode ("<less><gtr>"), "<>");
string_eq (tm_decode ("<#ABCD>"), "<#ABCD>");
string_eq (tm_decode ("abc"), "abc");
string_eq (tm_decode (""), "");
}

TEST_CASE ("tm_length") {
string_eq (tm_string_length (""), 0);
string_eq (tm_string_length ("<#ABCD>"), 1);
Expand Down

0 comments on commit 2be1272

Please sign in to comment.