Skip to content

Commit

Permalink
refactor: Deduplicate GetConstant()
Browse files Browse the repository at this point in the history
* Deprecate its old name in the Socket classes
  • Loading branch information
dennisklein authored and rbx committed Oct 19, 2021
1 parent e84a16d commit 7329cb4
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 71 deletions.
1 change: 1 addition & 0 deletions fairmq/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ if(BUILD_FAIRMQ)
shmem/Common.h
shmem/Manager.h
shmem/Region.h
zeromq/Common.h
zeromq/Context.h
zeromq/Message.h
zeromq/Poller.h
Expand Down
42 changes: 6 additions & 36 deletions fairmq/shmem/Socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <FairMQMessage.h>
#include <FairMQLogger.h>
#include <fairmq/tools/Strings.h>
#include <fairmq/zeromq/Common.h>

#include <zmq.h>

Expand Down Expand Up @@ -68,7 +69,7 @@ class Socket final : public fair::mq::Socket
throw SocketError("PUB/SUB socket type is not supported for shared memory transport");
}

fSocket = zmq_socket(context, GetConstant(type));
fSocket = zmq_socket(context, zmq::getConstant(type));

if (fSocket == nullptr) {
LOG(error) << "Failed creating socket " << fId << ", reason: " << zmq_strerror(errno);
Expand Down Expand Up @@ -361,14 +362,14 @@ class Socket final : public fair::mq::Socket

void SetOption(const std::string& option, const void* value, size_t valueSize) override
{
if (zmq_setsockopt(fSocket, GetConstant(option), value, valueSize) < 0) {
if (zmq_setsockopt(fSocket, zmq::getConstant(option), value, valueSize) < 0) {
LOG(error) << "Failed setting socket option, reason: " << zmq_strerror(errno);
}
}

void GetOption(const std::string& option, void* value, size_t* valueSize) override
{
if (zmq_getsockopt(fSocket, GetConstant(option), value, valueSize) < 0) {
if (zmq_getsockopt(fSocket, zmq::getConstant(option), value, valueSize) < 0) {
LOG(error) << "Failed getting socket option, reason: " << zmq_strerror(errno);
}
}
Expand Down Expand Up @@ -469,39 +470,8 @@ class Socket final : public fair::mq::Socket
unsigned long GetMessagesTx() const override { return fMessagesTx; }
unsigned long GetMessagesRx() const override { return fMessagesRx; }

static int GetConstant(const std::string& constant)
{
if (constant.empty()) { return 0; }
if (constant == "sub") { return ZMQ_SUB; }
if (constant == "pub") { return ZMQ_PUB; }
if (constant == "xsub") { return ZMQ_XSUB; }
if (constant == "xpub") { return ZMQ_XPUB; }
if (constant == "push") { return ZMQ_PUSH; }
if (constant == "pull") { return ZMQ_PULL; }
if (constant == "req") { return ZMQ_REQ; }
if (constant == "rep") { return ZMQ_REP; }
if (constant == "dealer") { return ZMQ_DEALER; }
if (constant == "router") { return ZMQ_ROUTER; }
if (constant == "pair") { return ZMQ_PAIR; }

if (constant == "snd-hwm") { return ZMQ_SNDHWM; }
if (constant == "rcv-hwm") { return ZMQ_RCVHWM; }
if (constant == "snd-size") { return ZMQ_SNDBUF; }
if (constant == "rcv-size") { return ZMQ_RCVBUF; }
if (constant == "snd-more") { return ZMQ_SNDMORE; }
if (constant == "rcv-more") { return ZMQ_RCVMORE; }

if (constant == "linger") { return ZMQ_LINGER; }
if (constant == "no-block") { return ZMQ_DONTWAIT; }
if (constant == "snd-more no-block") { return ZMQ_DONTWAIT|ZMQ_SNDMORE; }

if (constant == "fd") { return ZMQ_FD; }
if (constant == "events") { return ZMQ_EVENTS; }
if (constant == "pollin") { return ZMQ_POLLIN; }
if (constant == "pollout") { return ZMQ_POLLOUT; }

throw SocketError(tools::ToString("GetConstant called with an invalid argument: ", constant));
}
[[deprecated("Use fair::mq::zmq::getConstant() from <fairmq/zeromq/Common.h> instead.")]]
static int GetConstant(const std::string& constant) { return zmq::getConstant(constant); }

~Socket() override { Close(); }

Expand Down
58 changes: 58 additions & 0 deletions fairmq/zeromq/Common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/********************************************************************************
* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* *
* This software is distributed under the terms of the *
* GNU Lesser General Public Licence (LGPL) version 3, *
* copied verbatim in the file "LICENSE" *
********************************************************************************/
#ifndef FAIR_MQ_ZMQ_COMMON_H
#define FAIR_MQ_ZMQ_COMMON_H

#include <fairmq/tools/Strings.h>
#include <stdexcept>
#include <string_view>
#include <zmq.h>

namespace fair::mq::zmq
{

struct Error : std::runtime_error { using std::runtime_error::runtime_error; };

/// Lookup table for various zmq constants
inline auto getConstant(std::string_view constant) -> int
{
if (constant.empty()) { return 0; }
if (constant == "sub") { return ZMQ_SUB; }
if (constant == "pub") { return ZMQ_PUB; }
if (constant == "xsub") { return ZMQ_XSUB; }
if (constant == "xpub") { return ZMQ_XPUB; }
if (constant == "push") { return ZMQ_PUSH; }
if (constant == "pull") { return ZMQ_PULL; }
if (constant == "req") { return ZMQ_REQ; }
if (constant == "rep") { return ZMQ_REP; }
if (constant == "dealer") { return ZMQ_DEALER; }
if (constant == "router") { return ZMQ_ROUTER; }
if (constant == "pair") { return ZMQ_PAIR; }

if (constant == "snd-hwm") { return ZMQ_SNDHWM; }
if (constant == "rcv-hwm") { return ZMQ_RCVHWM; }
if (constant == "snd-size") { return ZMQ_SNDBUF; }
if (constant == "rcv-size") { return ZMQ_RCVBUF; }
if (constant == "snd-more") { return ZMQ_SNDMORE; }
if (constant == "rcv-more") { return ZMQ_RCVMORE; }

if (constant == "linger") { return ZMQ_LINGER; }
if (constant == "no-block") { return ZMQ_DONTWAIT; }
if (constant == "snd-more no-block") { return ZMQ_DONTWAIT|ZMQ_SNDMORE; }

if (constant == "fd") { return ZMQ_FD; }
if (constant == "events") { return ZMQ_EVENTS; }
if (constant == "pollin") { return ZMQ_POLLIN; }
if (constant == "pollout") { return ZMQ_POLLOUT; }

throw Error(tools::ToString("getConstant called with an invalid argument: ", constant));
}

} // namespace fair::mq::zmq

#endif /* FAIR_MQ_ZMQ_COMMON_H */
42 changes: 7 additions & 35 deletions fairmq/zeromq/Socket.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* Copyright (C) 2014-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* *
* This software is distributed under the terms of the *
* GNU Lesser General Public Licence (LGPL) version 3, *
Expand All @@ -13,6 +13,7 @@
#include <FairMQMessage.h>
#include <FairMQSocket.h>
#include <fairmq/tools/Strings.h>
#include <fairmq/zeromq/Common.h>
#include <fairmq/zeromq/Context.h>
#include <fairmq/zeromq/Message.h>

Expand All @@ -30,7 +31,7 @@ class Socket final : public fair::mq::Socket
Socket(Context& ctx, const std::string& type, const std::string& name, const std::string& id, FairMQTransportFactory* factory = nullptr)
: fair::mq::Socket(factory)
, fCtx(ctx)
, fSocket(zmq_socket(fCtx.GetZmqCtx(), GetConstant(type)))
, fSocket(zmq_socket(fCtx.GetZmqCtx(), getConstant(type)))
, fId(id + "." + name + "." + type)
, fBytesTx(0)
, fBytesRx(0)
Expand Down Expand Up @@ -313,14 +314,14 @@ class Socket final : public fair::mq::Socket

void SetOption(const std::string& option, const void* value, size_t valueSize) override
{
if (zmq_setsockopt(fSocket, GetConstant(option), value, valueSize) < 0) {
if (zmq_setsockopt(fSocket, getConstant(option), value, valueSize) < 0) {
LOG(error) << "Failed setting socket option, reason: " << zmq_strerror(errno);
}
}

void GetOption(const std::string& option, void* value, size_t* valueSize) override
{
if (zmq_getsockopt(fSocket, GetConstant(option), value, valueSize) < 0) {
if (zmq_getsockopt(fSocket, getConstant(option), value, valueSize) < 0) {
LOG(error) << "Failed getting socket option, reason: " << zmq_strerror(errno);
}
}
Expand Down Expand Up @@ -421,37 +422,8 @@ class Socket final : public fair::mq::Socket
unsigned long GetMessagesTx() const override { return fMessagesTx; }
unsigned long GetMessagesRx() const override { return fMessagesRx; }

static int GetConstant(const std::string& constant)
{
if (constant.empty()) { return 0; }
if (constant == "sub") { return ZMQ_SUB; }
if (constant == "pub") { return ZMQ_PUB; }
if (constant == "xsub") { return ZMQ_XSUB; }
if (constant == "xpub") { return ZMQ_XPUB; }
if (constant == "push") { return ZMQ_PUSH; }
if (constant == "pull") { return ZMQ_PULL; }
if (constant == "req") { return ZMQ_REQ; }
if (constant == "rep") { return ZMQ_REP; }
if (constant == "dealer") { return ZMQ_DEALER; }
if (constant == "router") { return ZMQ_ROUTER; }
if (constant == "pair") { return ZMQ_PAIR; }

if (constant == "snd-hwm") { return ZMQ_SNDHWM; }
if (constant == "rcv-hwm") { return ZMQ_RCVHWM; }
if (constant == "snd-size") { return ZMQ_SNDBUF; }
if (constant == "rcv-size") { return ZMQ_RCVBUF; }
if (constant == "snd-more") { return ZMQ_SNDMORE; }
if (constant == "rcv-more") { return ZMQ_RCVMORE; }

if (constant == "linger") { return ZMQ_LINGER; }

if (constant == "fd") { return ZMQ_FD; }
if (constant == "events") { return ZMQ_EVENTS; }
if (constant == "pollin") { return ZMQ_POLLIN; }
if (constant == "pollout") { return ZMQ_POLLOUT; }

throw SocketError(tools::ToString("GetConstant called with an invalid argument: ", constant));
}
[[deprecated("Use fair::mq::zmq::getConstant() from <fairmq/zeromq/Common.h> instead.")]]
static int GetConstant(const std::string& constant) { return getConstant(constant); }

~Socket() override { Close(); }

Expand Down

0 comments on commit 7329cb4

Please sign in to comment.