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
This commit is contained in:
Felipe Magno de Almeida 2014-04-09 19:12:46 +09:00 committed by Carsten Haitzler (Rasterman)
parent 6436618c92
commit 6bb01b0d18
2 changed files with 49 additions and 51 deletions

View File

@ -79,47 +79,45 @@ inline void _log(std::stringstream const& stream, int domain, ::Eina_Log_Level l
, "%s", stream.str().c_str()); , "%s", stream.str().c_str());
} }
#define EINA_CXX_DOM_LOG(DOMAIN, LEVEL, EXPR) \ #define EINA_CXX_DOM_LOG(DOMAIN, LEVEL) \
if( ::eina_log_domain_level_check((DOMAIN), LEVEL)) \ if( bool run = ::eina_log_domain_level_check((DOMAIN), LEVEL) ) \
{ \ for(std::stringstream stream; run ; \
std::stringstream stream; \ ::efl::eina::_log(std::move(stream), (DOMAIN), LEVEL \
stream << EXPR; \ , __FILE__, __FUNCTION__, __LINE__), run = false) \
::efl::eina::_log(std::move(stream), (DOMAIN), LEVEL \ stream
, __FILE__, __FUNCTION__, __LINE__); \
}
#define EINA_CXX_DOM_LOG_CRIT(DOMAIN, EXPR) \ #define EINA_CXX_DOM_LOG_CRIT(DOMAIN) \
EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_CRITICAL, EXPR) EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_CRITICAL)
#define EINA_CXX_DOM_LOG_ERR(DOMAIN, EXPR) \ #define EINA_CXX_DOM_LOG_ERR(DOMAIN) \
EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_ERR, EXPR) EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_ERR)
#define EINA_CXX_DOM_LOG_INFO(DOMAIN, EXPR) \ #define EINA_CXX_DOM_LOG_INFO(DOMAIN) \
EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_INFO, EXPR) EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_INFO)
#define EINA_CXX_DOM_LOG_DBG(DOMAIN, EXPR) \ #define EINA_CXX_DOM_LOG_DBG(DOMAIN) \
EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_DBG, EXPR) EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_DBG)
#define EINA_CXX_DOM_LOG_WARN(DOMAIN, EXPR) \ #define EINA_CXX_DOM_LOG_WARN(DOMAIN) \
EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_WARN, EXPR) EINA_CXX_DOM_LOG(DOMAIN.domain_raw(), ::EINA_LOG_LEVEL_WARN)
#define EINA_CXX_LOG(LEVEL, EXPR) \ #define EINA_CXX_LOG(LEVEL) \
EINA_CXX_DOM_LOG(EINA_LOG_DOMAIN_DEFAULT, LEVEL, EXPR) EINA_CXX_DOM_LOG(EINA_LOG_DOMAIN_DEFAULT, LEVEL)
#define EINA_CXX_LOG_CRIT(EXPR) \ #define EINA_CXX_LOG_CRIT() \
EINA_CXX_LOG(EINA_LOG_LEVEL_CRITICAL, EXPR) EINA_CXX_LOG(EINA_LOG_LEVEL_CRITICAL)
#define EINA_CXX_LOG_ERR(EXPR) \ #define EINA_CXX_LOG_ERR() \
EINA_CXX_LOG(EINA_LOG_LEVEL_ERR, EXPR) EINA_CXX_LOG(EINA_LOG_LEVEL_ERR)
#define EINA_CXX_LOG_INFO(EXPR) \ #define EINA_CXX_LOG_INFO() \
EINA_CXX_LOG(EINA_LOG_LEVEL_INFO, EXPR) EINA_CXX_LOG(EINA_LOG_LEVEL_INFO)
#define EINA_CXX_LOG_DBG(EXPR) \ #define EINA_CXX_LOG_DBG() \
EINA_CXX_LOG(EINA_LOG_LEVEL_DBG, EXPR) EINA_CXX_LOG(EINA_LOG_LEVEL_DBG)
#define EINA_CXX_LOG_WARN(EXPR) \ #define EINA_CXX_LOG_WARN() \
EINA_CXX_LOG(EINA_LOG_LEVEL_WARN, EXPR) EINA_CXX_LOG(EINA_LOG_LEVEL_WARN)
} } } }

View File

@ -40,7 +40,7 @@ START_TEST(eina_cxx_expensive_log)
domain.set_level(EINA_LOG_LEVEL_CRITICAL); 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); ck_assert(!expensive_called);
} }
END_TEST END_TEST
@ -51,17 +51,17 @@ START_TEST(eina_cxx_domain_log)
efl::eina::log_domain domain("error_domain"); efl::eina::log_domain domain("error_domain");
EINA_CXX_DOM_LOG_CRIT(domain, "foo 0x" << std::hex << 10); EINA_CXX_DOM_LOG_CRIT(domain) << "foo 0x" << std::hex << 10;
EINA_CXX_DOM_LOG_ERR(domain, "foo " << 5); EINA_CXX_DOM_LOG_ERR(domain) << "foo " << 5;
EINA_CXX_DOM_LOG_INFO(domain, "foo " << 5); EINA_CXX_DOM_LOG_INFO(domain) << "foo " << 5;
EINA_CXX_DOM_LOG_DBG(domain, "foo " << 5); EINA_CXX_DOM_LOG_DBG(domain) << "foo " << 5;
EINA_CXX_DOM_LOG_WARN(domain, "foo " << 5); EINA_CXX_DOM_LOG_WARN(domain) << "foo " << 5;
EINA_CXX_LOG_CRIT("foo " << 5); EINA_CXX_LOG_CRIT() << "foo " << 5;
EINA_CXX_LOG_ERR("foo " << 5); EINA_CXX_LOG_ERR() << "foo " << 5;
EINA_CXX_LOG_INFO("foo " << 5); EINA_CXX_LOG_INFO() << "foo " << 5;
EINA_CXX_LOG_DBG("foo " << 5); EINA_CXX_LOG_DBG() << "foo " << 5;
EINA_CXX_LOG_WARN("foo " << 5); EINA_CXX_LOG_WARN() << "foo " << 5;
} }
END_TEST END_TEST
@ -69,11 +69,11 @@ START_TEST(eina_cxx_default_domain_log)
{ {
efl::eina::eina_init init; efl::eina::eina_init init;
EINA_CXX_DOM_LOG_CRIT(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_ERR(efl::eina::default_domain) << "foo " << 5;
EINA_CXX_DOM_LOG_INFO(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_DBG(efl::eina::default_domain) << "foo " << 5;
EINA_CXX_DOM_LOG_WARN(efl::eina::default_domain, "foo " << 5); EINA_CXX_DOM_LOG_WARN(efl::eina::default_domain) << "foo " << 5;
} }
END_TEST END_TEST
@ -83,11 +83,11 @@ START_TEST(eina_cxx_global_domain_log)
efl::eina::log_domain domain("domain"); efl::eina::log_domain domain("domain");
EINA_CXX_DOM_LOG_CRIT(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_ERR(efl::eina::global_domain) << "foo " << 5;
EINA_CXX_DOM_LOG_INFO(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_DBG(efl::eina::global_domain) << "foo " << 5;
EINA_CXX_DOM_LOG_WARN(efl::eina::global_domain, "foo " << 5); EINA_CXX_DOM_LOG_WARN(efl::eina::global_domain) << "foo " << 5;
} }
END_TEST END_TEST