From 5956203258880a25d1705734e2bf57eb7a60a90c Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 5 Jun 2021 11:09:13 +0100 Subject: Wrap DbValue in a class so we can add helpers to it --- lib/dbTypes.h | 22 +++++++++++++++++++++- lib/input/mysqlBindings.h | 2 +- lib/output/dumpToConsole.cpp | 6 +++--- lib/output/pq/pqBindings.h | 2 +- 4 files changed, 26 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/dbTypes.h b/lib/dbTypes.h index b35b036..068d642 100644 --- a/lib/dbTypes.h +++ b/lib/dbTypes.h @@ -33,8 +33,28 @@ namespace MyGrate { }; using Blob = std::span; - using DbValue = std::variant; + + class DbValue : public DbValueV { + public: + using DbValueV::DbValueV; + using DbValueV::operator=; + + template + inline auto + visit(V && v) const + { + return std::visit(std::forward(v), static_cast(*this)); + } + + template + inline const auto & + get() const + { + return std::get(static_cast(*this)); + } + }; } #endif diff --git a/lib/input/mysqlBindings.h b/lib/input/mysqlBindings.h index dcb3ebf..569aeb5 100644 --- a/lib/input/mysqlBindings.h +++ b/lib/input/mysqlBindings.h @@ -23,7 +23,7 @@ namespace MyGrate::Input { binds.reserve(vs.size()); data.reserve(vs.size()); for (const auto & v : vs) { - std::visit(*this, v); + v.visit(*this); } } template diff --git a/lib/output/dumpToConsole.cpp b/lib/output/dumpToConsole.cpp index 1085bb5..96850f3 100644 --- a/lib/output/dumpToConsole.cpp +++ b/lib/output/dumpToConsole.cpp @@ -71,7 +71,7 @@ namespace MyGrate::Output { { Row r {row, tableMaps.at(row.table_id)->event.table_map}; std::for_each(r.begin(), r.end(), [](auto && fv) { - std::visit(write {}, fv); + fv.visit(write {}); }); } @@ -80,10 +80,10 @@ namespace MyGrate::Output { { RowPair rp {row, tableMaps.at(row.table_id)->event.table_map}; std::for_each(rp.first.begin(), rp.first.end(), [](auto && fv) { - std::visit(write {}, fv); + fv.visit(write {}); }); std::for_each(rp.second.begin(), rp.second.end(), [](auto && fv) { - std::visit(write {}, fv); + fv.visit(write {}); }); } diff --git a/lib/output/pq/pqBindings.h b/lib/output/pq/pqBindings.h index ef0df84..c63b286 100644 --- a/lib/output/pq/pqBindings.h +++ b/lib/output/pq/pqBindings.h @@ -16,7 +16,7 @@ namespace MyGrate::Output::Pq { values.reserve(vs.size()); lengths.reserve(vs.size()); for (const auto & v : vs) { - std::visit(*this, v); + v.visit(*this); } } template -- cgit v1.2.3