From 014dfaa251e7c68c13a0cd79d33172ba433bb766 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 16 Oct 2018 17:30:43 +0200 Subject: [PATCH] moved to vector of unique pointer in slsReceiverImplementation --- slsReceiverSoftware/include/DataProcessor.h | 4 +- slsReceiverSoftware/include/DataStreamer.h | 4 +- slsReceiverSoftware/include/Listener.h | 4 +- .../include/slsReceiverImplementation.h | 11 +- slsReceiverSoftware/src/DataProcessor.cpp | 4 +- slsReceiverSoftware/src/DataStreamer.cpp | 4 +- slsReceiverSoftware/src/Listener.cpp | 4 +- slsReceiverSoftware/src/main.cpp | 2 +- .../src/slsReceiverImplementation.cpp | 205 ++++++++++-------- slsSupportLib/include/container_utils.h | 4 +- 10 files changed, 133 insertions(+), 113 deletions(-) diff --git a/slsReceiverSoftware/include/DataProcessor.h b/slsReceiverSoftware/include/DataProcessor.h index 6e26f427d..8d259d752 100644 --- a/slsReceiverSoftware/include/DataProcessor.h +++ b/slsReceiverSoftware/include/DataProcessor.h @@ -42,7 +42,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { * @param dataModifyReadycb pointer to data ready call back function with modified * @param pDataReadycb pointer to arguments of data ready call back function. To write/stream a smaller size of processed data, change this value (only smaller value is allowed). */ - DataProcessor(int ind, detectorType dtype, Fifo*& f, fileFormat* ftype, + DataProcessor(int ind, detectorType dtype, Fifo* f, fileFormat* ftype, bool fwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr, uint32_t* freq, uint32_t* timer, bool* fp, bool* act, bool* depaden, bool* sm, @@ -121,7 +121,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { * Set Fifo pointer to the one given * @param f address of Fifo pointer */ - void SetFifo(Fifo*& f); + void SetFifo(Fifo* f); /** * Reset parameters for new acquisition (including all scans) diff --git a/slsReceiverSoftware/include/DataStreamer.h b/slsReceiverSoftware/include/DataStreamer.h index 834b95f08..8f5720490 100644 --- a/slsReceiverSoftware/include/DataStreamer.h +++ b/slsReceiverSoftware/include/DataStreamer.h @@ -31,7 +31,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { * @param ajh additional json header * @param sm pointer to silent mode */ - DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, + DataStreamer(int ind, Fifo* f, uint32_t* dr, std::vector* r, uint64_t* fi, int* fd, char* ajh, bool* sm); /** @@ -63,7 +63,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { * Set Fifo pointer to the one given * @param f address of Fifo pointer */ - void SetFifo(Fifo*& f); + void SetFifo(Fifo* f); /** * Reset parameters for new acquisition (including all scans) diff --git a/slsReceiverSoftware/include/Listener.h b/slsReceiverSoftware/include/Listener.h index da8280a1c..f57f9e263 100644 --- a/slsReceiverSoftware/include/Listener.h +++ b/slsReceiverSoftware/include/Listener.h @@ -37,7 +37,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject { * @param depaden pointer to deactivated padding enable * @param sm pointer to silent mode */ - Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s, + Listener(int ind, detectorType dtype, Fifo* f, runStatus* s, uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr, uint32_t* us, uint32_t* as, uint32_t* fpf, frameDiscardPolicy* fdp, bool* act, bool* depaden, bool* sm); @@ -96,7 +96,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject { * Set Fifo pointer to the one given * @param f address of Fifo pointer */ - void SetFifo(Fifo*& f); + void SetFifo(Fifo* f); /** * Reset parameters for new acquisition (including all scans) diff --git a/slsReceiverSoftware/include/slsReceiverImplementation.h b/slsReceiverSoftware/include/slsReceiverImplementation.h index b57176962..fcbb298d9 100644 --- a/slsReceiverSoftware/include/slsReceiverImplementation.h +++ b/slsReceiverSoftware/include/slsReceiverImplementation.h @@ -9,7 +9,7 @@ #include "sls_detector_defs.h" #include "receiver_defs.h" #include "logger.h" - +#include "container_utils.h" class GeneralData; class Listener; class DataProcessor; @@ -18,6 +18,7 @@ class Fifo; #include #include +#include class slsReceiverImplementation: private virtual slsDetectorDefs { public: @@ -832,13 +833,13 @@ private: /** General Data Properties */ GeneralData* generalData; /** Listener Objects that listen to UDP and push into fifo */ - std::vector listener; + std::vector> listener; /** DataProcessor Objects that pull from fifo and process data */ - std::vector dataProcessor; + std::vector> dataProcessor; /** DataStreamer Objects that stream data via ZMQ */ - std::vector dataStreamer; + std::vector> dataStreamer; /** Fifo Structure to store addresses of memory writes */ - std::vector fifo; + std::vector> fifo; //***callback parameters*** /** diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index bce6e0379..1855fa3a1 100644 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -22,7 +22,7 @@ const std::string DataProcessor::TypeName = "DataProcessor"; -DataProcessor::DataProcessor(int ind, detectorType dtype, Fifo*& f, +DataProcessor::DataProcessor(int ind, detectorType dtype, Fifo* f, fileFormat* ftype, bool fwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr, uint32_t* freq, uint32_t* timer, @@ -125,7 +125,7 @@ void DataProcessor::StopRunning() { runningFlag = false; } -void DataProcessor::SetFifo(Fifo*& f) { +void DataProcessor::SetFifo(Fifo* f) { fifo = f; } diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index fee9fca24..bb1f6a23d 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -15,7 +15,7 @@ const std::string DataStreamer::TypeName = "DataStreamer"; -DataStreamer::DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, +DataStreamer::DataStreamer(int ind, Fifo* f, uint32_t* dr, std::vector* r, uint64_t* fi, int* fd, char* ajh, bool* sm) : ThreadObject(ind), runningFlag(0), @@ -70,7 +70,7 @@ void DataStreamer::StopRunning() { runningFlag = false; } -void DataStreamer::SetFifo(Fifo*& f) { +void DataStreamer::SetFifo(Fifo* f) { fifo = f; } diff --git a/slsReceiverSoftware/src/Listener.cpp b/slsReceiverSoftware/src/Listener.cpp index b28b86377..8e1c05ecf 100644 --- a/slsReceiverSoftware/src/Listener.cpp +++ b/slsReceiverSoftware/src/Listener.cpp @@ -18,7 +18,7 @@ const std::string Listener::TypeName = "Listener"; -Listener::Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s, +Listener::Listener(int ind, detectorType dtype, Fifo* f, runStatus* s, uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr, uint32_t* us, uint32_t* as, uint32_t* fpf, frameDiscardPolicy* fdp, bool* act, bool* depaden, bool* sm) : @@ -108,7 +108,7 @@ void Listener::StopRunning() { } -void Listener::SetFifo(Fifo*& f) { +void Listener::SetFifo(Fifo* f) { fifo = f; } diff --git a/slsReceiverSoftware/src/main.cpp b/slsReceiverSoftware/src/main.cpp index 500c01748..aea006a59 100644 --- a/slsReceiverSoftware/src/main.cpp +++ b/slsReceiverSoftware/src/main.cpp @@ -153,7 +153,7 @@ int main(int argc, char *argv[]) { delete receiver; cprintf(BLUE,"Exiting [ Tid: %ld ]\n", (long)syscall(SYS_gettid)); - FILE_LOG(logINFO) << "Goodbye!"; + // FILE_LOG(logINFO) << "Goodbye!"; return 0; } diff --git a/slsReceiverSoftware/src/slsReceiverImplementation.cpp b/slsReceiverSoftware/src/slsReceiverImplementation.cpp index 189994a82..f5a16fa0e 100644 --- a/slsReceiverSoftware/src/slsReceiverImplementation.cpp +++ b/slsReceiverSoftware/src/slsReceiverImplementation.cpp @@ -39,20 +39,9 @@ void slsReceiverImplementation::DeleteMembers() { generalData=0; } - for (auto* it : listener) - delete it; listener.clear(); - - for (auto* it : dataProcessor) - delete it; dataProcessor.clear(); - - for (auto* it : dataStreamer) - delete it; dataStreamer.clear(); - - for (auto* it : fifo) - delete it; fifo.clear(); } @@ -472,8 +461,10 @@ int slsReceiverImplementation::setGapPixelsEnable(const bool b) { // side effects generalData->SetGapPixelsEnable(b, dynamicRange); // to update npixelsx, npixelsy in file writer - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - (*it)->SetPixelDimension(); + // for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) + // (*it)->SetPixelDimension(); + for (const auto& it : dataProcessor) + it->SetPixelDimension(); numberofJobs = -1; //changes to imagesize has to be noted to recreate fifo structure if (SetupFifoStructure() == FAIL) @@ -496,8 +487,10 @@ void slsReceiverImplementation::setFileFormat(const fileFormat f){ break; } //destroy file writer, set file format and create file writer - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - (*it)->SetFileFormat(f); + // for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) + // (*it)->SetFileFormat(f); + for(const auto& it : dataProcessor) + it->SetFileFormat(f); FILE_LOG(logINFO) << "File Format:" << getFileFormatType(fileFormatType); } @@ -649,12 +642,13 @@ int slsReceiverImplementation::setROI(const std::vector i) if (SetupFifoStructure() == FAIL) return FAIL; - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) - (*it)->SetGeneralData(generalData); - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - (*it)->SetGeneralData(generalData); - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) - (*it)->SetGeneralData(generalData); + + for (const auto& it : listener) + it->SetGeneralData(generalData); + for (const auto& it : dataProcessor) + it->SetGeneralData(generalData); + for (const auto& it : dataStreamer) + it->SetGeneralData(generalData); } @@ -699,22 +693,17 @@ int slsReceiverImplementation::setDataStreamEnable(const bool enable) { dataStreamEnable = enable; //data sockets have to be created again as the client ones are - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) - delete(*it); dataStreamer.clear(); if (enable) { for ( int i = 0; i < numThreads; ++i ) { try { - DataStreamer* s = new DataStreamer(i, fifo[i], &dynamicRange, - &roi, &fileIndex, flippedData, additionalJsonHeader, &silentMode); - dataStreamer.push_back(s); + dataStreamer.push_back(sls::make_unique(i, fifo[i].get(), &dynamicRange, + &roi, &fileIndex, flippedData, additionalJsonHeader, &silentMode)); dataStreamer[i]->SetGeneralData(generalData); dataStreamer[i]->CreateZmqSockets(&numThreads, streamingPort, streamingSrcIP); } catch(...) { - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) - delete(*it); dataStreamer.clear(); dataStreamEnable = false; return FAIL; @@ -817,8 +806,10 @@ int slsReceiverImplementation::setDynamicRange(const uint32_t i) { generalData->SetDynamicRange(i,tengigaEnable); generalData->SetGapPixelsEnable(gapPixelsEnable, dynamicRange); // to update npixelsx, npixelsy in file writer - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - (*it)->SetPixelDimension(); + // for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) + // (*it)->SetPixelDimension(); + for (const auto& it : dataProcessor) + it->SetPixelDimension(); numberofJobs = -1; //changes to imagesize has to be noted to recreate fifo structure if (SetupFifoStructure() == FAIL) @@ -937,37 +928,31 @@ int slsReceiverImplementation::setDetectorType(const detectorType d) { for ( int i = 0; i < numThreads; ++i ) { try { - Listener* l = new Listener(i, myDetectorType, fifo[i], &status, + auto fifo_ptr = fifo[i].get(); + listener.push_back(sls::make_unique(i, myDetectorType, fifo_ptr, &status, &udpPortNum[i], eth, &numberOfFrames, &dynamicRange, &udpSocketBufferSize, &actualUDPSocketBufferSize, &framesPerFile, - &frameDiscardMode, &activated, &deactivatedPaddingEnable, &silentMode); - listener.push_back(l); - - DataProcessor* p = new DataProcessor(i, myDetectorType, fifo[i], &fileFormatType, + &frameDiscardMode, &activated, &deactivatedPaddingEnable, &silentMode)); + dataProcessor.push_back(sls::make_unique(i, myDetectorType, fifo_ptr, &fileFormatType, fileWriteEnable, &dataStreamEnable, &gapPixelsEnable, &dynamicRange, &streamingFrequency, &streamingTimerInMs, &framePadding, &activated, &deactivatedPaddingEnable, &silentMode, - rawDataReadyCallBack, rawDataModifyReadyCallBack, pRawDataReady); - dataProcessor.push_back(p); + rawDataReadyCallBack, rawDataModifyReadyCallBack, pRawDataReady)); } catch (...) { FILE_LOG(logERROR) << "Could not create listener/dataprocessor threads (index:" << i << ")"; - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) - delete(*it); listener.clear(); - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - delete(*it); dataProcessor.clear(); return FAIL; } } //set up writer and callbacks - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) - (*it)->SetGeneralData(generalData); - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - (*it)->SetGeneralData(generalData); + for (const auto& it : listener) + it->SetGeneralData(generalData); + for (const auto& it : dataProcessor) + it->SetGeneralData(generalData); SetThreadPriorities(); // check udp socket buffer size @@ -1069,12 +1054,19 @@ void slsReceiverImplementation::stopReceiver(){ bool running = true; while(running) { running = false; - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) - if ((*it)->IsRunning()) - running = true; - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - if ((*it)->IsRunning()) - running = true; + // for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) + // if ((*it)->IsRunning()) + // running = true; + for (const auto& it : listener) + if (it->IsRunning()) + running = true; + + // for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) + // if ((*it)->IsRunning()) + // running = true; + for (const auto& it : dataProcessor) + if (it->IsRunning()) + running = true; usleep(5000); } @@ -1083,9 +1075,14 @@ void slsReceiverImplementation::stopReceiver(){ if (fileWriteEnable && fileFormatType == HDF5) { uint64_t maxIndexCaught = 0; bool anycaught = false; - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) { - maxIndexCaught = std::max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); - if((*it)->GetMeasurementStartedFlag()) + // for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) { + // maxIndexCaught = std::max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); + // if((*it)->GetMeasurementStartedFlag()) + // anycaught = true; + // } + for (const auto& it : dataProcessor) { + maxIndexCaught = std::max(maxIndexCaught, it->GetProcessedMeasurementIndex()); + if(it->GetMeasurementStartedFlag()) anycaught = true; } //to create virtual file & set files/acquisition to 0 (only hdf5 at the moment) @@ -1096,9 +1093,12 @@ void slsReceiverImplementation::stopReceiver(){ running = true; while(running) { running = false; - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) - if ((*it)->IsRunning()) - running = true; + // for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) + // if ((*it)->IsRunning()) + // running = true; + for (const auto& it : dataStreamer) + if (it->IsRunning()) + running = true; usleep(5000); } @@ -1176,8 +1176,10 @@ void slsReceiverImplementation::startReadout(){ void slsReceiverImplementation::shutDownUDPSockets() { - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) - (*it)->ShutDownUDPSocket(); + // for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) + // (*it)->ShutDownUDPSocket(); + for (const auto& it : listener) + it->ShutDownUDPSocket(); } @@ -1185,10 +1187,16 @@ void slsReceiverImplementation::shutDownUDPSockets() { void slsReceiverImplementation::closeFiles() { uint64_t maxIndexCaught = 0; bool anycaught = false; - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) { - (*it)->CloseFiles(); - maxIndexCaught = std::max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); - if((*it)->GetMeasurementStartedFlag()) + // for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) { + // (*it)->CloseFiles(); + // maxIndexCaught = std::max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); + // if((*it)->GetMeasurementStartedFlag()) + // anycaught = true; + // } + for (const auto& it : dataProcessor) { + it->CloseFiles(); + maxIndexCaught = std::max(maxIndexCaught, it->GetProcessedMeasurementIndex()); + if(it->GetMeasurementStartedFlag()) anycaught = true; } //to create virtual file & set files/acquisition to 0 (only hdf5 at the moment) @@ -1198,11 +1206,14 @@ void slsReceiverImplementation::closeFiles() { int slsReceiverImplementation::restreamStop() { bool ret = OK; - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) { - if ((*it)->RestreamStop() == FAIL) + // for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) { + // if ((*it)->RestreamStop() == FAIL) + // ret = FAIL; + // } + for (const auto& it : dataStreamer){ + if (it->RestreamStop() == FAIL) ret = FAIL; } - // if fail, prints in datastreamer if (ret == OK) { FILE_LOG(logINFO) << "Restreaming Dummy Header via ZMQ successful"; @@ -1266,8 +1277,14 @@ void slsReceiverImplementation::SetLocalNetworkParameters() { void slsReceiverImplementation::SetThreadPriorities() { - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it){ - if ((*it)->SetThreadPriority(LISTENER_PRIORITY) == FAIL) { + // for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it){ + // if ((*it)->SetThreadPriority(LISTENER_PRIORITY) == FAIL) { + // FILE_LOG(logWARNING) << "Could not prioritize listener threads. (No Root Privileges?)"; + // return; + // } + // } + for (const auto& it : listener){ + if (it->SetThreadPriority(LISTENER_PRIORITY) == FAIL) { FILE_LOG(logWARNING) << "Could not prioritize listener threads. (No Root Privileges?)"; return; } @@ -1283,29 +1300,27 @@ void slsReceiverImplementation::SetThreadPriorities() { int slsReceiverImplementation::SetupFifoStructure() { numberofJobs = 1; - - for (std::vector::const_iterator it = fifo.begin(); it != fifo.end(); ++it) - delete(*it); fifo.clear(); for ( int i = 0; i < numThreads; ++i ) { //create fifo structure try { - Fifo* f = new Fifo (i, + // Fifo* f = new Fifo (i, + // (generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize), + // fifoDepth); + // fifo.push_back(f); + fifo.push_back(sls::make_unique(i, (generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize), - fifoDepth); - fifo.push_back(f); + fifoDepth)); } catch (...) { cprintf(RED,"Error: Could not allocate memory for fifo structure of index %d\n", i); - for (std::vector::const_iterator it = fifo.begin(); it != fifo.end(); ++it) - delete(*it); fifo.clear(); return FAIL; } //set the listener & dataprocessor threads to point to the right fifo - if(listener.size())listener[i]->SetFifo(fifo[i]); - if(dataProcessor.size())dataProcessor[i]->SetFifo(fifo[i]); - if(dataStreamer.size())dataStreamer[i]->SetFifo(fifo[i]); + if(listener.size())listener[i]->SetFifo(fifo[i].get()); + if(dataProcessor.size())dataProcessor[i]->SetFifo(fifo[i].get()); + if(dataStreamer.size())dataStreamer[i]->SetFifo(fifo[i].get()); } FILE_LOG(logINFO) << "Memory Allocated Per Fifo: " << ( ((generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize)) * fifoDepth) << " bytes" ; @@ -1316,16 +1331,18 @@ int slsReceiverImplementation::SetupFifoStructure() { void slsReceiverImplementation::ResetParametersforNewMeasurement() { - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) - (*it)->ResetParametersforNewMeasurement(); - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) - (*it)->ResetParametersforNewMeasurement(); + for (const auto& it : listener) + it->ResetParametersforNewMeasurement(); + for (const auto& it : dataProcessor) + it->ResetParametersforNewMeasurement(); if (dataStreamEnable) { char fnametostream[MAX_STR_LENGTH]; snprintf(fnametostream, MAX_STR_LENGTH, "%s/%s", filePath, fileName); - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) - (*it)->ResetParametersforNewMeasurement(fnametostream); + // for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) + // (*it)->ResetParametersforNewMeasurement(fnametostream); + for (const auto& it : dataStreamer) + it->ResetParametersforNewMeasurement(fnametostream); } } @@ -1368,16 +1385,16 @@ int slsReceiverImplementation::SetupWriter() { void slsReceiverImplementation::StartRunning() { //set running mask and post semaphore to start the inner loop in execution thread - for (std::vector::const_iterator it = listener.begin(); it != listener.end(); ++it) { - (*it)->StartRunning(); - (*it)->Continue(); + for (const auto& it : listener){ + it->StartRunning(); + it->Continue(); } - for (std::vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it){ - (*it)->StartRunning(); - (*it)->Continue(); + for (const auto& it : dataProcessor){ + it->StartRunning(); + it->Continue(); } - for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it){ - (*it)->StartRunning(); - (*it)->Continue(); + for (const auto& it : dataStreamer){ + it->StartRunning(); + it->Continue(); } } diff --git a/slsSupportLib/include/container_utils.h b/slsSupportLib/include/container_utils.h index 66a5d3911..5bdd50046 100644 --- a/slsSupportLib/include/container_utils.h +++ b/slsSupportLib/include/container_utils.h @@ -99,6 +99,7 @@ T minusOneIfDifferent(const std::vector& container) } //TODO!(Erik)Should try to move away from using this in the slsDetectorPackage +inline std::string concatenateIfDifferent(std::vector container) { if (allEqual(container)) { @@ -110,7 +111,7 @@ std::string concatenateIfDifferent(std::vector container) return result; } } - +inline std::vector split(const std::string& strToSplit, char delimeter) { std::stringstream ss(strToSplit); @@ -122,6 +123,7 @@ std::vector split(const std::string& strToSplit, char delimeter) return splittedStrings; } +inline std::string concatenateNonEmptyStrings(const std::vector& vec){ std::string ret; for (const auto& s : vec)