2
0
mirror of https://github.com/boostorg/redis.git synced 2026-02-21 03:12:14 +00:00

Adds variadics to compose commands without range.

This commit is contained in:
Marcelo Zimbres
2021-10-24 20:30:35 +02:00
parent 5f01354cec
commit 60c0d7dac7
2 changed files with 22 additions and 31 deletions

View File

@@ -95,6 +95,12 @@ void assemble(std::string& to, std::string_view cmd, Range1 const& range1, Range
detail::assemble(to, cmd, cbegin(range1), cend(range1), cbegin(range2), cend(range2));
}
template <class Tp, class... Us>
constexpr decltype(auto) front(Tp&& t, Us&&...) noexcept
{
return std::forward<Tp>(t);
}
} // detail
} // resp3
} // aedis

View File

@@ -54,41 +54,26 @@ public:
elements = {};
}
void push(command c)
template <class... Ts>
void push(command cmd, Ts const&... args)
{
detail::add_header(payload, 1);
detail::add_bulk(payload, as_string(c));
elements.emplace(c, std::string{});
}
// TODO: Calculate the size of any pair or tuple like type to
// use in the header size.
template <class T>
void push(command c, T const& p1)
{
detail::add_header(payload, 2);
detail::add_bulk(payload, as_string(c));
detail::add_bulk(payload, p1);
elements.emplace(c, std::string{p1});
}
auto constexpr pack_size = sizeof...(Ts);
detail::add_header(payload, 1 + pack_size);
template <class T1, class T2>
void push(command c, T1 const& p1, T2 const& p2)
{
detail::add_header(payload, 3);
detail::add_bulk(payload, as_string(c));
detail::add_bulk(payload, p1);
detail::add_bulk(payload, p2);
elements.emplace(c, std::string{p1});
}
// TODO: as_string is not a good idea, better to_string.
detail::add_bulk(payload, as_string(cmd));
(detail::add_bulk(payload, args), ...);
template <class T1, class T2, class T3>
void push(command c, T1 const& p1, T2 const& p2, T3 const& p3)
{
detail::add_header(payload, 4);
detail::add_bulk(payload, as_string(c));
detail::add_bulk(payload, p1);
detail::add_bulk(payload, p2);
detail::add_bulk(payload, p3);
elements.emplace(c, std::string{p1});
// TODO: Do not assume the front is convertible to a string.
// TODO: Is it correct to use the front as the key.
std::string_view key;
if constexpr (pack_size != 0)
key = detail::front(args...);
elements.emplace(cmd, std::string{key});
}
template <class ForwardIterator>