/// /// \file PVGroup.h /// /// \author Jan Chrin /// \date November 2014 /// #ifndef PVGROUP_H #define PVGROUP_H #include /** * class MemberMap * maps string to index */ class MemberMap { typedef std::map mapLongString; private: mapLongString mapNameIndex; mapLongString::iterator pos; Helper helper; public: MemberMap(){}; ~MemberMap(){}; void insert(int a, std::string _Name) { mapNameIndex.insert(std::make_pair(a, _Name)); }; std::string getPV (int i) { pos = mapNameIndex.find(i); if (pos != mapNameIndex.end()) return pos->second; cout << "Index " << i << " not found! Size of group vector is " << mapNameIndex.size() << endl; return ""; }; int getIndex (std::string _Name) { char pvStripped[PVNAME_SIZE]; helper.removeLeadingAndTrailingSpaces(_Name.c_str(), pvStripped); string Name=pvStripped; for (pos=mapNameIndex.begin(); pos != mapNameIndex.end(); ++pos) { if (pos->second==Name) {return pos->first;} // String searches such as s.find(s1) return string::npos on failure //else if ( (pos->second).find(Name) != std::string::npos) return pos->first; } cout << "PV: " << Name << " IS NOT A MEMBER OF THIS LIST " << endl; return -1; }; }; /** * class PVGroup * This class is the holder of PVDataHolder objects associated with * of group of handles */ class PVGroup { friend class Connect; friend class CAFE; //if HAVE_LIBQTXML friend class restorePVGroupXMLParser; //endif private: PVDataHolder * pvdata; unsigned int npv; char name [PVGROUP_PSEUDO_SIZE]; int statusGroup; unsigned int groupHandle; bool isIndexOutOfRange (unsigned int idx) { return (idx >= npv) ? true:false; }; MemberMap memberMap; public: //Initialize 1st two to avoid compiler warning messages PVGroup(){npv=0; pvdata=NULL; statusGroup=ICAFE_NORMAL; groupHandle=0; strcpy(name,"");}; ~PVGroup(){}; MemberMap getMemberMap() const {return memberMap;}; PVDataHolder * getPVData() const {return pvdata;}; PVDataHolder getPVData(unsigned int idx) throw(std::out_of_range){ if(isIndexOutOfRange(idx)) { std::ostringstream oss; oss << "Exception! Index " << idx << " to PVGroup.pvdata() is out of range. Valid range is from 0 to " << npv-1; throw std::out_of_range(oss.str()); } return pvdata[idx]; }; void setHasAlarm(bool h){ for (unsigned int i=0; i