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:
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user