Skip to content

Commit

Permalink
support more types
Browse files Browse the repository at this point in the history
  • Loading branch information
qicosmos committed Aug 16, 2023
1 parent 64a7957 commit 0ea2d3a
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
43 changes: 42 additions & 1 deletion include/ylt/easylog/record.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,32 @@ enum { ERROR = 0 };

namespace easylog {

namespace detail {
template <class T>
constexpr inline bool c_array_v = std::is_array_v<std::remove_cvref_t<T>> &&
std::extent_v<std::remove_cvref_t<T>> > 0;

template <typename Type, typename = void>
struct has_data : std::false_type {};

template <typename T>
struct has_data<T, std::void_t<decltype(std::declval<T>().data())>>
: std::true_type {};

template <typename T>
constexpr inline bool has_data_v = has_data<std::remove_cvref_t<T>>::value;

template <typename Type, typename = void>
struct has_str : std::false_type {};

template <typename T>
struct has_str<T, std::void_t<decltype(std::declval<T>().str())>>
: std::true_type {};

template <typename T>
constexpr inline bool has_str_v = has_str<std::remove_cvref_t<T>>::value;
} // namespace detail

enum class Severity {
NONE = 0,
TRACE = 1,
Expand Down Expand Up @@ -138,9 +164,24 @@ class record_t {
auto [ptr, ec] = std::to_chars(buf + 2, buf + 32, (uintptr_t)data, 16);
ss_.append(buf, std::distance(buf, ptr));
}
else {
else if constexpr (std::is_same_v<std::string, U> ||
std::is_same_v<std::string_view, U>) {
ss_.append(data.data(), data.size());
}
else if constexpr (detail::c_array_v<U>) {
ss_.append(data);
}
else if constexpr (detail::has_data_v<U>) {
ss_.append(data.data());
}
else if constexpr (detail::has_str_v<U>) {
ss_.append(data.str());
}
else {
std::stringstream ss;
ss << data;
ss_.append(ss.str());
}

return *this;
}
Expand Down
10 changes: 10 additions & 0 deletions src/easylog/tests/test_easylog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ TEST_CASE("test basic") {
ELOG_INFO << ptr.get();
ELOG_INFO << 42 << " " << 4.5 << 'a' << Severity::DEBUG;
ELOG_INFO << false << ", " << true;
char buf[5] = {"test"};
std::string_view sv = "test";
std::string str = "test";
std::array<char, 5> arr{"test"};
std::stringstream ss;
ss << "test";
ELOG_INFO << arr << ", " << ss;

auto id = std::this_thread::get_id();
ELOG_INFO << buf << ", " << str << ", " << sv << ", " << id;

ELOGV(INFO, "test");
ELOGV(INFO, "it is a long string test %d %s", 2, "ok");
Expand Down

0 comments on commit 0ea2d3a

Please sign in to comment.