Skip to content

Commit 52a6f59

Browse files
Replace overly clever code.
1 parent 270e9cf commit 52a6f59

File tree

1 file changed

+43
-49
lines changed

1 file changed

+43
-49
lines changed

src/observer.cc

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,73 +10,67 @@
1010
#include <array>
1111

1212
namespace zmq {
13-
template <typename T, typename... N>
14-
auto constexpr make_array(N&&... args) -> std::array<T, sizeof...(args)> {
15-
return {{std::forward<N>(args)...}};
16-
}
17-
18-
/* Events must be in order corresponding to the value of the #define value. */
19-
static auto events = make_array<const char*>(
20-
/* ZMQ_EVENT_CONNECTED */
21-
"connect",
13+
static inline const char* EventName(uint32_t val) {
14+
switch (val) {
15+
case ZMQ_EVENT_CONNECTED:
16+
return "connect";
2217

23-
/* EVENT_CONNECT_DELAYED */
24-
"connect:delay",
18+
case ZMQ_EVENT_CONNECT_DELAYED:
19+
return "connect:delay";
2520

26-
/* EVENT_CONNECT_RETRIED */
27-
"connect:retry",
21+
case ZMQ_EVENT_CONNECT_RETRIED:
22+
return "connect:retry";
2823

29-
/* EVENT_LISTENING */
30-
"bind",
24+
case ZMQ_EVENT_LISTENING:
25+
return "bind";
3126

32-
/* EVENT_BIND_FAILED */
33-
"bind:error",
27+
case ZMQ_EVENT_BIND_FAILED:
28+
return "bind:error";
3429

35-
/* EVENT_ACCEPTED */
36-
"accept",
30+
case ZMQ_EVENT_ACCEPTED:
31+
return "accept";
3732

38-
/* EVENT_ACCEPT_FAILED */
39-
"accept:error",
33+
case ZMQ_EVENT_ACCEPT_FAILED:
34+
return "accept:error";
4035

41-
/* EVENT_CLOSED */
42-
"close",
36+
case ZMQ_EVENT_CLOSED:
37+
return "close";
4338

44-
/* EVENT_CLOSE_FAILED */
45-
"close:error",
39+
case ZMQ_EVENT_CLOSE_FAILED:
40+
return "close:error";
4641

47-
/* EVENT_DISCONNECTED */
48-
"disconnect",
42+
case ZMQ_EVENT_DISCONNECTED:
43+
return "disconnect";
4944

50-
/* EVENT_MONITOR_STOPPED */
51-
"end",
45+
case ZMQ_EVENT_MONITOR_STOPPED:
46+
return "end";
5247

53-
/* EVENT_HANDSHAKE_FAILED_NO_DETAIL */
54-
"handshake:error:other",
48+
#ifdef ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL
49+
case ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL:
50+
return "handshake:error:other";
51+
#endif
5552

56-
/* EVENT_HANDSHAKE_SUCCEEDED */
57-
"handshake",
53+
#ifdef ZMQ_EVENT_HANDSHAKE_SUCCEEDED
54+
case ZMQ_EVENT_HANDSHAKE_SUCCEEDED:
55+
return "handshake";
56+
#endif
5857

59-
/* EVENT_HANDSHAKE_FAILED_PROTOCOL */
60-
"handshake:error:protocol",
58+
#ifdef ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL
59+
case ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL:
60+
return "handshake:error:protocol";
61+
#endif
6162

62-
/* EVENT_HANDSHAKE_FAILED_AUTH */
63-
"handshake:error:auth",
63+
#ifdef ZMQ_EVENT_HANDSHAKE_FAILED_AUTH
64+
case ZMQ_EVENT_HANDSHAKE_FAILED_AUTH:
65+
return "handshake:error:auth";
66+
#endif
6467

6568
/* <---- Insert new events here. */
6669

6770
/* Fallback if the event was unknown. */
68-
"unknown");
69-
70-
/* https://stackoverflow.com/questions/757059/position-of-least-significant-bit-that-is-set
71-
*/
72-
static inline const char* EventName(uint32_t val) {
73-
static const int multiply[32] = {0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17,
74-
4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9};
75-
76-
uint32_t ffs = multiply[((uint32_t)((val & -val) * 0x077CB531U)) >> 27];
77-
78-
if (ffs >= events.size()) return events.back();
79-
return events[ffs];
71+
default:
72+
return "unknown";
73+
}
8074
}
8175

8276
#ifdef ZMQ_EVENT_HANDSHAKE_FAILED_AUTH

0 commit comments

Comments
 (0)