From 25539e99f210fb1a8a846b7bb5efb2aad032844e Mon Sep 17 00:00:00 2001 From: Dennis Klein Date: Tue, 20 Aug 2019 16:33:51 +0200 Subject: [PATCH] SDK: Introduce fairmq error category --- fairmq/sdk/AsioAsyncOp.h | 2 +- fairmq/sdk/CMakeLists.txt | 1 + fairmq/sdk/Error.cxx | 40 ++++++++++++++++++++++++++++ fairmq/sdk/{Exceptions.h => Error.h} | 31 ++++++++++++++++++--- fairmq/sdk/Topology.h | 14 +++++----- 5 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 fairmq/sdk/Error.cxx rename fairmq/sdk/{Exceptions.h => Error.h} (67%) diff --git a/fairmq/sdk/AsioAsyncOp.h b/fairmq/sdk/AsioAsyncOp.h index 0757a8a3..7b000d42 100644 --- a/fairmq/sdk/AsioAsyncOp.h +++ b/fairmq/sdk/AsioAsyncOp.h @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/fairmq/sdk/CMakeLists.txt b/fairmq/sdk/CMakeLists.txt index 996b14dd..5c9d0704 100644 --- a/fairmq/sdk/CMakeLists.txt +++ b/fairmq/sdk/CMakeLists.txt @@ -30,6 +30,7 @@ set(SDK_SOURCE_FILES DDSEnvironment.cxx DDSSession.cxx DDSTopology.cxx + Error.cxx Topology.cxx ) diff --git a/fairmq/sdk/Error.cxx b/fairmq/sdk/Error.cxx new file mode 100644 index 00000000..df726041 --- /dev/null +++ b/fairmq/sdk/Error.cxx @@ -0,0 +1,40 @@ +/******************************************************************************** + * Copyright (C) 2019 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" * + ********************************************************************************/ + +#include "Error.h" + +namespace fair { +namespace mq { + +const char* ErrorCategory::name() const noexcept +{ + return "fairmq"; +} + +std::string ErrorCategory::message(int ev) const +{ + switch (static_cast(ev)) { + case ErrorCode::OperationInProgress: + return "async operation already in progress"; + case ErrorCode::OperationTimeout: + return "async operation timed out"; + case ErrorCode::OperationCanceled: + return "async operation canceled"; + case ErrorCode::DeviceChangeStateFailed: + return "failed to change state of a fairmq device"; + default: + return "(unrecognized error)"; + } +} + +const ErrorCategory errorCategory{}; + +std::error_code MakeErrorCode(ErrorCode e) { return {static_cast(e), errorCategory}; } + +} // namespace mq +} // namespace fair diff --git a/fairmq/sdk/Exceptions.h b/fairmq/sdk/Error.h similarity index 67% rename from fairmq/sdk/Exceptions.h rename to fairmq/sdk/Error.h index 77809244..b4cb2eec 100644 --- a/fairmq/sdk/Exceptions.h +++ b/fairmq/sdk/Error.h @@ -6,8 +6,8 @@ * copied verbatim in the file "LICENSE" * ********************************************************************************/ -#ifndef FAIR_MQ_SDK_EXCEPTIONS_H -#define FAIR_MQ_SDK_EXCEPTIONS_H +#ifndef FAIR_MQ_SDK_ERROR_H +#define FAIR_MQ_SDK_ERROR_H #include #include @@ -31,7 +31,32 @@ struct MixedStateError : RuntimeError }; } /* namespace sdk */ + +enum class ErrorCode +{ + OperationInProgress = 10, + OperationTimeout, + OperationCanceled, + DeviceChangeStateFailed +}; + +std::error_code MakeErrorCode(ErrorCode); + +struct ErrorCategory : std::error_category +{ + const char* name() const noexcept override; + std::string message(int ev) const override; +}; + } /* namespace mq */ } /* namespace fair */ -#endif /* FAIR_MQ_SDK_EXCEPTIONS_H */ +namespace std { + +template<> +struct is_error_code_enum : true_type +{}; + +} // namespace std + +#endif /* FAIR_MQ_SDK_ERROR_H */ diff --git a/fairmq/sdk/Topology.h b/fairmq/sdk/Topology.h index 2faafec2..c213e2ab 100644 --- a/fairmq/sdk/Topology.h +++ b/fairmq/sdk/Topology.h @@ -9,20 +9,20 @@ #ifndef FAIR_MQ_SDK_TOPOLOGY_H #define FAIR_MQ_SDK_TOPOLOGY_H +#include +#include +#include #include #include #include -#include -#include - +#include #include -#include #include -#include #include -#include -#include #include +#include +#include +#include namespace fair { namespace mq {