From: Sangwan Kwon Date: Thu, 30 Jan 2020 05:53:14 +0000 (+0900) Subject: c++17: Refactor with template class type deduction X-Git-Tag: submit/tizen/20200810.073515~89^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2f572ec02d74e3ff2532250500b556a7bcdbb0d6;p=platform%2Fcore%2Fsecurity%2Fvist.git c++17: Refactor with template class type deduction Signed-off-by: Sangwan Kwon --- diff --git a/src/vist/client/virtual-table.cpp b/src/vist/client/virtual-table.cpp index 19df7c6..f845a58 100644 --- a/src/vist/client/virtual-table.cpp +++ b/src/vist/client/virtual-table.cpp @@ -33,32 +33,28 @@ namespace { using namespace vist::tsqb; using namespace vist::schema; -auto time = make_table("time", - make_column("hour", &Time::hour), - make_column("minutes", &Time::minutes), - make_column("seconds", &Time::seconds)); - -auto processes = make_table("processes", - make_column("pid", &Processes::pid), - make_column("name", &Processes::name), - make_column("path", &Processes::path), - make_column("cmdline", &Processes::cmdline), - make_column("uid", &Processes::uid), - make_column("gid", &Processes::gid), - make_column("euid", &Processes::euid), - make_column("egid", &Processes::egid), - make_column("on_disk", &Processes::on_disk), - make_column("parent", &Processes::parent)); - -auto policyInt = make_table("policy", - make_column("name", &Policy::name), - make_column("value", &Policy::value)); - -auto policyStr = make_table("policy", - make_column("name", &Policy::name), - make_column("value", &Policy::value)); - -auto metaDB = make_database("db", time, processes, policyInt, policyStr); +Table time { "time", Column("hour", &Time::hour), + Column("minutes", &Time::minutes), + Column("seconds", &Time::seconds) }; + +Table processes { "processes", Column("pid", &Processes::pid), + Column("name", &Processes::name), + Column("path", &Processes::path), + Column("cmdline", &Processes::cmdline), + Column("uid", &Processes::uid), + Column("gid", &Processes::gid), + Column("euid", &Processes::euid), + Column("egid", &Processes::egid), + Column("on_disk", &Processes::on_disk), + Column("parent", &Processes::parent) }; + +Table policyInt { "policy", Column("name", &Policy::name), + Column("value", &Policy::value) }; + +Table policyStr { "policy", Column("name", &Policy::name), + Column("value", &Policy::value) }; + +Database metaDB { "db", time, processes, policyInt, policyStr }; } // anonymous namespace diff --git a/src/vist/policy/policy-storage.cpp b/src/vist/policy/policy-storage.cpp index ba1ba20..081385e 100644 --- a/src/vist/policy/policy-storage.cpp +++ b/src/vist/policy/policy-storage.cpp @@ -30,17 +30,15 @@ using namespace vist::policy::schema; namespace { -auto adminTable = make_table("ADMIN", make_column("name", &Admin::name), - make_column("activated", &Admin::activated)); +Table adminTable { "ADMIN", Column("name", &Admin::name), + Column("activated", &Admin::activated) }; -auto polManagedTable = make_table("POLICY_MANAGED", - make_column("admin", &PolicyManaged::admin), - make_column("policy", &PolicyManaged::policy), - make_column("value", &PolicyManaged::value)); +Table polManagedTable { "POLICY_MANAGED", Column("admin", &PolicyManaged::admin), + Column("policy", &PolicyManaged::policy), + Column("value", &PolicyManaged::value) }; -auto polDefinitionTable = make_table("POLICY_DEFINITION", - make_column("name", &PolicyDefinition::name), - make_column("ivalue", &PolicyDefinition::ivalue)); +Table polDefinitionTable { "POLICY_DEFINITION", Column("name", &PolicyDefinition::name), + Column("ivalue", &PolicyDefinition::ivalue) }; const std::string SCRIPT_BASE = SCRIPT_INSTALL_DIR; const std::string SCRIPT_CREATE_SCHEMA = "create-schema"; diff --git a/src/vist/query-builder/column.hpp b/src/vist/query-builder/column.hpp index aeabdf1..a89482f 100644 --- a/src/vist/query-builder/column.hpp +++ b/src/vist/query-builder/column.hpp @@ -36,12 +36,6 @@ struct Column final { Type type; }; -template -Column make_column(const std::string& name, F O::*field) -{ - return {name, field}; -} - template struct Distinct { Type value; @@ -50,7 +44,7 @@ struct Distinct { template auto distinct(Args&&... args) -> decltype(Distinct>()) { - return {std::make_tuple(std::forward(args)...)}; + return {std::tuple(args...)}; } } // namespace tsqb diff --git a/src/vist/query-builder/database.hpp b/src/vist/query-builder/database.hpp index a614130..57dbac6 100644 --- a/src/vist/query-builder/database.hpp +++ b/src/vist/query-builder/database.hpp @@ -66,18 +66,9 @@ public: // CRTP(Curiously Recurring Template Pattern) for CRUD std::vector cache; private: - template - friend Database make_database(const std::string& name, Ts&& ...tables); - std::tuple tables; }; -template -Database make_database(const std::string& name, Tables&& ...tables) -{ - return Database(name, std::forward(tables)...); -} - template template Database& Database::join(condition::Join type) @@ -128,8 +119,8 @@ std::vector Database::getTableNames(Cs&& ...columns) con std::set names; auto closure = [this, &names](const auto& type) { - auto column = make_column("anonymous", type); - using TableType = typename decltype(column)::Table; + Column anonymous("anonymous", type); + using TableType = typename decltype(anonymous)::Table; auto name = this->getTableName(TableType()); if (!name.empty()) names.emplace(name); diff --git a/src/vist/query-builder/table.hpp b/src/vist/query-builder/table.hpp index ed2e27f..c50e05c 100644 --- a/src/vist/query-builder/table.hpp +++ b/src/vist/query-builder/table.hpp @@ -64,18 +64,9 @@ public: // CRTP(Curiously Recurring Template Pattern) for CRUD std::vector cache; private: - template - friend Table make_table(const std::string& name, Cs&& ...columns); - std::tuple columns; }; -template -Table make_table(const std::string& name, Columns&& ...cs) -{ - return Table(name, std::forward(cs)...); -} - template std::string Table::getName() const noexcept { diff --git a/src/vist/query-builder/tests/query-builder.cpp b/src/vist/query-builder/tests/query-builder.cpp index ae6f75e..65ae466 100644 --- a/src/vist/query-builder/tests/query-builder.cpp +++ b/src/vist/query-builder/tests/query-builder.cpp @@ -42,25 +42,23 @@ struct PolicyDefinition { int ivalue; }; -auto admin = make_table("admin", make_column("id", &Admin::id), - make_column("pkg", &Admin::pkg), - make_column("uid", &Admin::uid), - make_column("key", &Admin::key), - make_column("removable", &Admin::removable)); - -auto managedPolicy = make_table("managed_policy", - make_column("id", &ManagedPolicy::id), - make_column("aid", &ManagedPolicy::aid), - make_column("pid", &ManagedPolicy::pid), - make_column("value", &ManagedPolicy::value)); - -auto policyDefinition = make_table("policy_definition", - make_column("id", &PolicyDefinition::id), - make_column("scope", &PolicyDefinition::scope), - make_column("name", &PolicyDefinition::name), - make_column("ivalue", &PolicyDefinition::ivalue)); - -auto db = make_database("dpm", admin, managedPolicy, policyDefinition); +Table admin { "admin", Column("id", &Admin::id), + Column("pkg", &Admin::pkg), + Column("uid", &Admin::uid), + Column("key", &Admin::key), + Column("removable", &Admin::removable) }; + +Table managedPolicy { "managed_policy", Column("id", &ManagedPolicy::id), + Column("aid", &ManagedPolicy::aid), + Column("pid", &ManagedPolicy::pid), + Column("value", &ManagedPolicy::value) }; + +Table policyDefinition { "policy_definition", Column("id", &PolicyDefinition::id), + Column("scope", &PolicyDefinition::scope), + Column("name", &PolicyDefinition::name), + Column("ivalue", &PolicyDefinition::ivalue) }; + +Database db { "dpm", admin, managedPolicy, policyDefinition }; class TsqbTests : public testing::Test {};