Add get_first_non_empty and use it into Database to simplify a little bit

This commit is contained in:
louiz’
2016-08-21 01:51:52 +02:00
parent c97e349821
commit 992fa93895
5 changed files with 49 additions and 6 deletions
+1 -1
View File
@@ -96,7 +96,7 @@ if(LITESQL_FOUND)
add_library(database STATIC src/database/database.cpp add_library(database STATIC src/database/database.cpp
${LITESQL_GENERATED_SOURCES}) ${LITESQL_GENERATED_SOURCES})
target_link_libraries(database ${LITESQL_LIBRARIES}) target_link_libraries(database ${LITESQL_LIBRARIES} src_utils)
if(BOTAN_FOUND) if(BOTAN_FOUND)
target_link_libraries(database ${BOTAN_LIBRARIES}) target_link_libraries(database ${BOTAN_LIBRARIES})
endif() endif()
+6 -5
View File
@@ -4,8 +4,8 @@
#include <database/database.hpp> #include <database/database.hpp>
#include <logger/logger.hpp> #include <logger/logger.hpp>
#include <irc/iid.hpp> #include <irc/iid.hpp>
#include <string>
#include <uuid.h> #include <uuid.h>
#include <utils/get_first_non_empty.hpp>
using namespace std::string_literals; using namespace std::string_literals;
@@ -73,10 +73,11 @@ db::IrcChannelOptions Database::get_irc_channel_options_with_server_default(cons
{ {
auto coptions = Database::get_irc_channel_options(owner, server, channel); auto coptions = Database::get_irc_channel_options(owner, server, channel);
auto soptions = Database::get_irc_server_options(owner, server); auto soptions = Database::get_irc_server_options(owner, server);
if (coptions.encodingIn.value().empty())
coptions.encodingIn = soptions.encodingIn; coptions.encodingIn = get_first_non_empty(coptions.encodingIn.value(),
if (coptions.encodingOut.value().empty()) soptions.encodingIn.value());
coptions.encodingOut = soptions.encodingOut; coptions.encodingOut = get_first_non_empty(coptions.encodingOut.value(),
soptions.encodingOut.value());
return coptions; return coptions;
} }
+11
View File
@@ -0,0 +1,11 @@
#include <utils/get_first_non_empty.hpp>
bool is_empty(const std::string& val)
{
return val.empty();
}
bool is_empty(const int& val)
{
return val == 0;
}
+20
View File
@@ -0,0 +1,20 @@
#pragma once
#include <string>
bool is_empty(const std::string& val);
bool is_empty(const int& val);
template <typename T>
T get_first_non_empty(T&& last)
{
return last;
}
template <typename T, typename... Args>
T get_first_non_empty(T&& first, Args&&... args)
{
if (!is_empty(first))
return first;
return get_first_non_empty(std::forward<Args>(args)...);
}
+11
View File
@@ -6,6 +6,9 @@
#include <utils/split.hpp> #include <utils/split.hpp>
#include <utils/xdg.hpp> #include <utils/xdg.hpp>
#include <utils/empty_if_fixed_server.hpp> #include <utils/empty_if_fixed_server.hpp>
#include <utils/get_first_non_empty.hpp>
using namespace std::string_literals;
TEST_CASE("String split") TEST_CASE("String split")
{ {
@@ -100,3 +103,11 @@ TEST_CASE("string cut")
CHECK(res[0] == "rhello, "); CHECK(res[0] == "rhello, ");
CHECK(res[1] == "♥"); CHECK(res[1] == "♥");
} }
TEST_CASE("first non-empty string")
{
CHECK(get_first_non_empty(""s, ""s, "hello"s, "world"s) == "hello"s);
CHECK(get_first_non_empty(""s, ""s, ""s, ""s) == ""s);
CHECK(get_first_non_empty("first"s) == "first"s);
CHECK(get_first_non_empty(0, 1, 2, 3) == 1);
}