#ifdef _MSC_VER #define _SECURE_SCL 0 #define _CRT_SECURE_NO_DEPRECATE 1 #define WIN32_LEAN_AND_MEAN #define VC_EXTRALEAN #define NOMINMAX #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cycle.h" #ifdef _MSC_VER #define snprintf _snprintf #endif static const int N = 100000; static const size_t R = 7; void PrintStats(std::vector timings) { double fastest = std::numeric_limits::max(); std::cout << std::fixed << std::setprecision(2); std::cout << "["; for (size_t i = 1 ; i std::string naive(T t) { std::string rv(std::numeric_limits::digits10+2, 0); size_t i = 0; if (!t) { rv[i++] = '0'; } else { size_t ro = 0; if (t < 0) { rv[i++] = '-'; t = std::abs(t); ro = 1; } for (T b ; t ; t = b) { b = t/10; T c = t%10; rv[i++] = static_cast('0' + c); } std::reverse(&rv[ro], &rv[i]); } rv.resize(i); return rv; } int main() { { size_t tlen = 0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r> y; tlen += y.length(); } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "strstream (new stream, reuse string): "; PrintStats(timings); std::cout << std::endl; std::cout << tlen << std::endl; } { size_t tlen = 0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r(ss.pcount())); tlen += y.length(); } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "strstream (reuse stream, reuse string): "; PrintStats(timings); std::cout << std::endl; std::cout << tlen << std::endl; } { size_t tlen = 0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r(i); tlen += y.length(); } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "lexical_cast (reuse string): "; PrintStats(timings); std::cout << std::endl; std::cout << tlen << std::endl; } { size_t tlen = 0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r(i); tlen += y.length(); } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "lexical_cast (new string): "; PrintStats(timings); std::cout << std::endl; std::cout << tlen << std::endl; } { using namespace boost::spirit; using boost::spirit::karma::generate; size_t tlen = 0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r