made parallel status start, receiver start and receiver stop

This commit is contained in:
Dhanya Maliakal 2016-07-06 16:53:05 +02:00
parent b06a1e5a3c
commit 3019f4e6ff
2 changed files with 209 additions and 143 deletions

View File

@ -1145,7 +1145,7 @@ int multiSlsDetector::setThresholdEnergy(int e_eV, int pos, detectorSettings ise
slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int pos) { slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int pos) {
int i, posmin, posmax; int i, posmin, posmax;
int ret1=-1, ret=-100; int ret=-100;
if (pos<0) { if (pos<0) {
posmin=0; posmin=0;
@ -1173,13 +1173,14 @@ slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int pos) {
for(int idet=posmin; idet<posmax; idet++){ for(int idet=posmin; idet<posmax; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=GET_SETTINGS;
delete iret[idet]; delete iret[idet];
} }else ret=GET_SETTINGS;
if (ret==-100) if(detectors[idet]->getErrorMask())
ret=ret1; setErrorMask(getErrorMask()|(1<<idet));
else if (ret!=ret1)
ret=GET_SETTINGS;
} }
} }
} }
@ -1191,7 +1192,7 @@ slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int pos) {
slsDetectorDefs::detectorSettings multiSlsDetector::setSettings(detectorSettings isettings, int pos) { slsDetectorDefs::detectorSettings multiSlsDetector::setSettings(detectorSettings isettings, int pos) {
int posmin, posmax; int posmin, posmax;
int ret1=-1, ret=-100; int ret=-100;
if (pos<0) { if (pos<0) {
posmin=0; posmin=0;
@ -1219,21 +1220,20 @@ slsDetectorDefs::detectorSettings multiSlsDetector::setSettings(detectorSettings
for(int idet=posmin; idet<posmax; idet++){ for(int idet=posmin; idet<posmax; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=GET_SETTINGS;
delete iret[idet]; delete iret[idet];
} }else ret=GET_SETTINGS;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=GET_SETTINGS;
} }
} }
} }
thisMultiDetector->currentSettings=(detectorSettings)ret1; thisMultiDetector->currentSettings=(detectorSettings)ret;
return (detectorSettings)ret1; return (detectorSettings)ret;
} }
@ -1581,36 +1581,51 @@ int* multiSlsDetector::startAndReadAll(){
int multiSlsDetector::startAndReadAllNoWait(){ int multiSlsDetector::startAndReadAllNoWait(){
int i=0;
int ret=OK;
int posmin=0, posmax=thisMultiDetector->numberOfDetectors;
if(!threadpool){
cout << "Error in creating threadpool. Exiting" << endl;
return FAIL;
}else{
int* iret[posmax-posmin];
for(int idet=posmin; idet<posmax; idet++){
if((idet!=thisMultiDetector->masterPosition) && (detectors[idet])){
iret[idet]= new int(OK);
Task* task = new Task(new func0_t<int,slsDetector,int>(&slsDetector::startAndReadAllNoWait,
detectors[idet],iret[idet]));
threadpool->add_task(task);
}
}
threadpool->wait_for_tasks_to_complete();
for(int idet=posmin; idet<posmax; idet++){
if((idet!=thisMultiDetector->masterPosition) && (detectors[idet])){
if(iret[idet] != NULL){
if(*iret[idet] != OK)
ret = FAIL;
delete iret[idet];
}else ret = FAIL;
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
}
}
}
int i=0; //master
int ret=OK, ret1=OK; int ret1=OK;
i=thisMultiDetector->masterPosition;
for (i=0; i<thisMultiDetector->numberOfDetectors; i++) { if (thisMultiDetector->masterPosition>=0) {
if (i!=thisMultiDetector->masterPosition) if (detectors[i]) {
if (detectors[i]) { ret1=detectors[i]->startAndReadAllNoWait();
ret=detectors[i]->startAndReadAllNoWait(); if(detectors[i]->getErrorMask())
if(detectors[i]->getErrorMask()) setErrorMask(getErrorMask()|(1<<i));
setErrorMask(getErrorMask()|(1<<i)); if (ret1!=OK)
if (ret!=OK) ret=FAIL;
ret1=FAIL; }
} }
}
i=thisMultiDetector->masterPosition;
if (thisMultiDetector->masterPosition>=0) {
if (detectors[i]) {
ret=detectors[i]->startAndReadAllNoWait();
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
if (ret!=OK)
ret1=FAIL;
}
}
return ret1;
return ret;
} }
@ -3842,8 +3857,7 @@ int multiSlsDetector::digitalTest(digitalTestMode mode, int imod) {
int multiSlsDetector::executeTrimming(trimMode mode, int par1, int par2, int imod) { int multiSlsDetector::executeTrimming(trimMode mode, int par1, int par2, int imod) {
int id, im, ret1=-1,ret=100; int id, im, ret=100;
if (decodeNMod(imod, id, im)>=0) { if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) { if (detectors[id]) {
@ -3872,20 +3886,20 @@ int multiSlsDetector::executeTrimming(trimMode mode, int par1, int par2, int imo
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
} }else ret=-1;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
} }
} }
} }
return ret; return ret;
} }
return -1; return -1;
} }
@ -3894,7 +3908,7 @@ int multiSlsDetector::executeTrimming(trimMode mode, int par1, int par2, int imo
int multiSlsDetector::loadSettingsFile(string fname, int imod) { int multiSlsDetector::loadSettingsFile(string fname, int imod) {
int id, im, ret=-100,ret1=-1; int id, im, ret=-100;
if (decodeNMod(imod, id, im)>=0) { if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) { if (detectors[id]) {
@ -3905,7 +3919,6 @@ int multiSlsDetector::loadSettingsFile(string fname, int imod) {
} }
} else if (imod<0) { } else if (imod<0) {
if(!threadpool){ if(!threadpool){
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
return -1; return -1;
@ -3924,20 +3937,20 @@ int multiSlsDetector::loadSettingsFile(string fname, int imod) {
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
} }else ret=-1;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
} }
} }
} }
return ret; return ret;
} }
return -1; return -1;
@ -3972,11 +3985,11 @@ int multiSlsDetector::saveSettingsFile(string fname, int imod) {
int multiSlsDetector::setAllTrimbits(int val, int imod){ int multiSlsDetector::setAllTrimbits(int val, int imod){
int ret=-100, ret1=-1,id, im; int ret=-100,id, im;
if (decodeNMod(imod, id, im)>=0) { if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) { if (detectors[id]) {
ret1=detectors[id]->setAllTrimbits(val,im); ret=detectors[id]->setAllTrimbits(val,im);
if(detectors[id]->getErrorMask()) if(detectors[id]->getErrorMask())
setErrorMask(getErrorMask()|(1<<id)); setErrorMask(getErrorMask()|(1<<id));
} }
@ -4001,15 +4014,14 @@ int multiSlsDetector::setAllTrimbits(int val, int imod){
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
} }else ret=-1;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
} }
} }
} }
@ -4662,58 +4674,99 @@ int multiSlsDetector::setFileIndex(int i) {
int multiSlsDetector::startReceiver(){ int multiSlsDetector::startReceiver(){
int i=0; int i=0;
int ret=OK, ret1=OK; int ret=OK;
for (i=0; i<thisMultiDetector->numberOfDetectors; i++) { int posmin=0, posmax=thisMultiDetector->numberOfDetectors;
if (i!=thisMultiDetector->masterPosition)
if (detectors[i]) { if(!threadpool){
ret=detectors[i]->startReceiver(); cout << "Error in creating threadpool. Exiting" << endl;
if(detectors[i]->getErrorMask()) return FAIL;
setErrorMask(getErrorMask()|(1<<i)); }else{
if (ret!=OK) int* iret[posmax-posmin];
ret1=FAIL; for(int idet=posmin; idet<posmax; idet++){
} if((idet!=thisMultiDetector->masterPosition) && (detectors[idet])){
} iret[idet]= new int(OK);
i=thisMultiDetector->masterPosition; Task* task = new Task(new func0_t<int,slsDetector,int>(&slsDetector::startReceiver,
if (thisMultiDetector->masterPosition>=0) { detectors[idet],iret[idet]));
if (detectors[i]) { threadpool->add_task(task);
ret=detectors[i]->startReceiver(); }
if(detectors[i]->getErrorMask()) }
setErrorMask(getErrorMask()|(1<<i)); threadpool->wait_for_tasks_to_complete();
if (ret!=OK) for(int idet=posmin; idet<posmax; idet++){
ret1=FAIL; if((idet!=thisMultiDetector->masterPosition) && (detectors[idet])){
} if(iret[idet] != NULL){
} if(*iret[idet] != OK)
return ret1; ret = FAIL;
delete iret[idet];
}else ret = FAIL;
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
}
}
}
//master
int ret1=OK;
i=thisMultiDetector->masterPosition;
if (thisMultiDetector->masterPosition>=0) {
if (detectors[i]) {
ret1=detectors[i]->startReceiver();
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
if (ret1!=OK)
ret=FAIL;
}
}
return ret;
} }
int multiSlsDetector::stopReceiver(){ int multiSlsDetector::stopReceiver(){
int i=0; int i=0;
int ret=OK, ret1=OK; int ret=OK,ret1=OK;
int posmin=0, posmax=thisMultiDetector->numberOfDetectors;
i=thisMultiDetector->masterPosition; i=thisMultiDetector->masterPosition;
if (thisMultiDetector->masterPosition>=0) { if (thisMultiDetector->masterPosition>=0) {
if (detectors[i]) { if (detectors[i]) {
ret=detectors[i]->stopReceiver(); ret1=detectors[i]->stopReceiver();
if(detectors[i]->getErrorMask()) if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i)); setErrorMask(getErrorMask()|(1<<i));
if (ret!=OK) if (ret1!=OK)
ret1=FAIL; ret=FAIL;
} }
} }
for (i=0; i<thisMultiDetector->numberOfDetectors; i++) {
if (detectors[i]) { if(!threadpool){
ret=detectors[i]->stopReceiver(); cout << "Error in creating threadpool. Exiting" << endl;
if(detectors[i]->getErrorMask()) return FAIL;
setErrorMask(getErrorMask()|(1<<i)); }else{
if (ret!=OK) int* iret[posmax-posmin];
ret1=FAIL; for(int idet=posmin; idet<posmax; idet++){
} if((idet!=thisMultiDetector->masterPosition) && (detectors[idet])){
} iret[idet]= new int(OK);
return ret1; Task* task = new Task(new func0_t<int,slsDetector,int>(&slsDetector::stopReceiver,
detectors[idet],iret[idet]));
threadpool->add_task(task);
}
}
threadpool->wait_for_tasks_to_complete();
for(int idet=posmin; idet<posmax; idet++){
if((idet!=thisMultiDetector->masterPosition) && (detectors[idet])){
if(iret[idet] != NULL){
if(*iret[idet] != OK)
ret = FAIL;
delete iret[idet];
}else ret = FAIL;
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
}
}
}
return ret;
} }
@ -5338,7 +5391,7 @@ int multiSlsDetector::setCTBPatWaitTime(int level, uint64_t t) {
int multiSlsDetector::pulsePixel(int n,int x,int y) { int multiSlsDetector::pulsePixel(int n,int x,int y) {
int ret=-100,ret1=-1; int ret=-100;
if(!threadpool){ if(!threadpool){
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
@ -5358,15 +5411,14 @@ int multiSlsDetector::pulsePixel(int n,int x,int y) {
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
} }else ret=-1;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
} }
} }
} }
@ -5375,7 +5427,7 @@ int multiSlsDetector::pulsePixel(int n,int x,int y) {
int multiSlsDetector::pulsePixelNMove(int n,int x,int y) { int multiSlsDetector::pulsePixelNMove(int n,int x,int y) {
int ret=-100,ret1=-1; int ret=-100;
if(!threadpool){ if(!threadpool){
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
@ -5395,15 +5447,14 @@ int multiSlsDetector::pulsePixelNMove(int n,int x,int y) {
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
} }else ret=-1;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
} }
} }
} }
@ -5412,7 +5463,7 @@ int multiSlsDetector::pulsePixelNMove(int n,int x,int y) {
int multiSlsDetector::pulseChip(int n) { int multiSlsDetector::pulseChip(int n) {
int ret=-100,ret1=-1; int ret=-100;
if(!threadpool){ if(!threadpool){
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
@ -5432,15 +5483,14 @@ int multiSlsDetector::pulseChip(int n) {
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
ret1 = *iret[idet]; if (ret==-100)
ret=*iret[idet];
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
} }else ret=-1;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
} }
} }
} }

View File

@ -16,6 +16,18 @@ using namespace std;
class slsDetector; class slsDetector;
template<typename _Ret, typename _Class, typename _Store>
class func0_t{
public:
func0_t(_Ret (_Class::*fn)(),_Class* ptr, _Store* sto):
m_fn(fn),m_ptr(ptr),m_store(sto){}
~func0_t() {}
void operator()() const {*m_store = ((m_ptr->*m_fn)());}
private:
_Class* m_ptr;
_Ret (_Class::*m_fn)();
_Store* m_store;
};
template<typename _Ret, typename _Class,typename _Arg1, typename _Store> template<typename _Ret, typename _Class,typename _Arg1, typename _Store>
class func1_t{ class func1_t{
@ -82,24 +94,25 @@ private:
class Task: public virtual slsDetectorDefs{ class Task: public virtual slsDetectorDefs{
public: public:
/* Return: int, Param: int */ /* Return: int, Param: int */
Task(func1_t <int,slsDetector,int,int>* t): m1(t),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0){}; Task(func1_t <int,slsDetector,int,int>* t): m1(t),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
/* Return: int, Param: string,int */ /* Return: int, Param: string,int */
Task(func2_t <int,slsDetector,string,int,int>* t): m1(0),m2(t),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0){}; Task(func2_t <int,slsDetector,string,int,int>* t): m1(0),m2(t),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
/* Return: string, Param: string */ /* Return: string, Param: string */
Task(func1_t <string,slsDetector,string,string>* t): m1(0),m2(0),m3(t),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0){}; Task(func1_t <string,slsDetector,string,string>* t): m1(0),m2(0),m3(t),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
/* Return: char*, Param: char* */ /* Return: char*, Param: char* */
Task(func1_t <char*,slsDetector,char*,string>* t): m1(0),m2(0),m3(0),m4(t),m5(0),m6(0),m7(0),m8(0),m9(0){}; Task(func1_t <char*,slsDetector,char*,string>* t): m1(0),m2(0),m3(0),m4(t),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
/* Return: detectorSettings, Param: int */ /* Return: detectorSettings, Param: int */
Task(func1_t <detectorSettings,slsDetector,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(t),m6(0),m7(0),m8(0),m9(0){}; Task(func1_t <detectorSettings,slsDetector,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(t),m6(0),m7(0),m8(0),m9(0),m10(0){};
/* Return: detectorSettings, Param: detectorSettings,int */ /* Return: detectorSettings, Param: detectorSettings,int */
Task(func2_t <detectorSettings,slsDetector,detectorSettings,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(t),m7(0),m8(0),m9(0){}; Task(func2_t <detectorSettings,slsDetector,detectorSettings,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(t),m7(0),m8(0),m9(0),m10(0){};
/* Return: int, Param: int,int */ /* Return: int, Param: int,int */
Task(func2_t <int,slsDetector,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(t),m8(0),m9(0){}; Task(func2_t <int,slsDetector,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(t),m8(0),m9(0),m10(0){};
/* Return: int, Param: int,int */ /* Return: int, Param: int,int */
Task(func3_t <int,slsDetector,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(t),m9(0){}; Task(func3_t <int,slsDetector,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(t),m9(0),m10(0){};
/* Return: int, Param: trimMode,int,int,int */ /* Return: int, Param: trimMode,int,int,int */
Task(func4_t <int,slsDetector,trimMode,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(t){}; Task(func4_t <int,slsDetector,trimMode,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(t),m10(0){};
/* Return: int, Param: int */
Task(func0_t <int,slsDetector,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(t){};
~Task(){} ~Task(){}
@ -113,6 +126,7 @@ public:
else if(m7) (*m7)(); else if(m7) (*m7)();
else if(m8) (*m8)(); else if(m8) (*m8)();
else if(m9) (*m9)(); else if(m9) (*m9)();
else if(m10) (*m10)();
} }
private: private:
@ -134,6 +148,8 @@ private:
func3_t <int,slsDetector,int,int,int,int>* m8; func3_t <int,slsDetector,int,int,int,int>* m8;
/* Return: int, Param: trimMode,int,int,int */ /* Return: int, Param: trimMode,int,int,int */
func4_t <int,slsDetector,trimMode,int,int,int,int>* m9; func4_t <int,slsDetector,trimMode,int,int,int,int>* m9;
/* Return: int, Param: int */
func0_t <int,slsDetector,int>* m10;
}; };