@@ -1018,36 +1018,19 @@ namespace zmq
1018
1018
class poller_t
1019
1019
{
1020
1020
public:
1021
- poller_t () : poller_ptr (zmq_poller_new ())
1021
+ poller_t ()
1022
1022
{
1023
1023
if (!poller_ptr)
1024
1024
throw error_t ();
1025
1025
}
1026
1026
1027
- ~poller_t ()
1028
- {
1029
- if (poller_ptr)
1030
- {
1031
- int rc = zmq_poller_destroy (&poller_ptr);
1032
- assert (rc == 0 );
1033
- }
1034
- }
1027
+ ~poller_t () = default ;
1035
1028
1036
1029
poller_t (const poller_t &) = delete ;
1037
1030
poller_t &operator =(const poller_t &) = delete ;
1038
- poller_t (poller_t && src)
1039
- : poller_ptr(src.poller_ptr)
1040
- , poller_events(std::move (src.poller_events))
1041
- {
1042
- src.poller_ptr = NULL ;
1043
- }
1044
- poller_t &operator =(poller_t && src)
1045
- {
1046
- poller_ptr = src.poller_ptr ;
1047
- poller_events = std::move (src.poller_events );
1048
- src.poller_ptr = NULL ;
1049
- return *this ;
1050
- }
1031
+
1032
+ poller_t (poller_t && src) = default ;
1033
+ poller_t &operator =(poller_t && src) = default ;
1051
1034
1052
1035
using handler_t = std::function<void (short )>;
1053
1036
@@ -1056,7 +1039,7 @@ namespace zmq
1056
1039
auto it = std::end (handlers);
1057
1040
auto inserted = false ;
1058
1041
std::tie (it, inserted) = handlers.emplace (socket.ptr , std::make_shared<handler_t > (std::move (handler)));
1059
- if (0 == zmq_poller_add (poller_ptr, socket.ptr , inserted && *(it->second ) ? it->second .get () : nullptr , events)) {
1042
+ if (0 == zmq_poller_add (poller_ptr. get () , socket.ptr , inserted && *(it->second ) ? it->second .get () : nullptr , events)) {
1060
1043
need_rebuild = true ;
1061
1044
return ;
1062
1045
}
@@ -1068,7 +1051,7 @@ namespace zmq
1068
1051
1069
1052
void remove (zmq::socket_t &socket)
1070
1053
{
1071
- if (0 == zmq_poller_remove (poller_ptr, socket.ptr )) {
1054
+ if (0 == zmq_poller_remove (poller_ptr. get () , socket.ptr )) {
1072
1055
handlers.erase (socket.ptr );
1073
1056
need_rebuild = true ;
1074
1057
return ;
@@ -1078,7 +1061,7 @@ namespace zmq
1078
1061
1079
1062
void modify (zmq::socket_t &socket, short events)
1080
1063
{
1081
- if (0 != zmq_poller_modify (poller_ptr, socket.ptr , events))
1064
+ if (0 != zmq_poller_modify (poller_ptr. get () , socket.ptr , events))
1082
1065
throw error_t ();
1083
1066
}
1084
1067
@@ -1095,7 +1078,7 @@ namespace zmq
1095
1078
}
1096
1079
need_rebuild = false ;
1097
1080
}
1098
- int rc = zmq_poller_wait_all (poller_ptr, poller_events.data (),
1081
+ int rc = zmq_poller_wait_all (poller_ptr. get () , poller_events.data (),
1099
1082
static_cast <int > (poller_events.size ()),
1100
1083
static_cast <long >(timeout.count ()));
1101
1084
if (rc > 0 ) {
@@ -1117,7 +1100,14 @@ namespace zmq
1117
1100
}
1118
1101
1119
1102
private:
1120
- void *poller_ptr {nullptr };
1103
+ std::unique_ptr<void , std::function<void (void *)>> poller_ptr
1104
+ {
1105
+ zmq_poller_new (),
1106
+ [](void *ptr) {
1107
+ int rc = zmq_poller_destroy (&ptr);
1108
+ ZMQ_ASSERT (rc == 0 );
1109
+ }
1110
+ };
1121
1111
bool need_rebuild {false };
1122
1112
std::unordered_map<void *, std::shared_ptr<handler_t >> handlers {};
1123
1113
std::vector<zmq_poller_event_t > poller_events {};
0 commit comments