#ifndef MYGRATE_OUTPUT_PQ_PQBINDINGS #define MYGRATE_OUTPUT_PQ_PQBINDINGS #include #include #include #include #include namespace MyGrate::Output::Pq { struct Bindings { // NOLINTNEXTLINE(hicpp-explicit-conversions) explicit Bindings(const std::initializer_list & vs) { bufs.reserve(vs.size()); values.reserve(vs.size()); lengths.reserve(vs.size()); for (const auto & v : vs) { v.visit(*this); } } template void operator()(const T & v) { bufs.emplace_back(std::to_string(v)); const auto & vw {bufs.back()}; values.emplace_back(vw.data()); lengths.emplace_back(vw.length()); } template void operator()(const T & v) { values.emplace_back(v.data()); lengths.emplace_back(v.size()); } template void operator()(const T &) { throw std::logic_error("Not implemented"); } void operator()(const std::nullptr_t &) { values.emplace_back(nullptr); lengths.emplace_back(0); } std::vector bufs; std::vector values; std::vector lengths; }; } #endif