From 6bb01b0d18607ba6b7334a8f0fff6d16946364f1 Mon Sep 17 00:00:00 2001 From: Felipe Magno de Almeida Date: Wed, 9 Apr 2014 19:12:46 +0900 Subject: [PATCH] eina-cxx: Modified eina C++ log use syntax Summary: Modified syntax for eina C++ log to imitate the macro call as returning a stream. So, instead of: EINA_CXX_DOM_LOG_CRIT(efl::eina::global_domain, "foo " << 5); It is now used as: EINA_CXX_DOM_LOG_CRIT(efl::eina::global_domain) << "foo " << 5; Which more closely resambles using IOStreams in C++. @feature Reviewers: cedric, barbieri, smohanty Reviewed By: barbieri CC: cedric Differential Revision: https://phab.enlightenment.org/D623 --- src/bindings/eina_cxx/eina_log.hh | 58 ++++++++++++------------- src/tests/eina_cxx/eina_cxx_test_log.cc | 42 +++++++++--------- 2 files changed, 49 insertions(+), 51 deletions(-) diff --git a/src/bindings/eina_cxx/eina_log.hh b/src/bindings/eina_cxx/eina_log.hh index d6b8f294ad..fe4e3bf832 100644 --- a/src/bindings/eina_cxx/eina_log.hh +++ b/src/bindings/eina_cxx/eina_log.hh @@ -79,47 +79,45 @@ inline void _log(std::stringstream const& stream, int domain, ::Eina_Log_Level l , "%s", stream.str().c_str()); } -#define EINA_CXX_DOM_LOG(DOMAIN, LEVEL, EXPR) \ - if( ::eina_log_domain_level_check((DOMAIN), LEVEL)) \ - { \ - std::stringstream stream; \ - stream << EXPR; \ - ::efl::eina::_log(std::move(stream), (DOMAIN), LEVEL \ - , __FILE__, __FUNCTION__, __LINE__); \ - } +#define EINA_CXX_DOM_LOG(DOMAIN, LEVEL) \ + if( bool run = ::eina_log_domain_level_check((DOMAIN), LEVEL) ) \ + for(std::stringstream stream; run ; \ + ::efl::eina::_log(std::move(stream), (DOMAIN), LEVEL \ + , __FILE__, __FUNCTION__, __LINE__), run = false) \ + stream -#define EINA_CXX_DOM_LOG_CRIT(DOMAIN, EXPR) \ - EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_CRITICAL, EXPR) +#define EINA_CXX_DOM_LOG_CRIT(DOMAIN) \ + EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_CRITICAL) -#define EINA_CXX_DOM_LOG_ERR(DOMAIN, EXPR) \ - EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_ERR, EXPR) +#define EINA_CXX_DOM_LOG_ERR(DOMAIN) \ + EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_ERR) -#define EINA_CXX_DOM_LOG_INFO(DOMAIN, EXPR) \ - EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_INFO, EXPR) +#define EINA_CXX_DOM_LOG_INFO(DOMAIN) \ + EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_INFO) -#define EINA_CXX_DOM_LOG_DBG(DOMAIN, EXPR) \ - EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_DBG, EXPR) +#define EINA_CXX_DOM_LOG_DBG(DOMAIN) \ + EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_DBG) -#define EINA_CXX_DOM_LOG_WARN(DOMAIN, EXPR) \ - EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_WARN, EXPR) +#define EINA_CXX_DOM_LOG_WARN(DOMAIN) \ + EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_WARN) -#define EINA_CXX_LOG(LEVEL, EXPR) \ - EINA_CXX_DOM_LOG(EINA_LOG_DOMAIN_DEFAULT, LEVEL, EXPR) +#define EINA_CXX_LOG(LEVEL) \ + EINA_CXX_DOM_LOG(EINA_LOG_DOMAIN_DEFAULT, LEVEL) -#define EINA_CXX_LOG_CRIT(EXPR) \ - EINA_CXX_LOG(EINA_LOG_LEVEL_CRITICAL, EXPR) +#define EINA_CXX_LOG_CRIT() \ + EINA_CXX_LOG(EINA_LOG_LEVEL_CRITICAL) -#define EINA_CXX_LOG_ERR(EXPR) \ - EINA_CXX_LOG(EINA_LOG_LEVEL_ERR, EXPR) +#define EINA_CXX_LOG_ERR() \ + EINA_CXX_LOG(EINA_LOG_LEVEL_ERR) -#define EINA_CXX_LOG_INFO(EXPR) \ - EINA_CXX_LOG(EINA_LOG_LEVEL_INFO, EXPR) +#define EINA_CXX_LOG_INFO() \ + EINA_CXX_LOG(EINA_LOG_LEVEL_INFO) -#define EINA_CXX_LOG_DBG(EXPR) \ - EINA_CXX_LOG(EINA_LOG_LEVEL_DBG, EXPR) +#define EINA_CXX_LOG_DBG() \ + EINA_CXX_LOG(EINA_LOG_LEVEL_DBG) -#define EINA_CXX_LOG_WARN(EXPR) \ - EINA_CXX_LOG(EINA_LOG_LEVEL_WARN, EXPR) +#define EINA_CXX_LOG_WARN() \ + EINA_CXX_LOG(EINA_LOG_LEVEL_WARN) } } diff --git a/src/tests/eina_cxx/eina_cxx_test_log.cc b/src/tests/eina_cxx/eina_cxx_test_log.cc index 52c8ccdc61..4d32d41f2c 100644 --- a/src/tests/eina_cxx/eina_cxx_test_log.cc +++ b/src/tests/eina_cxx/eina_cxx_test_log.cc @@ -40,7 +40,7 @@ START_TEST(eina_cxx_expensive_log) domain.set_level(EINA_LOG_LEVEL_CRITICAL); - EINA_CXX_DOM_LOG_ERR(domain, "foo " << ::expensive_call()); + EINA_CXX_DOM_LOG_ERR(domain) << "foo " << ::expensive_call(); ck_assert(!expensive_called); } END_TEST @@ -51,17 +51,17 @@ START_TEST(eina_cxx_domain_log) efl::eina::log_domain domain("error_domain"); - EINA_CXX_DOM_LOG_CRIT(domain, "foo 0x" << std::hex << 10); - EINA_CXX_DOM_LOG_ERR(domain, "foo " << 5); - EINA_CXX_DOM_LOG_INFO(domain, "foo " << 5); - EINA_CXX_DOM_LOG_DBG(domain, "foo " << 5); - EINA_CXX_DOM_LOG_WARN(domain, "foo " << 5); + EINA_CXX_DOM_LOG_CRIT(domain) << "foo 0x" << std::hex << 10; + EINA_CXX_DOM_LOG_ERR(domain) << "foo " << 5; + EINA_CXX_DOM_LOG_INFO(domain) << "foo " << 5; + EINA_CXX_DOM_LOG_DBG(domain) << "foo " << 5; + EINA_CXX_DOM_LOG_WARN(domain) << "foo " << 5; - EINA_CXX_LOG_CRIT("foo " << 5); - EINA_CXX_LOG_ERR("foo " << 5); - EINA_CXX_LOG_INFO("foo " << 5); - EINA_CXX_LOG_DBG("foo " << 5); - EINA_CXX_LOG_WARN("foo " << 5); + EINA_CXX_LOG_CRIT() << "foo " << 5; + EINA_CXX_LOG_ERR() << "foo " << 5; + EINA_CXX_LOG_INFO() << "foo " << 5; + EINA_CXX_LOG_DBG() << "foo " << 5; + EINA_CXX_LOG_WARN() << "foo " << 5; } END_TEST @@ -69,11 +69,11 @@ START_TEST(eina_cxx_default_domain_log) { efl::eina::eina_init init; - EINA_CXX_DOM_LOG_CRIT(efl::eina::default_domain, "foo " << 5); - EINA_CXX_DOM_LOG_ERR(efl::eina::default_domain, "foo " << 5); - EINA_CXX_DOM_LOG_INFO(efl::eina::default_domain, "foo " << 5); - EINA_CXX_DOM_LOG_DBG(efl::eina::default_domain, "foo " << 5); - EINA_CXX_DOM_LOG_WARN(efl::eina::default_domain, "foo " << 5); + EINA_CXX_DOM_LOG_CRIT(efl::eina::default_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_ERR(efl::eina::default_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_INFO(efl::eina::default_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_DBG(efl::eina::default_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_WARN(efl::eina::default_domain) << "foo " << 5; } END_TEST @@ -83,11 +83,11 @@ START_TEST(eina_cxx_global_domain_log) efl::eina::log_domain domain("domain"); - EINA_CXX_DOM_LOG_CRIT(efl::eina::global_domain, "foo " << 5); - EINA_CXX_DOM_LOG_ERR(efl::eina::global_domain, "foo " << 5); - EINA_CXX_DOM_LOG_INFO(efl::eina::global_domain, "foo " << 5); - EINA_CXX_DOM_LOG_DBG(efl::eina::global_domain, "foo " << 5); - EINA_CXX_DOM_LOG_WARN(efl::eina::global_domain, "foo " << 5); + EINA_CXX_DOM_LOG_CRIT(efl::eina::global_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_ERR(efl::eina::global_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_INFO(efl::eina::global_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_DBG(efl::eina::global_domain) << "foo " << 5; + EINA_CXX_DOM_LOG_WARN(efl::eina::global_domain) << "foo " << 5; } END_TEST