From 2aa9bf48f6521c630de846018dec1cb1cc784039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Hannappel?= <juergen.hannappel@desy.de> Date: Wed, 7 Jul 2021 16:44:20 +0200 Subject: [PATCH] add producer enum equality checks --- .../common/internal/asapo_common_c_glue.h | 9 ++++++ consumer/api/cpp/src/consumer_c_glue.cpp | 5 ---- producer/api/cpp/src/producer_c_glue.cpp | 29 +++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h b/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h index 6eb5c5cac..d1a85106f 100644 --- a/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h +++ b/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h @@ -103,4 +103,13 @@ AsapoHandlerHolder<std::string>* handle_or_null_t(const std::string& object, } + +template<typename u, typename t> +constexpr bool operator==(const u& lhs, const t& rhs) { + return static_cast<typename std::make_unsigned<u>::type>(lhs) + == static_cast<typename std::make_unsigned<typename std::underlying_type<t>::type>::type>(rhs); +} + + + #endif diff --git a/consumer/api/cpp/src/consumer_c_glue.cpp b/consumer/api/cpp/src/consumer_c_glue.cpp index 7edbfe800..a60cbbb7e 100644 --- a/consumer/api/cpp/src/consumer_c_glue.cpp +++ b/consumer/api/cpp/src/consumer_c_glue.cpp @@ -52,11 +52,6 @@ typedef AsapoHandlerHolder<asapo::ConsumerErrorData>* AsapoConsumerErrorDataHand #include <algorithm> -template<typename t> -constexpr bool operator==(const unsigned int& lhs, const t& rhs) { - return lhs == static_cast<typename std::make_unsigned<typename std::underlying_type<t>::type>::type>(rhs); -} - #define dataGetterStart \ asapo::MessageData d; \ asapo::MessageMeta* fi = info ? new asapo::MessageMeta : nullptr; \ diff --git a/producer/api/cpp/src/producer_c_glue.cpp b/producer/api/cpp/src/producer_c_glue.cpp index 67c58df01..debd7d1ee 100644 --- a/producer/api/cpp/src/producer_c_glue.cpp +++ b/producer/api/cpp/src/producer_c_glue.cpp @@ -14,6 +14,35 @@ typedef AsapoHandlerHolder<asapo::MessageHeader>* AsapoMessageHeaderHandle; extern "C" { #include "asapo/producer_c.h" + static_assert(kOpcodeUnknownOp == asapo::Opcode::kOpcodeUnknownOp&& + kOpcodeTransferData == asapo::Opcode::kOpcodeTransferData&& + kOpcodeTransferDatasetData == asapo::Opcode::kOpcodeTransferDatasetData&& + kOpcodeStreamInfo == asapo::Opcode::kOpcodeStreamInfo&& + kOpcodeLastStream == asapo::Opcode::kOpcodeLastStream&& + kOpcodeGetBufferData == asapo::Opcode::kOpcodeGetBufferData&& + kOpcodeAuthorize == asapo::Opcode::kOpcodeAuthorize&& + kOpcodeTransferMetaData == asapo::Opcode::kOpcodeTransferMetaData&& + kOpcodeDeleteStream == asapo::Opcode::kOpcodeDeleteStream&& + kOpcodeGetMeta == asapo::Opcode::kOpcodeGetMeta&& + kOpcodeCount == asapo::Opcode::kOpcodeCount, + "incompatible bit reps between c++ and c for asapo::OpCode"); + static_assert(kTcp == asapo::RequestHandlerType:: kTcp&& + kFilesystem == asapo::RequestHandlerType:: kFilesystem, + "incompatible bit reps between c++ and c for asapo::RequestHandlerType"); + + static_assert(kInsert == asapo::MetaIngestOp::kInsert&& + kReplace == asapo::MetaIngestOp::kReplace&& + kUpdate == asapo::MetaIngestOp::kUpdate, + "incompatible bit reps between c++ and c for asapo::MetaIngestOp"); + + static_assert(None == asapo::LogLevel::None&& + Error == asapo::LogLevel::Error&& + Info == asapo::LogLevel::Info&& + Debug == asapo::LogLevel::Debug&& + Warning == asapo::LogLevel::Warning, + "incompatible bit reps between c++ and c for asapo::LogLevel"); + + AsapoProducerHandle asapo_create_producer(const char* endpoint, uint8_t n_processing_threads, AsapoRequestHandlerType type, -- GitLab