1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | /* Cool! it was fun to try out this ideone.com online compiler! Great for testing code snippets. Silly testing when fiddling with http://www.codeproject.com/KB/library/g2log.aspx -- for early testing of bitset vs std::atomic -- */ #include <iostream> #include <sstream> #include <string> #include <atomic> #include <cassert> #if !(defined(__PRETTY_FUNCTION__)) #define __PRETTY_FUNCTION__ __FUNCTION__ #endif class LogMessage { public: LogMessage(const std::string &file, const int line, const std::string& function, const std::string &level) : file_(file) , line_(line) , function_(function) , level_(level) {} virtual ~LogMessage() { std::cout << stream_.str() << std::endl; } std::ostringstream& messageStream(){return stream_;} protected: const std::string file_; const int line_; const std::string function_; const std::string level_; std::ostringstream stream_; std::string log_entry_; }; const int DEBUG = 0, INFO = 1, WARNING = 2, FATAL = 3; namespace internal { std::atomic<bool> g_log_level_status[4]; // DEBUG, INFO, WARNING, FATAL } void setLogLevel(int level, bool enabled) { assert((level >= DEBUG) && (level <= FATAL)); (internal::g_log_level_status[level]).store(enabled, std::memory_order_release); } bool logLevel(int level) { assert((level >= DEBUG) && (level <= FATAL)); bool status = (internal::g_log_level_status[level]).load(std::memory_order_acquire); return status; } #define G2_LOG_INFO LogMessage(__FILE__,__LINE__,__PRETTY_FUNCTION__, "INFO") #define LOG(level) if(logLevel(level)) G2_LOG_##level.messageStream() int main() { setLogLevel(INFO, true); LOG(INFO)<< "TEST asf" << std::endl; setLogLevel(INFO, false); LOG(INFO) << "TEST asf 2 (should not be shown)" << std::endl; setLogLevel(INFO, true); LOG(INFO) << "TEST asf 3 (SHOULD be shown)" << std::endl; return 0; } |
LyogCkNvb2whIGl0IHdhcyBmdW4gdG8gdHJ5IG91dCB0aGlzIGlkZW9uZS5jb20gb25saW5lIGNvbXBpbGVyISBHcmVhdCBmb3IgdGVzdGluZyBjb2RlIHNuaXBwZXRzLgoKU2lsbHkgdGVzdGluZyB3aGVuIGZpZGRsaW5nIHdpdGggaHR0cDovL3d3dy5jb2RlcHJvamVjdC5jb20vS0IvbGlicmFyeS9nMmxvZy5hc3B4Ci0tIGZvciBlYXJseSB0ZXN0aW5nIG9mIGJpdHNldCB2cyBzdGQ6OmF0b21pYyAtLSAgKi8KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxhdG9taWM+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKI2lmICEoZGVmaW5lZChfX1BSRVRUWV9GVU5DVElPTl9fKSkKI2RlZmluZSBfX1BSRVRUWV9GVU5DVElPTl9fICAgX19GVU5DVElPTl9fCiNlbmRpZgoKCmNsYXNzIExvZ01lc3NhZ2UKewogIHB1YmxpYzoKICAgIExvZ01lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGUsIGNvbnN0IGludCBsaW5lLCBjb25zdCBzdGQ6OnN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZsZXZlbCkKICAgICAgOiBmaWxlXyhmaWxlKQogICwgbGluZV8obGluZSkKICAsIGZ1bmN0aW9uXyhmdW5jdGlvbikKICAsIGxldmVsXyhsZXZlbCkKe30KCiAgICB2aXJ0dWFsIH5Mb2dNZXNzYWdlKCkKICB7CiAgICBzdGQ6OmNvdXQgPDwgc3RyZWFtXy5zdHIoKSA8PCBzdGQ6OmVuZGw7CiAgfQogIAoKICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSYgbWVzc2FnZVN0cmVhbSgpe3JldHVybiBzdHJlYW1fO30KCiAgcHJvdGVjdGVkOgogICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZV87CiAgICBjb25zdCBpbnQgbGluZV87CiAgICBjb25zdCBzdGQ6OnN0cmluZyBmdW5jdGlvbl87CiAgICBjb25zdCBzdGQ6OnN0cmluZyBsZXZlbF87CiAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtXzsKICAgIHN0ZDo6c3RyaW5nIGxvZ19lbnRyeV87Cn07Cgpjb25zdCBpbnQgREVCVUcgPSAwLCBJTkZPID0gMSwgV0FSTklORyA9IDIsIEZBVEFMID0gMzsKbmFtZXNwYWNlIGludGVybmFsCnsKICBzdGQ6OmF0b21pYzxib29sPiBnX2xvZ19sZXZlbF9zdGF0dXNbNF07IC8vIERFQlVHLCBJTkZPLCBXQVJOSU5HLCBGQVRBTAp9Cgp2b2lkIHNldExvZ0xldmVsKGludCBsZXZlbCwgYm9vbCBlbmFibGVkKQp7CiAgYXNzZXJ0KChsZXZlbCA+PSBERUJVRykgJiYgKGxldmVsIDw9IEZBVEFMKSk7CiAgKGludGVybmFsOjpnX2xvZ19sZXZlbF9zdGF0dXNbbGV2ZWxdKS5zdG9yZShlbmFibGVkLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKIH0KCgpib29sIGxvZ0xldmVsKGludCBsZXZlbCkKewogIGFzc2VydCgobGV2ZWwgPj0gREVCVUcpICYmIChsZXZlbCA8PSBGQVRBTCkpOwogIGJvb2wgc3RhdHVzID0gKGludGVybmFsOjpnX2xvZ19sZXZlbF9zdGF0dXNbbGV2ZWxdKS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwogIHJldHVybiBzdGF0dXM7Cn0KCiNkZWZpbmUgRzJfTE9HX0lORk8gIExvZ01lc3NhZ2UoX19GSUxFX18sX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXywgIklORk8iKQojZGVmaW5lIExPRyhsZXZlbCkgaWYobG9nTGV2ZWwobGV2ZWwpKSBHMl9MT0dfIyNsZXZlbC5tZXNzYWdlU3RyZWFtKCkKCmludCBtYWluKCkKewogICBzZXRMb2dMZXZlbChJTkZPLCB0cnVlKTsKICAgTE9HKElORk8pPDwgIlRFU1QgYXNmIiA8PCBzdGQ6OmVuZGw7CiAgIHNldExvZ0xldmVsKElORk8sIGZhbHNlKTsKICAgTE9HKElORk8pIDw8ICJURVNUIGFzZiAyIChzaG91bGQgbm90IGJlIHNob3duKSIgPDwgc3RkOjplbmRsOwogICBzZXRMb2dMZXZlbChJTkZPLCB0cnVlKTsKICAgTE9HKElORk8pIDw8ICJURVNUIGFzZiAzIChTSE9VTEQgYmUgc2hvd24pIiA8PCBzdGQ6OmVuZGw7CgpyZXR1cm4gMDsKfQ==
-
upload with new input
-
result: Success time: 0s memory: 3028 kB returned value: 0
asf
TEST asf TEST asf 3 (SHOULD be shown)
-
result: Success time: 0s memory: 3072 kB returned value: 0
asd
TEST asf TEST asf 3 (SHOULD be shown)
-
result: Success time: 0s memory: 2972 kB returned value: 0
TEST asf TEST asf 3 (SHOULD be shown)


