#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cctype>
#include <algorithm>
#include <cstring>
/* Return 1 if the difference is negative, otherwise 0. */
int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1)
{
long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec);
result->tv_sec = diff / 1000000;
result->tv_usec = diff % 1000000;
return (diff<0);
}
void timeval_print(struct timeval *tv)
{
char buffer[30];
time_t curtime;
printf("%ld.%06ld", tv->tv_sec, tv->tv_usec);
curtime = tv->tv_sec;
strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime));
printf(" = %s.%06ld\n", buffer, tv->tv_usec);
}
bool is_char_category_in_question(const char& c) {
return std::ispunct(c) || std::isspace(c);
}
int main()
{
struct timeval tvBegin, tvEnd, tvDiff;
// begin
gettimeofday(&tvBegin, NULL);
timeval_print(&tvBegin);
static char str1[100] = "str,, ing";
size_t size = strlen(str1);
// lengthy operation
int i,j;
for(i=0;i<999999L;++i) {
std::remove_if(&str1[0], &str1[size-1], is_char_category_in_question);
}
//end
gettimeofday(&tvEnd, NULL);
timeval_print(&tvEnd);
// diff
timeval_subtract(&tvDiff, &tvEnd, &tvBegin);
printf("%ld.%06ld\n", tvDiff.tv_sec, tvDiff.tv_usec);
return 0;
}
CiAgICAjaW5jbHVkZSA8dGltZS5oPgogICAgI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAgICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgICNpbmNsdWRlIDxtYXRoLmg+CiAgICAjaW5jbHVkZSA8Y2N0eXBlPgogICAgI2luY2x1ZGUgPGFsZ29yaXRobT4KICAgICNpbmNsdWRlIDxjc3RyaW5nPgogICAgCiAgICAvKiBSZXR1cm4gMSBpZiB0aGUgZGlmZmVyZW5jZSBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIDAuICAqLwogICAgaW50IHRpbWV2YWxfc3VidHJhY3Qoc3RydWN0IHRpbWV2YWwgKnJlc3VsdCwgc3RydWN0IHRpbWV2YWwgKnQyLCBzdHJ1Y3QgdGltZXZhbCAqdDEpCiAgICB7CiAgICAJbG9uZyBpbnQgZGlmZiA9ICh0Mi0+dHZfdXNlYyArIDEwMDAwMDAgKiB0Mi0+dHZfc2VjKSAtICh0MS0+dHZfdXNlYyArIDEwMDAwMDAgKiB0MS0+dHZfc2VjKTsKICAgIAlyZXN1bHQtPnR2X3NlYyA9IGRpZmYgLyAxMDAwMDAwOwogICAgCXJlc3VsdC0+dHZfdXNlYyA9IGRpZmYgJSAxMDAwMDAwOwogICAgCQogICAgCXJldHVybiAoZGlmZjwwKTsKICAgIH0KICAgIAogICAgdm9pZCB0aW1ldmFsX3ByaW50KHN0cnVjdCB0aW1ldmFsICp0dikKICAgIHsKICAgIAljaGFyIGJ1ZmZlclszMF07CiAgICAJdGltZV90IGN1cnRpbWU7CiAgICAJCiAgICAJcHJpbnRmKCIlbGQuJTA2bGQiLCB0di0+dHZfc2VjLCB0di0+dHZfdXNlYyk7CiAgICAJY3VydGltZSA9IHR2LT50dl9zZWM7CiAgICAJc3RyZnRpbWUoYnVmZmVyLCAzMCwgIiVtLSVkLSVZICAlVCIsIGxvY2FsdGltZSgmY3VydGltZSkpOwogICAgCXByaW50ZigiID0gJXMuJTA2bGRcbiIsIGJ1ZmZlciwgdHYtPnR2X3VzZWMpOwogICAgfQogICAgCiAgICBib29sIGlzX2NoYXJfY2F0ZWdvcnlfaW5fcXVlc3Rpb24oY29uc3QgY2hhciYgYykgewogICAgICAgIHJldHVybiBzdGQ6OmlzcHVuY3QoYykgfHwgc3RkOjppc3NwYWNlKGMpOwogICAgfQogICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAJc3RydWN0IHRpbWV2YWwgdHZCZWdpbiwgdHZFbmQsIHR2RGlmZjsKICAgIAkKICAgIAkvLyBiZWdpbgogICAgCWdldHRpbWVvZmRheSgmdHZCZWdpbiwgTlVMTCk7CiAgICAJdGltZXZhbF9wcmludCgmdHZCZWdpbik7CgogICAgICAgIHN0YXRpYyBjaGFyIHN0cjFbMTAwXSA9ICJzdHIsLCBpbmciOwogICAgICAgIHNpemVfdCBzaXplID0gc3RybGVuKHN0cjEpOwogICAgICAgIAogICAgCS8vIGxlbmd0aHkgb3BlcmF0aW9uCiAgICAJaW50IGksajsKICAgIAlmb3IoaT0wO2k8OTk5OTk5TDsrK2kpIHsKICAgIAkJc3RkOjpyZW1vdmVfaWYoJnN0cjFbMF0sICZzdHIxW3NpemUtMV0sIGlzX2NoYXJfY2F0ZWdvcnlfaW5fcXVlc3Rpb24pOwogICAgCX0KICAgIAkKICAgIAkvL2VuZAogICAgCWdldHRpbWVvZmRheSgmdHZFbmQsIE5VTEwpOwogICAgCXRpbWV2YWxfcHJpbnQoJnR2RW5kKTsKICAgIAkKICAgIAkvLyBkaWZmCiAgICAJdGltZXZhbF9zdWJ0cmFjdCgmdHZEaWZmLCAmdHZFbmQsICZ0dkJlZ2luKTsKICAgIAlwcmludGYoIiVsZC4lMDZsZFxuIiwgdHZEaWZmLnR2X3NlYywgdHZEaWZmLnR2X3VzZWMpOwogICAgCiAgICAJcmV0dXJuIDA7CiAgICB9Cg==