From ceed0eaa9b249a1d0bc72222b5021aab522c3be3 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 29 May 2018 16:59:55 +0200 Subject: [PATCH] generic call for hostname and sgetDetectorsType --- .../multiSlsDetector/multiSlsDetector.cpp | 52 ++++++++----------- .../multiSlsDetector/multiSlsDetector.h | 3 ++ 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index e908aa988..261d5353a 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -595,47 +595,23 @@ string multiSlsDetector::ssetDetectorsType(string name, int pos) string multiSlsDetector::getHostname(int pos) { - string hostnames; - if (pos >= 0) { - if (detectors[pos]) - return detectors[pos]->getHostname(); - } else { - for (int ip = 0; ip < thisMultiDetector->numberOfDetectors; ++ip) { - if (detectors[ip]) - hostnames += detectors[ip]->getHostname() + "+"; - } - } - return hostnames; + return concatResultOrPos(&slsDetector::getHostname, pos); } slsDetectorDefs::detectorType multiSlsDetector::getDetectorsType(int pos) { - - detectorType s = GENERIC; -#ifdef VERBOSE - cout << "returning type of detector with ID " << pos << endl; -#endif + detectorType dt = GENERIC; if (pos >= 0) { if (detectors[pos]) return detectors[pos]->getDetectorsType(); } else if (detectors[0]) return detectors[0]->getDetectorsType(); - return s; + return dt; } -string multiSlsDetector::sgetDetectorsType(int pos) +std::string multiSlsDetector::sgetDetectorsType(int pos) { - string s; - if (pos >= 0) { - if (detectors[pos]) - return detectors[pos]->sgetDetectorsType(); - } else { - for (int ip = 0; ip < thisMultiDetector->numberOfDetectors; ++ip) { - if (detectors[ip]) - s += detectors[ip]->sgetDetectorsType() + "+"; - } - } - return s; + return concatResultOrPos(&slsDetector::sgetDetectorsType, pos); } int multiSlsDetector::getDetectorId(int pos) @@ -3279,6 +3255,21 @@ void multiSlsDetector::setErrorMaskFromAllDetectors() } } +std::string multiSlsDetector::concatResultOrPos(std::string (slsDetector::*somefunc)(int), int pos) +{ + if (pos >= 0) { + if (detectors[pos]) + return (detectors[pos]->*somefunc)(pos); + } else { + std::string s; + for (int i = 0; i < thisMultiDetector->numberOfDetectors; ++i) { + if (detectors[i]) + s += (detectors[i]->*somefunc)(pos) + "+"; + } + return s; + } +} + template T multiSlsDetector::callDetectorMember(T (slsDetector::*somefunc)()) { @@ -5962,6 +5953,7 @@ bool multiSlsDetector::isAcquireReady() return OK; } -int multiSlsDetector::checkVersionCompatibility(portType t) { +int multiSlsDetector::checkVersionCompatibility(portType t) +{ return parallelCallDetectorMember(&slsDetector::checkVersionCompatibility, t); } diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 2bfc5c95f..f6e531ea2 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -1044,6 +1044,9 @@ class multiSlsDetector : public slsDetectorUtils { void setErrorMaskFromAllDetectors(); + + std::string concatResultOrPos(std::string (slsDetector::*somefunc)(int), int pos); + template bool allElemetsEqual(const std::vector&);