Add SDS & RAPIDSTRING replace function implemented at used level

This commit is contained in:
Patrick Pelissier committed 2019-04-21 19:54:20 +02:00
1 parent 10e12d2b5c
commit 7c26fd25c9
1 file changed
+60 -3
+60 -3
View File
@@ -515,7 +515,6 @@ int testMLIB_scan (int count) {
return c;
}
int testMLIB_concat (int count) {
int i, j, c = 0;
string_t a, accum;
@@ -656,8 +655,31 @@ int testSDS_concat (int count) {
return c;
}
// Not found
//int testSDS_replace (int count) {
sds SDS_replace_at(sds str, size_t pos, size_t len, const char str2[])
{
// simple implementation as replace is not available
sds a = sdsnewlen((const void*) str, pos);
a = sdscat(a, str2);
a = sdscat(a, &str[pos+len]);
sdsfree(str);
return a;
}
int testSDS_replace (int count) {
int j, c = 0;
sds a;
a = sdsnew(TESTSTRING1);
for (j=0; j < count; j++) {
a = SDS_replace_at(a, 11, 4, "XXXXXX");
a = SDS_replace_at(a, 23, 2, "XXXXXX");
a = SDS_replace_at(a, 4, 8, "XX");
BARRIER(&a);
c += sdslen(a) ^j;
}
sdsfree(a);
return c;
}
#endif
#ifdef BENCH_CAN_USE_RAPIDSTRING
@@ -746,6 +768,33 @@ int testRAPIDSTRING_concat (int count) {
return c;
}
void RAPIDSTRING_replace_at(rapidstring *str, size_t pos, size_t len, const char str2[])
{
// simple implementation as replace is not available
rapidstring a;
rs_init_w_n(&a, rs_data(str), pos);
rs_cat(&a, str2);
rs_cat(&a, &rs_data(str)[pos+len] );
rs_free(str);
*str = a;
}
int testRAPIDSTRING_replace (int count) {
int j, c = 0;
rapidstring a;
rs_init_w(&a, TESTSTRING1);
for (j=0; j < count; j++) {
RAPIDSTRING_replace_at(&a, 11, 4, "XXXXXX");
RAPIDSTRING_replace_at(&a, 23, 2, "XXXXXX");
RAPIDSTRING_replace_at(&a, 4, 8, "XX");
BARRIER(&a);
c += rs_len(&a) ^j;
}
rs_free(&a);
return c;
}
#endif
@@ -1033,6 +1082,10 @@ int benchTest (const struct flags * runflags) {
c += timeTest (cps, testSDS_concat, 10);
print ("SDS", "concatenation", cps * 250);
}
if (runflags->runtest[7]) {
c += timeTest (cps, testSDS_replace, 10);
print ("SDS", "replace", cps);
}
#endif
#ifdef BENCH_CAN_USE_RAPIDSTRING
@@ -1060,6 +1113,10 @@ int benchTest (const struct flags * runflags) {
c += timeTest (cps, testRAPIDSTRING_concat, 10);
print ("RAPIDSTRING", "concatenation", cps * 250);
}
if (runflags->runtest[7]) {
c += timeTest (cps, testRAPIDSTRING_replace, 10);
print ("RAPIDSTRING", "replace", cps);
}
#endif
#ifdef BENCH_CAN_USE_GLIB