diff --git a/pvAccessApp/client/ChannelAccessFactory.cpp b/pvAccessApp/client/ChannelAccessFactory.cpp index 67a0a10..f3dbfe7 100644 --- a/pvAccessApp/client/ChannelAccessFactory.cpp +++ b/pvAccessApp/client/ChannelAccessFactory.cpp @@ -20,7 +20,7 @@ typedef std::map ChannelProviderMap; static ChannelProviderMap channelProviders; -class ChannelAccessImpl : public ChannelAccess, public NoDefaultMethods { +class ChannelAccessImpl : public ChannelAccess { public: ChannelProvider* getProvider(String providerName) { diff --git a/pvAccessApp/client/pvAccess.h b/pvAccessApp/client/pvAccess.h index 859768a..4b95476 100644 --- a/pvAccessApp/client/pvAccess.h +++ b/pvAccessApp/client/pvAccess.h @@ -2,6 +2,9 @@ #ifndef PVACCESS_H #define PVACCESS_H #include +#include +#include +#include #include namespace epics { namespace pvAccess { @@ -22,90 +25,22 @@ namespace epics { namespace pvAccess { }; - /** - * Channel connection status. - */ - enum ConnectionState { - NEVER_CONNECTED, CONNECTED, DISCONNECTED, DESTROYED - }; + /** + * Channel connection status. + */ + enum ConnectionState { + NEVER_CONNECTED, CONNECTED, DISCONNECTED, DESTROYED + }; - /** - * 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-null. - */ - 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 (getType() == StatusType.OK). - * NOTE: this will return false on WARNING message although operation succeeded. - * To check if operation succeeded, use isSuccess. - * @return OK status. - * @see #isSuccess() - */ - virtual bool isOK() = 0; - - /** - * Check if operation succeeded. - * @return operation success status. - */ - virtual bool isSuccess() = 0; - }; - class Channel; class ChannelProvider; - - /** - * Instance declaring destroy method. - * @author mse - */ - class Destroyable { - public: - /** - * Destroy this instance. - */ - virtual void destroy() = 0; - }; - /** * Base interface for all channel requests. * @author mse */ - class ChannelRequest : public Destroyable { + class ChannelRequest : public epics::pvData::Destroyable, private epics::pvData::NoDefaultMethods { }; /** @@ -156,25 +91,25 @@ namespace epics { namespace pvAccess { * @param channelArray The channelArray interface or null if the request failed. * @param pvArray The PVArray that holds the data. */ - virtual void channelArrayConnect(Status *status,ChannelArray *channelArray,epics::pvData::PVArray *pvArray) = 0; + virtual void channelArrayConnect(epics::pvData::Status *status,ChannelArray *channelArray,epics::pvData::PVArray *pvArray) = 0; /** * The request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void putArrayDone(Status *status) = 0; + virtual void putArrayDone(epics::pvData::Status *status) = 0; /** * The request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void getArrayDone(Status *status) = 0; + virtual void getArrayDone(epics::pvData::Status *status) = 0; /** * The request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void setLengthDone(Status *status) = 0; + virtual void setLengthDone(epics::pvData::Status *status) = 0; }; @@ -198,7 +133,7 @@ namespace epics { namespace pvAccess { /** * @param status Completion status. */ - virtual void channelFindResult(Status *status,ChannelFind *channelFind,bool wasFound) = 0; + virtual void channelFindResult(epics::pvData::Status *status,ChannelFind *channelFind,bool wasFound) = 0; }; @@ -235,14 +170,14 @@ namespace epics { namespace pvAccess { * @param pvStructure The PVStructure that holds the data. * @param bitSet The bitSet for that shows what data has changed. */ - virtual void channelGetConnect(Status *status,ChannelGet *channelGet, + virtual void channelGetConnect(epics::pvData::Status *status,ChannelGet *channelGet, epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet) = 0; /** * The request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void getDone(Status *status) = 0; + virtual void getDone(epics::pvData::Status *status) = 0; }; @@ -278,13 +213,13 @@ namespace epics { namespace pvAccess { * @param channelProcess The channelProcess interface or null if the client could not become * the record processor. */ - virtual void channelProcessConnect(Status *status,ChannelProcess *channelProcess) = 0; + virtual void channelProcessConnect(epics::pvData::Status *status,ChannelProcess *channelProcess) = 0; /** * The process request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void processDone(Status *status) = 0; + virtual void processDone(epics::pvData::Status *status) = 0; }; @@ -326,20 +261,20 @@ namespace epics { namespace pvAccess { * @param pvStructure The PVStructure that holds the data. * @param bitSet The bitSet for that shows what data has changed. */ - virtual void channelPutConnect(Status *status,ChannelPut *channelPut, + virtual void channelPutConnect(epics::pvData::Status *status,ChannelPut *channelPut, epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet) = 0; /** * The request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void putDone(Status *status) = 0; + virtual void putDone(epics::pvData::Status *status) = 0; /** * The get request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void getDone(Status *status) = 0; + virtual void getDone(epics::pvData::Status *status) = 0; }; @@ -388,25 +323,25 @@ namespace epics { namespace pvAccess { * @param pvPutStructure The PVStructure that holds the putData. * @param pvGetStructure The PVStructure that holds the getData. */ - virtual void channelPutGetConnect(Status *status,ChannelPutGet *channelPutGet, + virtual void channelPutGetConnect(epics::pvData::Status *status,ChannelPutGet *channelPutGet, epics::pvData::PVStructure *pvPutStructure,epics::pvData::PVStructure *pvGetStructure) = 0; /** * The putGet request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void putGetDone(Status *status) = 0; + virtual void putGetDone(epics::pvData::Status *status) = 0; /** * The getPut request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void getPutDone(Status *status) = 0; + virtual void getPutDone(epics::pvData::Status *status) = 0; /** * The getGet request is done. This is always called with no locks held. * @param status Completion status. */ - virtual void getGetDone(Status *status) = 0; + virtual void getGetDone(epics::pvData::Status *status) = 0; }; @@ -442,7 +377,7 @@ namespace epics { namespace pvAccess { * @param pvArgument The argument structure for an RPC request. * @param bitSet The bitSet for argument changes. */ - virtual void channelRPCConnect(Status *status,ChannelRPC *channelRPC, + virtual void channelRPCConnect(epics::pvData::Status *status,ChannelRPC *channelRPC, epics::pvData::PVStructure *pvArgument,epics::pvData::BitSet *bitSet) = 0; /** @@ -450,7 +385,7 @@ namespace epics { namespace pvAccess { * @param status Completion status. * @param pvResponse The response data for the RPC request. */ - virtual void requestDone(Status *status,epics::pvData::PVStructure *pvResponse) = 0; + virtual void requestDone(epics::pvData::Status *status,epics::pvData::PVStructure *pvResponse) = 0; }; @@ -467,7 +402,7 @@ namespace epics { namespace pvAccess { * @param status Completion status. * @param field The Structure for the request. */ - virtual void getDone(Status *status,epics::pvData::Field *field) = 0; + virtual void getDone(epics::pvData::Status *status,epics::pvData::Field *field) = 0; }; @@ -484,7 +419,7 @@ namespace epics { namespace pvAccess { * @param status Completion status. * @param channel The channel. */ - virtual void channelCreated(Status* status, Channel *channel) = 0; + virtual void channelCreated(epics::pvData::Status* status, Channel *channel) = 0; /** * A channel connection state change has occurred. @@ -495,17 +430,16 @@ namespace epics { namespace pvAccess { }; - // TODO - class Monitor; - class MonitorRequester; - /** * Interface for accessing a channel. * A channel is created via a call to ChannelAccess.createChannel(String channelName). * @author mrk * @author msekoranja */ - class Channel : public epics::pvData::Requester, Destroyable { + class Channel : + public epics::pvData::Requester, + public epics::pvData::Destroyable, + private epics::pvData::NoDefaultMethods { public: /** @@ -633,8 +567,8 @@ namespace epics { namespace pvAccess { * This has the same form as a pvRequest to PVCopyFactory.create. * @return Monitor instance. */ - virtual Monitor* createMonitor( - MonitorRequester *monitorRequester, + virtual epics::pvData::Monitor* createMonitor( + epics::pvData::MonitorRequester *monitorRequester, epics::pvData::PVStructure *pvRequest) = 0; /** @@ -655,7 +589,7 @@ namespace epics { namespace pvAccess { * @author mrk * */ - class ChannelAccess { + class ChannelAccess : private epics::pvData::NoDefaultMethods { public: /** @@ -682,7 +616,7 @@ namespace epics { namespace pvAccess { * @author mrk * */ - class ChannelProvider { + class ChannelProvider : private epics::pvData::NoDefaultMethods { public: /** Minimal priority. */ @@ -742,7 +676,7 @@ namespace epics { namespace pvAccess { * The class representing a CA Client Context. * @author Matej Sekoranja */ - class ClientContext { + class ClientContext : private epics::pvData::NoDefaultMethods { public: /**