#include <iostream>
#include <sstream>
#include <string>
typedef int LogLevel;
bool isEnabled(LogLevel l){
return true;
}
namespace logger{
void log(LogLevel l, std::string const& msg){
std::cout << "(Level: " << l << "): " << msg << "\n";
}
}
#define DEBUG_LOG(Level, What) \
isEnabled(Level) && scoped_logger(Level, __FILE__, __LINE__).stream() << What
struct scoped_logger
{
scoped_logger(LogLevel level, char const* file, unsigned line)
: _level(level)
{ _ss << file << "(" << line << ") [" << getpid() << "] : "; }
std::stringstream& stream(){ return _ss; }
~scoped_logger(){ logger::log(_level, _ss.str()); }
private:
std::stringstream _ss;
LogLevel _level;
};
int main(){
DEBUG_LOG(0, "Hello, " << "World!");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnR5cGVkZWYgaW50IExvZ0xldmVsOwoKYm9vbCBpc0VuYWJsZWQoTG9nTGV2ZWwgbCl7CiAgcmV0dXJuIHRydWU7Cn0KCm5hbWVzcGFjZSBsb2dnZXJ7CiAgdm9pZCBsb2coTG9nTGV2ZWwgbCwgc3RkOjpzdHJpbmcgY29uc3QmIG1zZyl7CiAgICBzdGQ6OmNvdXQgPDwgIihMZXZlbDogIiA8PCBsIDw8ICIpOiAiIDw8IG1zZyA8PCAiXG4iOwogIH0KfQoKI2RlZmluZSBERUJVR19MT0coTGV2ZWwsIFdoYXQpIFwKICBpc0VuYWJsZWQoTGV2ZWwpICYmIHNjb3BlZF9sb2dnZXIoTGV2ZWwsIF9fRklMRV9fLCBfX0xJTkVfXykuc3RyZWFtKCkgPDwgV2hhdAoKc3RydWN0IHNjb3BlZF9sb2dnZXIKewogIHNjb3BlZF9sb2dnZXIoTG9nTGV2ZWwgbGV2ZWwsIGNoYXIgY29uc3QqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiAgICA6IF9sZXZlbChsZXZlbCkKICB7IF9zcyA8PCBmaWxlIDw8ICIoIiA8PCBsaW5lIDw8ICIpIFsiIDw8IGdldHBpZCgpIDw8ICJdIDogIjsgfQoKICBzdGQ6OnN0cmluZ3N0cmVhbSYgc3RyZWFtKCl7IHJldHVybiBfc3M7IH0KICB+c2NvcGVkX2xvZ2dlcigpeyBsb2dnZXI6OmxvZyhfbGV2ZWwsIF9zcy5zdHIoKSk7IH0KcHJpdmF0ZToKICBzdGQ6OnN0cmluZ3N0cmVhbSBfc3M7CiAgTG9nTGV2ZWwgX2xldmVsOwp9OwoKaW50IG1haW4oKXsKICBERUJVR19MT0coMCwgIkhlbGxvLCAiIDw8ICJXb3JsZCEiKTsKfQo=