summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-03-17 19:45:15 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2022-03-17 19:45:15 +0000
commitd6fd5db66afb2493202192c018cdb153f0a1ca84 (patch)
tree686ff00a1a0699e0fc11dae2deaa427e2f9e7a59
parentenum class BulkUpdates (diff)
downloadlibdbpp-postgresql-d6fd5db66afb2493202192c018cdb153f0a1ca84.tar.bz2
libdbpp-postgresql-d6fd5db66afb2493202192c018cdb153f0a1ca84.tar.xz
libdbpp-postgresql-d6fd5db66afb2493202192c018cdb153f0a1ca84.zip
Lots of pass by value and perfect forwarding optimisations
-rw-r--r--libpqpp/pq-command.cpp13
-rw-r--r--libpqpp/pq-command.h10
2 files changed, 12 insertions, 11 deletions
diff --git a/libpqpp/pq-command.cpp b/libpqpp/pq-command.cpp
index 9e98eb5..dad2ef9 100644
--- a/libpqpp/pq-command.cpp
+++ b/libpqpp/pq-command.cpp
@@ -3,6 +3,7 @@
#include <dbTypes.h>
#include <factory.h>
#include <optional>
+#include <utility>
namespace Glib {
class ustring;
@@ -69,17 +70,17 @@ PQ::Command::paramsAtLeast(unsigned int n)
AdHocFormatter(PQCommandParamFmt, "%?");
template<typename... T>
void
-PQ::Command::paramSet(unsigned int n, const T &... v)
+PQ::Command::paramSet(unsigned int n, T &&... v)
{
paramsAtLeast(n);
- bufs[n] = std::make_unique<std::string>(PQCommandParamFmt::get(v...));
+ bufs[n] = std::make_unique<std::string>(PQCommandParamFmt::get(std::forward<T>(v)...));
lengths[n] = static_cast<int>(bufs[n]->length());
formats[n] = 0;
values[n] = bufs[n]->data();
}
void
-PQ::Command::paramSet(unsigned int n, const std::string_view & b)
+PQ::Command::paramSet(unsigned int n, const std::string_view b)
{
paramsAtLeast(n);
bufs[n] = std::make_unique<std::string>(b);
@@ -139,17 +140,17 @@ PQ::Command::bindParamS(unsigned int n, const Glib::ustring & s)
paramSet(n, std::string_view(s.data(), s.bytes()));
}
void
-PQ::Command::bindParamS(unsigned int n, const std::string_view & s)
+PQ::Command::bindParamS(unsigned int n, const std::string_view s)
{
paramSet(n, s);
}
void
-PQ::Command::bindParamT(unsigned int n, const boost::posix_time::time_duration & v)
+PQ::Command::bindParamT(unsigned int n, const boost::posix_time::time_duration v)
{
paramSet(n, boost::posix_time::to_simple_string(v));
}
void
-PQ::Command::bindParamT(unsigned int n, const boost::posix_time::ptime & v)
+PQ::Command::bindParamT(unsigned int n, const boost::posix_time::ptime v)
{
paramSet(n, boost::posix_time::to_iso_extended_string(v));
}
diff --git a/libpqpp/pq-command.h b/libpqpp/pq-command.h
index d187645..a99bd72 100644
--- a/libpqpp/pq-command.h
+++ b/libpqpp/pq-command.h
@@ -56,10 +56,10 @@ namespace PQ {
void bindParamF(unsigned int, float) override;
void bindParamS(unsigned int, const Glib::ustring &) override;
- void bindParamS(unsigned int, const std::string_view &) override;
+ void bindParamS(unsigned int, const std::string_view) override;
- void bindParamT(unsigned int, const boost::posix_time::time_duration &) override;
- void bindParamT(unsigned int, const boost::posix_time::ptime &) override;
+ void bindParamT(unsigned int, const boost::posix_time::time_duration) override;
+ void bindParamT(unsigned int, const boost::posix_time::ptime) override;
void bindParamBLOB(unsigned int, const DB::Blob &) override;
@@ -72,8 +72,8 @@ namespace PQ {
Connection * const c;
void paramsAtLeast(unsigned int);
- template<typename... T> void paramSet(unsigned int, const T &... t);
- void paramSet(unsigned int, const std::string_view &);
+ template<typename... T> void paramSet(unsigned int, T &&... t);
+ void paramSet(unsigned int, const std::string_view);
std::vector<const char *> values;
std::vector<int> lengths;
std::vector<int> formats;