#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <chrono>
using namespace std;
using namespace std::chrono;
// Temp loger
class Log
{
public:
virtual ~Log();
std::ostringstream& Get();
protected:
std::ostringstream os;
};
std::ostringstream& Log::Get() { return os; }
Log::~Log()
{
ofstream ofs("log1", ios::ate);
ofs << os.str();
}
// perm logger
class Log2
{
public:
Log2();
virtual ~Log2();
std::ofstream& Get();
protected:
std::ofstream os;
};
std::ofstream& Log2::Get() { return os; }
Log2::~Log2() { }
Log2::Log2() : os("log2") { }
int main()
{
const int N = 100000;
time_point<high_resolution_clock> t0 = high_resolution_clock::now();
{
for(int i = 0; i < N; i++)
Log().Get() << "Log record " << i << endl;
}
time_point<high_resolution_clock> t1 = high_resolution_clock::now();
{
Log2 logger;
for(int i = 0; i < N; i++)
logger.Get() << "Log record " << i << endl;
}
time_point<high_resolution_clock> t2 = high_resolution_clock::now();
cout << "Temp logger:" << duration_cast<milliseconds>(t1 - t0).count() << " millisecs" << endl;
cout << "Perm logger:" << duration_cast<milliseconds>(t2 - t1).count() << " millisecs" << endl;
cin.get();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxjaHJvbm8+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vOyAKCi8vIFRlbXAgbG9nZXIgCmNsYXNzIExvZwp7CnB1YmxpYzoKCXZpcnR1YWwgfkxvZygpOwoJc3RkOjpvc3RyaW5nc3RyZWFtJiBHZXQoKTsKcHJvdGVjdGVkOgoJc3RkOjpvc3RyaW5nc3RyZWFtIG9zOwp9OwpzdGQ6Om9zdHJpbmdzdHJlYW0mIExvZzo6R2V0KCkgeyByZXR1cm4gb3M7IH0KTG9nOjp+TG9nKCkKewoJb2ZzdHJlYW0gb2ZzKCJsb2cxIiwgaW9zOjphdGUpOyAKCW9mcyA8PCBvcy5zdHIoKTsgCn0KCi8vIHBlcm0gbG9nZ2VyCmNsYXNzIExvZzIKewpwdWJsaWM6CglMb2cyKCk7Cgl2aXJ0dWFsIH5Mb2cyKCk7CglzdGQ6Om9mc3RyZWFtJiBHZXQoKTsKcHJvdGVjdGVkOgoJc3RkOjpvZnN0cmVhbSBvczsKfTsKc3RkOjpvZnN0cmVhbSYgTG9nMjo6R2V0KCkgeyByZXR1cm4gb3M7IH0KTG9nMjo6fkxvZzIoKSB7IH0KTG9nMjo6TG9nMigpIDogb3MoImxvZzIiKSB7IH0KCmludCBtYWluKCkKewoJY29uc3QgaW50IE4gPSAxMDAwMDA7CgoJdGltZV9wb2ludDxoaWdoX3Jlc29sdXRpb25fY2xvY2s+IHQwID0gaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsgCgl7CgkJZm9yKGludCBpID0gMDsgaSA8IE47IGkrKykKCQkJTG9nKCkuR2V0KCkgPDwgIkxvZyByZWNvcmQgIiA8PCBpIDw8IGVuZGw7Cgl9Cgl0aW1lX3BvaW50PGhpZ2hfcmVzb2x1dGlvbl9jbG9jaz4gdDEgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwoJewoJCUxvZzIgbG9nZ2VyOwoJCWZvcihpbnQgaSA9IDA7IGkgPCBOOyBpKyspCgkJCWxvZ2dlci5HZXQoKSA8PCAiTG9nIHJlY29yZCAiIDw8IGkgPDwgZW5kbDsKCX0KCXRpbWVfcG9pbnQ8aGlnaF9yZXNvbHV0aW9uX2Nsb2NrPiB0MiA9IGhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7Cgljb3V0IDw8ICJUZW1wIGxvZ2dlcjoiIDw8IGR1cmF0aW9uX2Nhc3Q8bWlsbGlzZWNvbmRzPih0MSAtIHQwKS5jb3VudCgpIDw8ICIgbWlsbGlzZWNzIiA8PCBlbmRsOyAKCWNvdXQgPDwgIlBlcm0gbG9nZ2VyOiIgPDwgZHVyYXRpb25fY2FzdDxtaWxsaXNlY29uZHM+KHQyIC0gdDEpLmNvdW50KCkgPDwgIiBtaWxsaXNlY3MiIDw8IGVuZGw7CgljaW4uZ2V0KCk7IAp9