kea-custom-hooks
FeM custom hooks libraries for Kea DHCP
HiredisMultiAdapter.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <vector>
5
6#include "HiredisAdapter.hpp"
7
8#ifdef WITH_GTEST_FRIEND_TEST
9#include <gtest/gtest.h>
10#endif
11
21{
22public:
24 using adapter_refw_t = std::reference_wrapper<HiredisAdapter>;
25
27 template <typename... U>
29 {
30 adapters.push_back(static_cast<adapter_ptr_t>(&a));
31 }
32 HiredisMultiAdapter(const std::vector<adapter_refw_t>& given_adapters)
33 {
34 for (auto& a : given_adapters) {
35 adapters.push_back(&a.get());
36 }
37 }
38 HiredisMultiAdapter(std::vector<HiredisAdapter>& given_adapters)
39 {
40 for (HiredisAdapter& a : given_adapters) {
41 adapters.push_back(&a);
42 }
43 }
44
47
48 void connect() override;
49 void disconnect() override;
50
51 bool is_connected() const noexcept override;
52
53 set_reply_t set(const std::string& key, const std::string& value,
54 const timeout_t expire = 0) override;
55 sadd_reply_t sadd(const std::string& key, const std::string& value,
56 const timeout_t expire = 0) override;
57
58 void expire(const std::string& key, timeout_t expire) override;
59
60 get_reply_t get(const std::string& key) override;
61 smembers_reply_t smembers(const std::string& key) override;
62
63 bool last_expire_has_failed() const noexcept override;
64
65 inline size_t adapter_amount() const noexcept
66 {
67 return adapters.size();
68 }
69
70private:
71 std::vector<adapter_ptr_t> adapters;
72
73#ifdef WITH_GTEST_FRIEND_TEST
74 FRIEND_TEST(HiredisMultiAdapter, inserts_all_given_adapters_on_template_constructor);
75 FRIEND_TEST(HiredisMultiAdapter, inserts_all_given_adapters_on_vector_constructor);
76#endif
77};
A wrapper for the hiredis C interface with multi-client support.
set_reply_t get_reply_t
set_reply_t smembers_reply_t
set_reply_t sadd_reply_t
std::unique_ptr< redisReply, std::function< void(redisReply *)> > set_reply_t
Wrapper around HiredisAdapter for multi-client support.
std::reference_wrapper< HiredisAdapter > adapter_refw_t
set_reply_t set(const std::string &key, const std::string &value, const timeout_t expire=0) override
HiredisMultiAdapter(const HiredisMultiAdapter &)=delete
void expire(const std::string &key, timeout_t expire) override
HiredisMultiAdapter(const std::vector< adapter_refw_t > &given_adapters)
bool is_connected() const noexcept override
HiredisMultiAdapter(std::vector< HiredisAdapter > &given_adapters)
HiredisMultiAdapter()=default
sadd_reply_t sadd(const std::string &key, const std::string &value, const timeout_t expire=0) override
HiredisMultiAdapter(HiredisAdapter &a, U &... others)
void disconnect() override
smembers_reply_t smembers(const std::string &key) override
size_t adapter_amount() const noexcept
get_reply_t get(const std::string &key) override
void connect() override
Connect to the Redis server.
~HiredisMultiAdapter()=default
bool last_expire_has_failed() const noexcept override