Moved status and monitor out of pvAccessCPP; interfaces only.

This commit is contained in:
Matej Sekoranja
2010-12-19 13:28:30 +01:00
parent 188c256dda
commit 1f7c6f5520
4 changed files with 195 additions and 0 deletions
+6
View File
@@ -25,6 +25,8 @@ INC += timer.h
INC += queueVoid.h
INC += queue.h
INC += messageQueue.h
INC += destroyable.h
INC += status.h
LIBSRCS += byteBuffer.cpp
LIBSRCS += bitSet.cpp
@@ -106,6 +108,10 @@ SRC_DIRS += $(PVDATA)/pvMisc
INC += bitSetUtil.h
LIBSRCS += bitSetUtil.cpp
SRC_DIRS += $(PVDATA)/monitor
INC += monitor.h
LIBRARY=pvData
pvData_LIBS += Com
+25
View File
@@ -0,0 +1,25 @@
/* destroyable.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* EPICS pvDataCPP is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef DESTROYABLE_H
#define DESTROYABLE_H
namespace epics { namespace pvData {
/**
* Instance declaring destroy method.
* @author mse
*/
class Destroyable {
public:
/**
* Destroy this instance.
*/
virtual void destroy() = 0;
};
}}
#endif /* DESTROYABLE_H */
+70
View File
@@ -0,0 +1,70 @@
/* status.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* EPICS pvDataCPP is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef STATUS_H
#define STATUS_H
#include "serialize.h"
namespace epics { namespace pvData {
/**
* Status type enum.
*/
enum StatusType {
/** Operation completed successfully. */
OK,
/** Operation completed successfully, but there is a warning message. */
WARNING,
/** Operation failed due to an error. */
ERROR,
/** Operation failed due to an unexpected error. */
FATAL
};
/**
* Status interface.
* @author mse
*/
class Status : public epics::pvData::Serializable {
public:
/**
* Get status type.
* @return status type, non-<code>null</code>.
*/
virtual StatusType getType() = 0;
/**
* Get error message describing an error. Required if error status.
* @return error message.
*/
virtual epics::pvData::String getMessage() = 0;
/**
* Get stack dump where error (exception) happened. Optional.
* @return stack dump.
*/
virtual epics::pvData::String getStackDump() = 0;
/**
* Convenient OK test. Same as <code>(getType() == StatusType.OK)</code>.
* NOTE: this will return <code>false</code> on WARNING message although operation succeeded.
* To check if operation succeeded, use <code>isSuccess</code>.
* @return OK status.
* @see #isSuccess()
*/
virtual bool isOK() = 0;
/**
* Check if operation succeeded.
* @return operation success status.
*/
virtual bool isSuccess() = 0;
};
}}
#endif /* STATUS_H */
+94
View File
@@ -0,0 +1,94 @@
/* monitor.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* EPICS pvDataCPP is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef MONITOR_H
#define MONITOR_H
#include <status.h>
#include <destroyable.h>
namespace epics { namespace pvData {
/**
* Class instance representing monitor element.
* @author mrk
*/
class MonitorElement {
public:
/**
* Get the PVStructure.
* @return The PVStructure.
*/
virtual PVStructure* getPVStructure() = 0;
/**
* Get the bitSet showing which fields have changed.
* @return The bitSet.
*/
virtual BitSet* getChangedBitSet() = 0;
/**
* Get the bitSet showing which fields have been changed more than once.
* @return The bitSet.
*/
virtual BitSet* getOverrunBitSet() = 0;
};
/**
* Interface for Monitor.
* @author mrk
*/
class Monitor : public Destroyable, private NoDefaultMethods {
public:
/**
* Start monitoring.
* @return completion status.
*/
virtual Status* start() = 0;
/**
* Stop Monitoring.
* @return completion status.
*/
virtual Status* stop() = 0;
/**
* If monitor has occurred return data.
* @return monitorElement for modified data on null if no monitors have occurred.
*/
virtual MonitorElement* poll() = 0;
/**
* Release a MonitorElement that was returned by poll.
* @param monitorElement
*/
virtual void release(MonitorElement* monitorElement) = 0;
};
/**
* Requester for ChannelMonitor.
* @author mrk
*/
class MonitorRequester : public Requester {
public:
/**
* The client and server have both completed the createMonitor request.
* @param status Completion status.
* @param monitor The monitor
* @param structure The structure defining the data.
*/
virtual void monitorConnect(Status* status, Monitor* monitor, Structure* structure) = 0;
/**
* A monitor event has occurred. The requester must call Monitor.poll to get data.
* @param monitor The monitor.
*/
virtual void monitorEvent(Monitor* monitor) = 0;
/**
* The data source is no longer available.
* @param monitor The monitor.
*/
virtual void unlisten(Monitor* monitor) = 0;
};
}}
#endif /* MONITOR_H */