00001
#ifndef baciBACIMonitor_H
00002
#define baciBACIMonitor_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00034
#ifndef __cplusplus
00035
#error This is a C++ include file and cannot be used from plain C
00036
#endif
00037
00038
#include "baciExport.h"
00039
#include "acsutilTimeStamp.h"
00040
#include <acscommonC.h>
00041
#include "baciValue.h"
00042
#include "logging.h"
00043
#include <vector>
00044
00045
namespace baci {
00046
00047
00048
00049
00050
class BACIProperty;
00051
00052
00053
00060 class baci_EXPORT MonitorImplementator
00061 {
00062
public:
00063
00070 virtual int initialization() {
return 0; }
00071
00077
virtual void monitorDestroyed(
void) = 0;
00078
00083
virtual void monitorStateChanged(
void) = 0;
00084
00085 virtual ~MonitorImplementator() {}
00086
00087 };
00088
00089
00090
00099 class baci_EXPORT BACIMonitor
00100 {
00101
00102
public:
00103
00127 enum UpdateMode { mumNull=0,
00128 mumLast=1,
00129 mumTrunc=2 };
00130
00134 BACIMonitor(
const ACE_CString& _name,
int _callbackID,
00135 MonitorImplementator* monitorImplementator_p,
00136
const ACS::TimeInterval& _triggerTime,
const BACIValue& _triggerValue,
00137
const ACS::TimeInterval& _minTriggerTime,
const BACIValue& _minTriggerValue,
00138
BACIProperty* _property,
00139
const ACS::TimeInterval& _transmitTime=0,
00140
const UpdateMode& _updateMode=mumLast,
00141
const bool _achivingMonitor=
false,
00142
const bool _suspended=
false,
00143
const bool _deltaValueAndTimerInteraction=
false,
00144
const unsigned int _priority=3);
00145
00147
void destroy();
00148
00149
void suspend();
00150
void resume();
00151
void setLastTime(
const ACS::TimeInterval& _lastTime);
00152
void setTriggerValue(
const BACIValue& _triggerValue);
00153
void setMinTriggerValue(
const BACIValue& _minTriggerValue);
00154
void setLastValue(
const BACIValue& _lastValue);
00155
void setTriggerOnValue(
bool enable);
00156
00157
00158
00159 const char * getName()
const {
return name_m.c_str(); }
00160 bool isSuspended()
const {
return suspended_m; }
00161
00162 BACIMonitor& operator=(
const BACIMonitor& mon)
00163 {
00164
if (
this!=&mon)
00165 {
00166 name_m=mon.
name_m;
00167 callbackID_m=mon.
callbackID_m;
00168 triggerTime_m=mon.
triggerTime_m;
00169 transmitTime_m=mon.
transmitTime_m;
00170 lastTime_m=mon.
lastTime_m;
00171 triggerValue_m=mon.
triggerValue_m;
00172 lastValue_m=mon.
lastValue_m;
00173 triggerOnValue_m=mon.
triggerOnValue_m;
00174 property_mp=mon.
property_mp;
00175 suspended_m=mon.
suspended_m;
00176 archivingMonitor_m=mon.
archivingMonitor_m;
00177 updateMode_m=mon.
updateMode_m;
00178
00179 monitorImplementator_mp = mon.
monitorImplementator_mp;
00180 minTriggerTime_m = mon.
minTriggerTime_m;
00181 userControlledTransmitTime_m = mon.
userControlledTransmitTime_m;
00182 minTriggerValue_m = mon.
minTriggerValue_m;
00183 deltaValueAndTimerInteraction_m = mon.
deltaValueAndTimerInteraction_m;
00184 priority_m = mon.
priority_m;
00185 inDestructionState_m = mon.
inDestructionState_m;
00186 destroyed_m = mon.
destroyed_m;
00187 }
00188
return *
this;
00189 }
00190
00191 bool operator==(
const BACIMonitor& mon)
const {
return callbackID_m==mon.
callbackID_m; }
00192
00193 UpdateMode getUpdateMode()
const {
return updateMode_m; }
00194 int getCallbackID()
const {
return callbackID_m; }
00195 ACS::TimeInterval getTriggerTime()
const {
return triggerTime_m; }
00196 ACS::TimeInterval getMinTriggerTime()
const {
return minTriggerTime_m; }
00197 ACS::TimeInterval getLastTime()
const {
return lastTime_m; }
00198 ACS::TimeInterval getTransmitTime()
const {
return transmitTime_m; }
00199 BACIValue getTriggerValue()
const {
return triggerValue_m; }
00200 BACIValue getMinTriggerValue()
const {
return minTriggerValue_m; }
00201 BACIValue getLastValue()
const {
return lastValue_m; }
00202 bool getTriggerOnValue()
const {
return triggerOnValue_m; }
00203
00204
void setUpdateMode(
const UpdateMode& _updateMode);
00205
void setTriggerTime(
const ACS::TimeInterval& _triggerTime);
00206
void setMinTriggerTime(
const ACS::TimeInterval& _minTriggerTime);
00207
00208 void setTransmitTime(
const ACS::TimeInterval& _transmitTime)
00209 {
00210 transmitTime_m = _transmitTime;
00211 }
00212
00216 void monitorStateChanged()
00217 {
00218
ACS_TRACE(
"baci::BACIMonitor::monitorStateChanged");
00219
if (monitorImplementator_mp!=0)
00220 {
00221 monitorImplementator_mp->monitorStateChanged();
00222 }
00223 }
00224
00225 MonitorImplementator* getMonitorImplementator()
const {
return monitorImplementator_mp; }
00226 BACIProperty* getProperty()
const {
return property_mp; }
00227
00228 bool isInDestructionState()
const {
return inDestructionState_m; };
00229
00230 bool isArchivingMonitor()
const {
return archivingMonitor_m; };
00231
00232 bool isDeltaValueAndTimerInteraction()
const {
return deltaValueAndTimerInteraction_m; };
00233
00234 unsigned int getPriority()
const {
return priority_m; };
00235
00236
private:
00237
00243 ~BACIMonitor();
00244
00245
void internalDestroy();
00246
00247
00248 ACE_CString name_m;
00249 int callbackID_m;
00250
00251 MonitorImplementator* monitorImplementator_mp;
00252
00253 UpdateMode updateMode_m;
00254
00255 ACS::TimeInterval triggerTime_m;
00256 ACS::TimeInterval minTriggerTime_m;
00257 ACS::TimeInterval transmitTime_m;
00258 bool userControlledTransmitTime_m;
00259 ACS::TimeInterval lastTime_m;
00260
00261 BACIValue triggerValue_m;
00262 BACIValue minTriggerValue_m;
00263 BACIValue lastValue_m;
00264 bool triggerOnValue_m;
00265
00266 BACIProperty* property_mp;
00267
00268 bool archivingMonitor_m;
00269
00270 bool suspended_m;
00271
00272 bool deltaValueAndTimerInteraction_m;
00273
00274 unsigned int priority_m;
00275
00276 bool inDestructionState_m;
00277
00278 bool destroyed_m;
00279
00280
friend class BACIProperty;
00281
00282 };
00283
00287 typedef std::vector<BACIMonitor*>
BACIMonitorVector;
00288
00289
00290 };
00291
00292
#endif
00293
00294