All pastes #127937 Raw Edit

Lindquist

public cpp v1 · immutable
·published 2006-08-12 15:25 UTC
rendered paste body
#include <cstdio>#include <cstring>#include <ctime>#include <cassert>/*!\brief	Simple timer class.*/class SimpleTimer{	clock_t d_baseTime;public:	SimpleTimer() : d_baseTime(clock()) {}	void	restart()	{ d_baseTime = clock(); }	double	elapsed()	{ return static_cast<double>(clock() - d_baseTime) / CLOCKS_PER_SEC; }};unsigned as_hex(const char* value){    unsigned x = 0;    const unsigned char* ptr = (const unsigned char*)value;    unsigned char b;    unsigned char count = 0;    while ((b = *ptr++) && (++count <= sizeof(unsigned)*2))    {        x <<= 4;        switch (b)        {        case '0':        case '1':        case '2':        case '3':        case '4':        case '5':        case '6':        case '7':        case '8':        case '9':            x |= b - '0';            break;        case 'A':        case 'a':            x |= 10;            break;        case 'B':        case 'b':            x |= 11;            break;        case 'C':        case 'c':            x |= 12;            break;        case 'D':        case 'd':            x |= 13;            break;        case 'E':        case 'e':            x |= 14;            break;        case 'F':        case 'f':            x |= 15;            break;        default:            return 0;        }    }    return x;}double t1_avg = 0;double t2_avg = 0;const unsigned N = 500000;static char data[N][8];void init(){    for (unsigned i=0; i<N; ++i)    {        sprintf(data[i], "%X", i);    }}void bench(){    SimpleTimer timer;        timer.restart();    for (unsigned i=0; i<N; ++i)    {        unsigned x = as_hex(data[i]);        assert(x == i);    }    double t1 = timer.elapsed();    t1_avg += t1;        timer.restart();    for (unsigned i=0; i<N; ++i)    {        unsigned x;        sscanf(data[i], "%X", &x);        assert(x == i);    }    double t2 = timer.elapsed();    t2_avg += t2;        printf("as_hex = %0.6f s\nsscanf = %0.6f s\n", t1, t2);}int main(){    init();        int NN = 15;    for (int i=0; i<NN; ++i)        bench();    t1_avg /= NN*N;    t2_avg /= NN*N;    printf("as_hex avg = %E s\nsscanf avg = %E s\n", t1_avg, t2_avg);    return 0;}as_hex = 0.031000 ssscanf = 0.109000 sas_hex = 0.032000 ssscanf = 0.109000 sas_hex = 0.031000 ssscanf = 0.110000 sas_hex = 0.015000 ssscanf = 0.125000 sas_hex = 0.016000 ssscanf = 0.109000 sas_hex = 0.031000 ssscanf = 0.110000 sas_hex = 0.031000 ssscanf = 0.109000 sas_hex = 0.016000 ssscanf = 0.125000 sas_hex = 0.031000 ssscanf = 0.094000 sas_hex = 0.031000 ssscanf = 0.110000 sas_hex = 0.015000 ssscanf = 0.110000 sas_hex = 0.031000 ssscanf = 0.109000 sas_hex = 0.032000 ssscanf = 0.093000 sas_hex = 0.032000 ssscanf = 0.109000 sas_hex = 0.031000 ssscanf = 0.094000 sas_hex avg = 5.413333E-008 ssscanf avg = 2.166667E-007 s