00001 #ifndef __CMWFWIOVALUE_H__ 00002 #define __CMWFWIOVALUE_H__ 00003 00004 #include "cmwfwTypes.h" 00005 00006 00007 00008 template<class T> class cmwfwList; 00009 typedef cmwfwList<cmwfwValueChangeListener*> vcl_list_type; 00010 00011 00012 class cmwfwIOValue{ 00013 public: 00014 friend class cmwfwDeviceServer; 00015 friend class cmwfwPoller; 00016 friend class cmwfwForwarder; 00017 00018 cmwfwIOValue(const cmwfwIOPoint& iop); 00019 ~cmwfwIOValue(); 00020 00021 00022 protected: 00023 private: 00024 bool addListener(cmwfwValueChangeListener* l); 00025 void removeListener(cmwfwValueChangeListener* l); 00026 void getIOPoint(cmwfwIOPoint& iop); 00027 bool hasNoListeners(); 00028 void update(const cmwfwData& data, 00029 const cmwfwValueQualifier& vq); 00030 void update(const cmwfwIOError& error); 00031 void updateNewListener(cmwfwValueChangeListener* l); 00032 00033 void processListeners(const cmwfwData& old_data, 00034 const cmwfwData& new_data, 00035 const cmwfwValueQualifier& vq); 00036 void heaperr(int line); 00037 00038 bool never_updated; 00039 00040 cmwfwIOPoint* my_iop; 00041 00042 bool old_data_is_scalar; 00043 cmwfwData old_data; 00044 cmwfwValueQualifier old_vq; 00045 00046 double old_acquisitionStamp; 00047 00048 bool use_old_io_error; 00049 cmwfwIOError* old_io_error; 00050 00051 vcl_list_type* valuechangelisteners; //Not thread safe 00052 //at this level 00053 }; 00054 00055 00056 #endif //#ifndef __CMWFWIOVALUE_H__