00001 00002 00003 00004 00005 00006 00007 00008 #ifndef CONDUITFRIENDS_H 00009 #define CONDUITFRIENDS_H 00010 00011 #include <cstdio> 00012 #include <conduit.h> 00013 #include <statusCodes.h> 00014 00015 using namespace std; 00016 00017 00021 struct change_alarmStatus 00022 { 00023 change_alarmStatus (const dbr_short_t & new_alarmStatus): new_alarmStatus(new_alarmStatus){} 00024 00025 void operator() (Conduit& c) { 00027 c.alarmStatus = new_alarmStatus; 00029 } 00030 00031 private: 00032 dbr_short_t new_alarmStatus; 00033 }; 00034 struct change_alarmSeverity 00035 { 00036 change_alarmSeverity (const dbr_short_t & new_alarmSeverity): new_alarmSeverity(new_alarmSeverity){} 00037 00038 void operator() (Conduit& c) { 00040 c.alarmSeverity = new_alarmSeverity; 00042 } 00043 00044 private: 00045 dbr_short_t new_alarmSeverity; 00046 }; 00047 struct change_epicsTimeStamp 00048 { 00049 change_epicsTimeStamp (const epicsTimeStamp & new_epicsTimeStamp): new_epicsTimeStamp(new_epicsTimeStamp){} 00050 00051 void operator() (Conduit& c) { 00053 c.ts = new_epicsTimeStamp; 00054 //Do this to prevent overflow error in epicsTime time(ts) routines! 00055 //This bad number can occur in timeouts 00056 if(c.ts.nsec>1000000000) {c.ts.nsec=0;} 00058 } 00059 00060 private: 00061 epicsTimeStamp new_epicsTimeStamp; 00062 }; 00063 00064 00068 struct change_accessRead 00069 { 00070 change_accessRead (const unsigned int & new_accessRead): new_accessRead(new_accessRead){} 00071 00072 void operator() (Conduit& c) { 00074 c.channelRegalia.accessRead = new_accessRead; 00076 } 00077 00078 private: 00079 unsigned int new_accessRead; 00080 }; 00081 00082 00086 struct change_accessWrite 00087 { 00088 change_accessWrite (const unsigned int & new_accessWrite): new_accessWrite(new_accessWrite){} 00089 00090 void operator() (Conduit& c) { 00092 c.channelRegalia.accessWrite = new_accessWrite; 00094 } 00095 00096 private: 00097 unsigned int new_accessWrite; 00098 }; 00099 00100 00105 struct change_accessRightsHandlerArgs 00106 { 00107 change_accessRightsHandlerArgs (const struct access_rights_handler_args & new_accessRightsHandlerArgs): 00108 new_accessRightsHandlerArgs(new_accessRightsHandlerArgs){} 00109 00110 void operator() (Conduit& c) { 00111 00113 c.channelRegalia.accessRead = new_accessRightsHandlerArgs.ar.read_access; 00114 c.channelRegalia.accessWrite= new_accessRightsHandlerArgs.ar.write_access; 00116 } 00117 00118 private: 00119 access_rights_handler_args new_accessRightsHandlerArgs; 00120 }; 00121 00122 00123 00127 struct change_channelDeviceAttribute 00128 { 00129 change_channelDeviceAttribute (const ChannelDeviceAttribute & new_channelDeviceAttribute): 00130 new_channelDeviceAttribute(new_channelDeviceAttribute){} 00131 00132 void operator() (Conduit& c) {c.channelDeviceAttribute = new_channelDeviceAttribute;} 00133 00134 private: 00135 ChannelDeviceAttribute new_channelDeviceAttribute; 00136 }; 00137 00138 00139 00143 struct change_channelID 00144 { 00145 change_channelID (const chid & new_channelID): new_channelID(new_channelID){} 00146 00147 void operator() (Conduit& c) { 00148 c.channelRegalia.channelID=new_channelID; 00149 c.channelID=new_channelID; 00150 } 00151 00152 private: 00153 chid new_channelID; 00154 }; 00155 00156 00157 00161 struct change_channelGetActionWhenMonitorPolicy 00162 { 00163 change_channelGetActionWhenMonitorPolicy ( 00164 const ChannelGetActionWhenMonitorPolicy & new_channelGetActionWhenMonitorPolicy): 00165 new_channelGetActionWhenMonitorPolicy(new_channelGetActionWhenMonitorPolicy){} 00166 00167 void operator() (Conduit& c) { 00168 // 00169 c.channelGetActionWhenMonitorPolicy = new_channelGetActionWhenMonitorPolicy; 00170 } 00171 private: 00172 ChannelGetActionWhenMonitorPolicy new_channelGetActionWhenMonitorPolicy; 00173 }; 00174 00175 00179 struct change_channelGetCacheWaitPolicy 00180 { 00181 change_channelGetCacheWaitPolicy ( 00182 const ChannelGetCacheWaitPolicy & new_channelGetCacheWaitPolicy): 00183 new_channelGetCacheWaitPolicy(new_channelGetCacheWaitPolicy){} 00184 00185 void operator() (Conduit& c) { 00186 // 00187 c.channelGetCacheWaitPolicy = new_channelGetCacheWaitPolicy; 00188 } 00189 private: 00190 ChannelGetCacheWaitPolicy new_channelGetCacheWaitPolicy; 00191 }; 00192 00193 00194 00195 00196 00200 struct change_hasNewData 00201 { 00202 change_hasNewData (const bool & new_hasNewData): new_hasNewData(new_hasNewData){} 00203 00204 void operator() (Conduit& c) {c.hasNewData = new_hasNewData;} 00205 00206 private: 00207 bool new_hasNewData; 00208 }; 00209 00210 00211 00215 struct change_channelRegalia 00216 { 00217 change_channelRegalia (const ChannelRegalia & new_channelRegalia): new_channelRegalia(new_channelRegalia){} 00218 00219 void operator() (Conduit& c) {c.channelRegalia = new_channelRegalia;} 00220 00221 private: 00222 ChannelRegalia new_channelRegalia; 00223 }; 00224 00225 00229 struct change_channelRequestDataTypePolicy 00230 { 00231 change_channelRequestDataTypePolicy ( 00232 const ChannelRequestDataTypePolicy & new_channelRequestDataTypePolicy): 00233 new_channelRequestDataTypePolicy(new_channelRequestDataTypePolicy){} 00234 00235 void operator() (Conduit& c) { 00236 // 00237 c.channelRequestDataTypePolicy = new_channelRequestDataTypePolicy; 00238 } 00239 private: 00240 ChannelRequestDataTypePolicy new_channelRequestDataTypePolicy; 00241 }; 00242 00243 00244 00248 struct change_channelRequestMetaCtrl 00249 { 00250 change_channelRequestMetaCtrl (const ChannelRequestMetaData & new_channelData): 00251 new_channelData(new_channelData){} 00252 00253 void operator() (Conduit& c) { 00254 // 00255 c.channelRequestMetaCtrl = new_channelData; 00256 } 00257 private: 00258 ChannelRequestMetaData new_channelData; 00259 }; 00260 00261 00262 00266 struct change_channelRequestMetaCtrlClient 00267 { 00268 change_channelRequestMetaCtrlClient (const ChannelRequestMetaDataClient & new_channelData): 00269 new_channelData(new_channelData){} 00270 00271 void operator() (Conduit& c) { 00272 // 00273 c.channelRequestMetaCtrlClient = new_channelData; 00274 00275 } 00276 private: 00277 ChannelRequestMetaDataClient new_channelData; 00278 }; 00279 00280 00281 00282 00283 00287 struct change_channelRequestMetaData 00288 { 00289 change_channelRequestMetaData (const ChannelRequestMetaData & new_channelData): 00290 new_channelData(new_channelData){} 00291 00292 void operator() (Conduit& c) { 00293 // 00294 c.channelRequestMetaData = new_channelData; 00295 } 00296 private: 00297 ChannelRequestMetaData new_channelData; 00298 }; 00299 00300 00301 00305 struct change_channelRequestMetaDataClient 00306 { 00307 change_channelRequestMetaDataClient (const ChannelRequestMetaDataClient & new_channelData): 00308 new_channelData(new_channelData){} 00309 00310 void operator() (Conduit& c) { 00311 // 00312 c.channelRequestMetaDataClient = new_channelData; 00313 } 00314 private: 00315 ChannelRequestMetaDataClient new_channelData; 00316 }; 00317 00318 00319 00323 struct change_channelRequestMetaPrimitive 00324 { 00325 change_channelRequestMetaPrimitive (const ChannelRequestMetaData & new_channelData): 00326 new_channelData(new_channelData){} 00327 00328 void operator() (Conduit& c) { 00329 // 00330 c.channelRequestMetaPrimitive = new_channelData; 00331 } 00332 private: 00333 ChannelRequestMetaData new_channelData; 00334 }; 00335 00336 00340 struct change_channelRequestPolicyGet 00341 { 00342 change_channelRequestPolicyGet (const ChannelRequestPolicy & new_ChannelRequestPolicy): 00343 new_ChannelRequestPolicy(new_ChannelRequestPolicy){} 00344 00345 void operator() (Conduit& c) { 00346 //This does a deep copy! 00347 c.channelRequestPolicyGet = new_ChannelRequestPolicy; 00348 } 00349 private: 00350 ChannelRequestPolicy new_ChannelRequestPolicy; 00351 }; 00352 00353 00357 struct change_channelRequestPolicyGetCtrl 00358 { 00359 change_channelRequestPolicyGetCtrl (const ChannelRequestPolicy & new_ChannelRequestPolicy): 00360 new_ChannelRequestPolicy(new_ChannelRequestPolicy){} 00361 00362 void operator() (Conduit& c) { 00363 //This does a deep copy! 00364 c.channelRequestPolicyGetCtrl = new_ChannelRequestPolicy; 00365 } 00366 private: 00367 ChannelRequestPolicy new_ChannelRequestPolicy; 00368 }; 00369 00370 00371 00375 struct change_channelRequestPolicyPut 00376 { 00377 change_channelRequestPolicyPut (const ChannelRequestPolicy & new_ChannelRequestPolicy): 00378 new_ChannelRequestPolicy(new_ChannelRequestPolicy){} 00379 00380 void operator() (Conduit& c) { 00381 //This does a deep copy! 00382 c.channelRequestPolicyPut = new_ChannelRequestPolicy; 00383 } 00384 private: 00385 ChannelRequestPolicy new_ChannelRequestPolicy; 00386 }; 00387 00388 00389 00390 00394 struct change_channelRequestStatusGet 00395 { 00396 change_channelRequestStatusGet (const ChannelRequestStatus & new_ChannelRequestStatus): 00397 new_ChannelRequestStatus(new_ChannelRequestStatus){} 00398 00399 void operator() (Conduit& c) { 00400 //This does a deep copy! 00401 00402 c.channelRequestStatusGet = new_ChannelRequestStatus; 00403 } 00404 00405 private: 00406 ChannelRequestStatus new_ChannelRequestStatus; 00407 }; 00408 00409 00410 00414 struct change_channelRequestStatusGetCtrl 00415 { 00416 change_channelRequestStatusGetCtrl (const ChannelRequestStatus & new_ChannelRequestStatus): 00417 new_ChannelRequestStatus(new_ChannelRequestStatus){} 00418 00419 void operator() (Conduit& c) { 00420 //This does a deep copy! 00421 c.channelRequestStatusGetCtrl = new_ChannelRequestStatus; 00422 } 00423 private: 00424 ChannelRequestStatus new_ChannelRequestStatus; 00425 }; 00426 00427 00431 struct change_channelRequestStatusGetSTSACK 00432 { 00433 change_channelRequestStatusGetSTSACK (const ChannelRequestStatus & new_ChannelRequestStatus): 00434 new_ChannelRequestStatus(new_ChannelRequestStatus){} 00435 00436 void operator() (Conduit& c) { 00437 //This does a deep copy! 00438 c.channelRequestStatusGetSTSACK = new_ChannelRequestStatus; 00439 } 00440 private: 00441 ChannelRequestStatus new_ChannelRequestStatus; 00442 }; 00443 00444 00445 00449 struct change_channelRequestStatusGetClassName 00450 { 00451 change_channelRequestStatusGetClassName (const ChannelRequestStatus & new_ChannelRequestStatus): 00452 new_ChannelRequestStatus(new_ChannelRequestStatus){} 00453 00454 void operator() (Conduit& c) { 00455 //This does a deep copy! 00456 c.channelRequestStatusGetClassName = new_ChannelRequestStatus; 00457 } 00458 private: 00459 ChannelRequestStatus new_ChannelRequestStatus; 00460 }; 00461 00462 00466 struct change_channelRequestStatusPut 00467 { 00468 change_channelRequestStatusPut (const ChannelRequestStatus & new_ChannelRequestStatus): 00469 new_ChannelRequestStatus(new_ChannelRequestStatus){} 00470 00471 void operator() (Conduit& c) { 00472 //This does a deep copy! 00473 c.channelRequestStatusPut = new_ChannelRequestStatus; 00474 } 00475 private: 00476 ChannelRequestStatus new_ChannelRequestStatus; 00477 }; 00478 00479 00480 00481 00485 struct change_channelTimeoutPolicyGet 00486 { 00487 change_channelTimeoutPolicyGet (const ChannelTimeoutPolicy & new_channelTimeoutPolicy): 00488 new_channelTimeoutPolicy(new_channelTimeoutPolicy){} 00489 00490 void operator() (Conduit& c) { 00491 //This does a deep copy! 00492 c.channelTimeoutPolicyGet = new_channelTimeoutPolicy; 00493 } 00494 private: 00495 ChannelTimeoutPolicy new_channelTimeoutPolicy; 00496 }; 00497 00498 00502 struct change_channelTimeoutPolicyPut 00503 { 00504 change_channelTimeoutPolicyPut (const ChannelTimeoutPolicy & new_channelTimeoutPolicy): 00505 new_channelTimeoutPolicy(new_channelTimeoutPolicy){} 00506 00507 void operator() (Conduit& c) { 00508 //This does a deep copy! 00509 c.channelTimeoutPolicyPut = new_channelTimeoutPolicy; 00510 } 00511 private: 00512 ChannelTimeoutPolicy new_channelTimeoutPolicy; 00513 }; 00514 00515 00516 00521 struct change_monitorAction 00522 { 00523 change_monitorAction (string &new_monitorAction): new_monitorAction(new_monitorAction){} 00524 00525 void operator() (Conduit& c) { 00526 c.monitorAction.push_back(new_monitorAction); 00527 } 00528 private: 00529 string new_monitorAction; 00530 }; 00531 00532 00533 00538 struct change_monitorActionClear 00539 { 00540 change_monitorActionClear (){} 00541 00542 void operator() (Conduit& c) { 00543 c.monitorAction.clear(); 00544 } 00545 00546 }; 00547 00548 00549 00554 struct change_monitorActionErase 00555 { 00556 change_monitorActionErase (string &new_monitorAction): new_monitorAction(new_monitorAction){} 00557 00558 void operator() (Conduit& c) { 00559 bool maFound=false; 00560 vector<string>::iterator it; 00561 00562 00563 for (it = c.monitorAction.begin(); it != c.monitorAction.end(); ) { 00564 if( (*it)==new_monitorAction) { 00565 it = c.monitorAction.erase(it); 00566 maFound=true; 00567 } 00568 else { 00569 ++it; 00570 } 00571 } 00572 00573 if (!maFound) { 00574 cout << "monitorAction " << new_monitorAction << " NOT FOUND! " << endl; 00575 cout << "Could not delete entry!" << endl; 00576 } 00577 00578 } 00579 private: 00580 string new_monitorAction; 00581 }; 00582 00583 00588 struct change_monitorPolicyErase 00589 { 00590 change_monitorPolicyErase (unsigned int & new_evid): new_evid(new_evid){} 00591 00592 void operator() (Conduit& c) { 00593 00594 bool evidFound=false; 00595 vector<MonitorPolicy>::iterator it; 00596 //Iterate 00597 for (it = c.mpV.begin(); it != c.mpV.end();) { 00598 //cout << "ID " << (*it).getID() << " " << endl; 00599 00600 if ( (*it).getID()==new_evid) { 00601 evidFound=true; 00602 it=(c.mpV).erase(it); 00603 break; 00604 } 00605 else { 00606 ++it; 00607 } 00608 } 00609 00610 if (!evidFound) { 00611 cout << "evid " << new_evid << " NOT FOUND! " << endl; 00612 cout << "Could not delete entry!" << endl; 00613 } 00614 } 00615 00616 private: 00617 unsigned int new_evid; 00618 }; 00619 00620 00621 00622 00627 struct change_monitorPolicyInsert 00628 { 00629 change_monitorPolicyInsert (class MonitorPolicy & new_monitorPolicy): new_monitorPolicy(new_monitorPolicy){} 00630 00631 void operator() (Conduit& c) { 00632 00633 00634 //insert into mpV 00635 (c.mpV).push_back(new_monitorPolicy); 00636 00637 if (c.mpV.size()>(MAX_NO_MONITORS_PER_CHANNEL/2)) { 00638 cout << "HEY DUDE - YOU NOW HAVE " << c.mpV.size() << " MONITORS " << endl; 00639 cout << "for channel " << c.pv << " with handle " << c.handle << endl; 00640 } 00641 00642 00643 } 00644 00645 private: 00646 class MonitorPolicy new_monitorPolicy; 00647 }; 00648 00649 00650 00655 struct change_monitorPolicyInWaitingErase 00656 { 00657 change_monitorPolicyInWaitingErase (unsigned int & new_evid): new_evid(new_evid){} 00658 00659 void operator() (Conduit& c) { 00660 00661 bool evidFound=false; 00662 vector<MonitorPolicy>::iterator it; 00663 //Iterate 00664 for (it = c.mpInWaitingV.begin(); it != c.mpInWaitingV.end(); ++it) { 00665 00666 if ( (*it).getID()==new_evid) { 00667 evidFound=true; 00668 (c.mpInWaitingV).erase(it); 00669 break; 00670 } 00671 } 00672 00673 if (!evidFound) { 00674 cout << "evid " << new_evid << " NOT FOUND! " << endl; 00675 cout << "Could not delete entry!" << endl; 00676 } 00677 } 00678 00679 private: 00680 unsigned int new_evid; 00681 }; 00682 00683 00684 00689 struct change_monitorPolicyInWaitingInsert 00690 { 00691 change_monitorPolicyInWaitingInsert (class MonitorPolicy & new_monitorPolicy): new_monitorPolicy(new_monitorPolicy){} 00692 00693 void operator() (Conduit& c) { 00694 00695 //insert into mpnWaitingV 00696 (c.mpInWaitingV).push_back(new_monitorPolicy); 00697 00698 if (c.mpInWaitingV.size()>6) { 00699 cout << "HEY DUDE - YOU NOW HAVE " << c.mpInWaitingV.size() 00700 << " MONITORS IN WAITING" << endl; 00701 cout << "for channel " << c.pv << " with handle " << c.handle << endl; 00702 } 00703 } 00704 00705 private: 00706 class MonitorPolicy new_monitorPolicy; 00707 }; 00708 00709 00710 00711 00715 struct change_pvAlias 00716 { 00717 change_pvAlias (const char * & new_pvAlias): new_pvAlias(new_pvAlias){} 00718 00719 void operator() (Conduit& c) { 00720 c.pvAlias = new_pvAlias; 00721 //No longer supporting c,pvd 00723 //strcpy(c.pvc.pvAlias, new_pvAlias); 00724 } 00725 00726 private: 00727 const char * new_pvAlias; 00728 }; 00729 00730 00731 00732 00751 struct change_status 00752 { 00753 change_status (const int & new_status): new_status(new_status){} 00754 void operator() (Conduit& c) {c.status = new_status;} 00755 00756 private: 00757 int new_status; 00758 }; 00759 00760 00761 00765 struct change_usrArgs 00766 { 00767 change_usrArgs (const unsigned int & new_usrArgs): new_usrArgs(new_usrArgs){} 00768 void operator() (Conduit& c) {c.usrArgs = (void *) new_usrArgs;} 00769 00770 private: 00771 unsigned int new_usrArgs; 00772 }; 00773 00774 00778 struct change_groupHandle 00779 { 00780 change_groupHandle (const unsigned int & new_groupHandle): new_groupHandle(new_groupHandle){} 00781 00782 void operator() (Conduit& c) {c.groupHandle = new_groupHandle;} 00783 00784 private: 00785 unsigned int new_groupHandle; 00786 }; 00787 00788 00789 00790 #endif // CONDUITFRIENDS_H