#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cctype>
#include <algorithm>
/* 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);
}
int main()
{
struct timeval tvBegin, tvEnd, tvDiff;
// begin
gettimeofday(&tvBegin, NULL);
timeval_print(&tvBegin);
static char str1[100] = "str,, ing";
size_t size = sizeof(str1)/sizeof(str1[0]);
// lengthy operation
int i,j;
for(i=0;i<999999L;++i) {
int bad = 0;
int cur = 0;
while (str1[cur] != '\0') {
if (bad < cur && !ispunct(str1[cur]) && !isspace(str1[cur])) {
str1[bad] = str1[cur];
}
if (ispunct(str1[cur]) || isspace(str1[cur])) {
cur++;
}
else {
cur++;
bad++;
}
}
str1[bad] = '\0';
}
//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;
}
I2luY2x1ZGUgPHRpbWUuaD4KICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPgogICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAjaW5jbHVkZSA8bWF0aC5oPgogICAgI2luY2x1ZGUgPGNjdHlwZT4KICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAKICAgIC8qIFJldHVybiAxIGlmIHRoZSBkaWZmZXJlbmNlIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgMC4gICovCiAgICBpbnQgdGltZXZhbF9zdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCAqcmVzdWx0LCBzdHJ1Y3QgdGltZXZhbCAqdDIsIHN0cnVjdCB0aW1ldmFsICp0MSkKICAgIHsKICAgIAlsb25nIGludCBkaWZmID0gKHQyLT50dl91c2VjICsgMTAwMDAwMCAqIHQyLT50dl9zZWMpIC0gKHQxLT50dl91c2VjICsgMTAwMDAwMCAqIHQxLT50dl9zZWMpOwogICAgCXJlc3VsdC0+dHZfc2VjID0gZGlmZiAvIDEwMDAwMDA7CiAgICAJcmVzdWx0LT50dl91c2VjID0gZGlmZiAlIDEwMDAwMDA7CiAgICAJCiAgICAJcmV0dXJuIChkaWZmPDApOwogICAgfQogICAgCiAgICB2b2lkIHRpbWV2YWxfcHJpbnQoc3RydWN0IHRpbWV2YWwgKnR2KQogICAgewogICAgCWNoYXIgYnVmZmVyWzMwXTsKICAgIAl0aW1lX3QgY3VydGltZTsKICAgIAkKICAgIAlwcmludGYoIiVsZC4lMDZsZCIsIHR2LT50dl9zZWMsIHR2LT50dl91c2VjKTsKICAgIAljdXJ0aW1lID0gdHYtPnR2X3NlYzsKICAgIAlzdHJmdGltZShidWZmZXIsIDMwLCAiJW0tJWQtJVkgICVUIiwgbG9jYWx0aW1lKCZjdXJ0aW1lKSk7CiAgICAJcHJpbnRmKCIgPSAlcy4lMDZsZFxuIiwgYnVmZmVyLCB0di0+dHZfdXNlYyk7CiAgICB9CiAgICAKICAgIGludCBtYWluKCkKICAgIHsKICAgIAlzdHJ1Y3QgdGltZXZhbCB0dkJlZ2luLCB0dkVuZCwgdHZEaWZmOwogICAgCQogICAgCS8vIGJlZ2luCiAgICAJZ2V0dGltZW9mZGF5KCZ0dkJlZ2luLCBOVUxMKTsKICAgIAl0aW1ldmFsX3ByaW50KCZ0dkJlZ2luKTsKCiAgICAgICAgc3RhdGljIGNoYXIgc3RyMVsxMDBdID0gInN0ciwsIGluZyI7CiAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2Yoc3RyMSkvc2l6ZW9mKHN0cjFbMF0pOwogICAgICAgIAogICAgCS8vIGxlbmd0aHkgb3BlcmF0aW9uCiAgICAJaW50IGksajsKICAgIAlmb3IoaT0wO2k8OTk5OTk5TDsrK2kpIHsKICAgICAgICAgICAgaW50IGJhZCA9IDA7CiAgICAgICAgICAgIGludCBjdXIgPSAwOwogICAgICAgICAgICB3aGlsZSAoc3RyMVtjdXJdICE9ICdcMCcpIHsKICAgICAgICAgICAgICAgIGlmIChiYWQgPCBjdXIgJiYgIWlzcHVuY3Qoc3RyMVtjdXJdKSAmJiAhaXNzcGFjZShzdHIxW2N1cl0pKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyMVtiYWRdID0gc3RyMVtjdXJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzcHVuY3Qoc3RyMVtjdXJdKSB8fCBpc3NwYWNlKHN0cjFbY3VyXSkpIHsKICAgICAgICAgICAgICAgICAgICBjdXIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGN1cisrOwogICAgICAgICAgICAgICAgICAgIGJhZCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0cjFbYmFkXSA9ICdcMCc7CiAgICAJfQogICAgCQogICAgCS8vZW5kCiAgICAJZ2V0dGltZW9mZGF5KCZ0dkVuZCwgTlVMTCk7CiAgICAJdGltZXZhbF9wcmludCgmdHZFbmQpOwogICAgCQogICAgCS8vIGRpZmYKICAgIAl0aW1ldmFsX3N1YnRyYWN0KCZ0dkRpZmYsICZ0dkVuZCwgJnR2QmVnaW4pOwogICAgCXByaW50ZigiJWxkLiUwNmxkXG4iLCB0dkRpZmYudHZfc2VjLCB0dkRpZmYudHZfdXNlYyk7CiAgICAKICAgIAlyZXR1cm4gMDsKICAgIH0K