From 6dc2b131f7873d9408081430fa68a39cfe200ae6 Mon Sep 17 00:00:00 2001 From: smathis Date: Wed, 17 Sep 2025 12:33:58 +0200 Subject: [PATCH] Exempt EPICS libraries from -Weffc++ --- src/msgPrintControl.cpp | 2 ++ src/msgPrintControl.h | 39 ++++++++++++++++--------- src/sinqAxis.cpp | 30 +++++++++---------- src/sinqController.cpp | 65 ++++++++++++++++++++--------------------- 4 files changed, 74 insertions(+), 62 deletions(-) diff --git a/src/msgPrintControl.cpp b/src/msgPrintControl.cpp index a950d3f..45ec4c5 100644 --- a/src/msgPrintControl.cpp +++ b/src/msgPrintControl.cpp @@ -16,6 +16,8 @@ void msgPrintControlKey::format(char *buffer, size_t bufferSize) { // ============================================================================= +msgPrintControl::msgPrintControl() : map_(), suffix_{} {} + msgPrintControl::~msgPrintControl() = default; bool msgPrintControl::shouldBePrinted(msgPrintControlKey &key, bool wantToPrint, diff --git a/src/msgPrintControl.h b/src/msgPrintControl.h index 9d66957..2460b52 100644 --- a/src/msgPrintControl.h +++ b/src/msgPrintControl.h @@ -5,8 +5,15 @@ #define DefaultMaxRepetitions 4 -#include -#include +// The EPICS libaries do not follow -Weffc++ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Weffc++" + +#include "asynDriver.h" +#include "macros.h" + +#pragma GCC diagnostic pop + #include #include #include @@ -18,6 +25,17 @@ */ class HIDDEN msgPrintControlKey { public: + msgPrintControlKey(char *controller_, int axisNo, const char *fileName, + int line, size_t maxRepetitions = DefaultMaxRepetitions); + + bool operator==(const msgPrintControlKey &other) const { + return axisNo_ == other.axisNo_ && line_ == other.line_ && + functionName_ == other.functionName_ && + controller_ == other.controller_; + } + + void format(char *buffer, size_t bufferSize); + std::string controller_; // -1 indicates a non-axis specific message @@ -32,17 +50,6 @@ class HIDDEN msgPrintControlKey { * */ size_t maxRepetitions_; - - msgPrintControlKey(char *controller_, int axisNo, const char *fileName, - int line, size_t maxRepetitions = DefaultMaxRepetitions); - - bool operator==(const msgPrintControlKey &other) const { - return axisNo_ == other.axisNo_ && line_ == other.line_ && - functionName_ == other.functionName_ && - controller_ == other.controller_; - } - - void format(char *buffer, size_t bufferSize); }; /** @@ -85,6 +92,12 @@ template <> struct hash { */ class HIDDEN msgPrintControl { public: + /** + * @brief Construct a new msgPrintControl object + * + */ + msgPrintControl(); + /** * @brief Destroy the msgPrintControl object * diff --git a/src/sinqAxis.cpp b/src/sinqAxis.cpp index 7ee1345..46111cc 100644 --- a/src/sinqAxis.cpp +++ b/src/sinqAxis.cpp @@ -11,9 +11,8 @@ #pragma GCC diagnostic pop -#include "sinqAxis.h" - #include "msgPrintControl.h" +#include "sinqAxis.h" #include "sinqController.h" #include #include @@ -39,21 +38,22 @@ struct sinqAxisImpl { }; sinqAxis::sinqAxis(class sinqController *pC, int axisNo) - : asynMotorAxis((asynMotorController *)pC, axisNo), pC_(pC) { + : asynMotorAxis((asynMotorController *)pC, axisNo), pC_(pC), pSinqA_([] { + epicsTimeStamp lastPollTime; + epicsTimeGetCurrent(&lastPollTime); + return std::make_unique(sinqAxisImpl{ + .expectedArrivalTime = 0, + .offsetMovTimeout = 30, + .scaleMovTimeout = 2.0, + .watchdogMovActive = false, + .targetPosition = 0.0, + .wasMoving = false, + .lastPollTime = lastPollTime, + }); + }()) { + asynStatus status = asynSuccess; - epicsTimeStamp lastPollTime; - epicsTimeGetCurrent(&lastPollTime); - - pSinqA_ = std::make_unique( - (sinqAxisImpl){.expectedArrivalTime = 0, - .offsetMovTimeout = 30, - .scaleMovTimeout = 2.0, - .watchdogMovActive = false, - .targetPosition = 0.0, - .wasMoving = false, - .lastPollTime = lastPollTime}); - /* This check is also done in asynMotorAxis, but there the IOC continues running even though the configuration is incorrect. When failing this check, diff --git a/src/sinqController.cpp b/src/sinqController.cpp index 9a8a75c..45688a9 100644 --- a/src/sinqController.cpp +++ b/src/sinqController.cpp @@ -119,43 +119,40 @@ sinqController::sinqController(const char *portName, 0, // No additional interfaces beyond those in base class 0, // No additional callback interfaces beyond those in base class ASYN_CANBLOCK | ASYN_MULTIDEVICE, - 1, // autoconnect - 0, 0) // Default priority and stack size -{ + 1, // autoconnect + 0, 0), // Default priority and stack size + pSinqC_(std::make_unique((sinqControllerImpl){ + .outstandingForcedFastPolls = 0, + .pasynOctetSyncIOipPort = nullptr, + .msgPrintC = msgPrintControl(), + .comTimeoutWindow = 3600, + .maxNumberTimeouts = 60, + .timeoutEvents = {}, + .maxSubsequentTimeouts = 10, + .maxSubsequentTimeoutsExceeded = false, + .motorMessageText = 0, + .motorReset = 0, + .motorEnable = 0, + .motorEnableRBV = 0, + .motorCanDisable = 0, + .motorEnableMovWatchdog = 0, + .motorCanSetSpeed = 0, + .motorLimitsOffset = 0, + .motorForceStop = 0, + .motorConnected = 0, + .motorVeloFromDriver = 0, + .motorVbasFromDriver = 0, + .motorVmaxFromDriver = 0, + .motorAcclFromDriver = 0, + .motorHighLimitFromDriver = 0, + .motorLowLimitFromDriver = 0, + .motorPositionDeadband = 0, + .adaptivePolling = 0, + .encoderType = 0, + })) { asynStatus status = asynSuccess; - // The paramLib indices are populated with the calls to createParam - pSinqC_ = std::make_unique((sinqControllerImpl){ - .outstandingForcedFastPolls = 0, - .pasynOctetSyncIOipPort = nullptr, - .msgPrintC = msgPrintControl(), - .comTimeoutWindow = 3600, - .maxNumberTimeouts = 60, - .timeoutEvents = {}, - .maxSubsequentTimeouts = 10, - .maxSubsequentTimeoutsExceeded = false, - .motorMessageText = 0, - .motorReset = 0, - .motorEnable = 0, - .motorEnableRBV = 0, - .motorCanDisable = 0, - .motorEnableMovWatchdog = 0, - .motorCanSetSpeed = 0, - .motorLimitsOffset = 0, - .motorForceStop = 0, - .motorConnected = 0, - .motorVeloFromDriver = 0, - .motorVbasFromDriver = 0, - .motorVmaxFromDriver = 0, - .motorAcclFromDriver = 0, - .motorHighLimitFromDriver = 0, - .motorLowLimitFromDriver = 0, - .motorPositionDeadband = 0, - .adaptivePolling = 0, - .encoderType = 0, - }); - // Store the poll period information. The poller itself will be started // later (after the IOC is running in epicsInithookFunction) movingPollPeriod_ = movingPollPeriod;