diff --git a/.cproject b/.cproject
index 0e0c996..c4b2764 100644
--- a/.cproject
+++ b/.cproject
@@ -3,11 +3,11 @@
-
-
+
+
-
+
@@ -16,44 +16,28 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -302,44 +286,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- make
- all
- true
- true
- false
-
-
- make
- clean
- true
- true
- false
-
-
- make
-
- uninstall
- true
- true
- false
-
-
- make
-
- clean all DEBUG=1
- true
- true
- false
-
-
-
+
+
+
-
+
diff --git a/README b/README
index 33c3be4..70ab8bb 100644
--- a/README
+++ b/README
@@ -3,4 +3,21 @@ Define
EPICS_BASE
PVDATA_HOME
-variables that points to EPICS base and pvDataCPP installation directory (includes and libraries) in configure/RELEASE.
+variables that points to EPICS base and pvDataCPP installation directory (includes and libraries) in configure/RELEASE.local
+
+Google C++ Testing Framework
+----------------------------
+Download:
+http://code.google.com/p/googletest/
+
+Extract, go to its root directory and in run:
+export GTEST_DIR=$PWD
+g++ -g -O3 -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
+g++ -g -O3 -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest_main.cc
+ar -rv libgtest_main.a gtest_main.o gtest-all.o
+
+mkdir -p $EPICS_HOME/gtest/lib
+cp -r ${GTEST_DIR}/include $EPICS_HOME/gtest
+cp libgtest_main.a $EPICS_HOME/gtest/lib
+
+(you can use cmake, see gtest README)
diff --git a/pvAccessApp/factory/CreateRequestFactory.cpp b/pvAccessApp/factory/CreateRequestFactory.cpp
index 0450d03..7665a64 100644
--- a/pvAccessApp/factory/CreateRequestFactory.cpp
+++ b/pvAccessApp/factory/CreateRequestFactory.cpp
@@ -43,7 +43,7 @@ private:
return findMatchingBrace(request,closeBrace,numOpen-1);
}
- static void createFieldRequest(PVStructure* pvParent,std::string request,bool fieldListOK) {
+ static void createFieldRequest(PVStructurePtr const & pvParent,std::string request,bool fieldListOK) {
trim(request);
if(request.length()<=0) return;
size_t comma = request.find(',');
@@ -57,9 +57,12 @@ private:
THROW_BASE_EXCEPTION("mismatched { }");
}
String fieldName = request.substr(0,openBrace);
- std::auto_ptr pvStructure(getPVDataCreate()->createPVStructure(pvParent, fieldName, 0));
- createFieldRequest(pvStructure.get(),request.substr(openBrace+1,closeBrace-openBrace-1),false);
- pvParent->appendPVField(pvStructure.release());
+
+ PVFieldPtrArray fields;
+ StringArray fieldNames;
+ PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(fieldNames, fields));
+ createFieldRequest(pvStructure,request.substr(openBrace+1,closeBrace-openBrace-1),false);
+ pvParent->appendPVField(fieldName, pvStructure);
if(request.length()>closeBrace+1) {
if(request.at(closeBrace+1) != ',') {
THROW_BASE_EXCEPTION("misssing , after }");
@@ -69,9 +72,9 @@ private:
return;
}
if(openBracket==std::string::npos && fieldListOK) {
- std::auto_ptr pvStringField(static_cast(getPVDataCreate()->createPVScalar(pvParent, "fieldList", pvString)));
+ PVStringPtr pvStringField(std::tr1::static_pointer_cast(getPVDataCreate()->createPVScalar(pvString)));
pvStringField->put(request);
- pvParent->appendPVField(pvStringField.release());
+ pvParent->appendPVField("fieldList", pvStringField);
return;
}
if(openBracket!=std::string::npos && (comma==std::string::npos || comma>openBracket)) {
@@ -95,30 +98,32 @@ private:
createLeafFieldRequest(pvParent,request);
}
- static void createLeafFieldRequest(PVStructure* pvParent,String request) {
+ static void createLeafFieldRequest(PVStructurePtr const & pvParent,String request) {
size_t openBracket = request.find('[');
String fullName = request;
if(openBracket != std::string::npos) fullName = request.substr(0,openBracket);
size_t indLast = fullName.rfind('.');
String fieldName = fullName;
if(indLast>1 && indLast != std::string::npos) fieldName = fullName.substr(indLast+1);
- std::auto_ptr pvStructure(getPVDataCreate()->createPVStructure(pvParent, fieldName, 0));
- std::auto_ptr pvLeaf(getPVDataCreate()->createPVStructure(pvStructure.get(),"leaf", 0));
- std::auto_ptr pvStringField(static_cast(getPVDataCreate()->createPVScalar(pvLeaf.get(), "source", pvString)));
+ PVFieldPtrArray fields;
+ StringArray fieldNames;
+ PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(fieldNames, fields));
+ PVStructurePtr pvLeaf(getPVDataCreate()->createPVStructure(fieldNames, fields));
+ PVStringPtr pvStringField(std::tr1::static_pointer_cast(getPVDataCreate()->createPVScalar(pvString)));
pvStringField->put(fullName);
- pvLeaf->appendPVField(pvStringField.release());
+ pvLeaf->appendPVField("source", pvStringField);
if(openBracket != std::string::npos) {
size_t closeBracket = request.find(']');
if(closeBracket==std::string::npos) {
THROW_BASE_EXCEPTION("option does not have matching []");
}
- createRequestOptions(pvLeaf.get(),request.substr(openBracket+1, closeBracket-openBracket-1));
+ createRequestOptions(pvLeaf,request.substr(openBracket+1, closeBracket-openBracket-1));
}
- pvStructure->appendPVField(pvLeaf.release());
- pvParent->appendPVField(pvStructure.release());
+ pvStructure->appendPVField("leaf", pvLeaf);
+ pvParent->appendPVField("fieldName", pvStructure);
}
- static void createRequestOptions(PVStructure* pvParent,std::string request) {
+ static void createRequestOptions(PVStructurePtr const & pvParent,std::string request) {
trim(request);
if(request.length()<=1) return;
@@ -135,9 +140,9 @@ private:
if (equalsPos != std::string::npos)
{
- std::auto_ptr pvStringField(static_cast(getPVDataCreate()->createPVScalar(pvParent, token.substr(0, equalsPos), pvString)));
+ PVStringPtr pvStringField(std::tr1::static_pointer_cast(getPVDataCreate()->createPVScalar(pvString)));
pvStringField->put(token.substr(equalsPos+1));
- pvParent->appendPVField(pvStringField.release());
+ pvParent->appendPVField(token.substr(0, equalsPos), pvStringField);
}
}
}
@@ -146,11 +151,13 @@ public:
virtual PVStructure::shared_pointer createRequest(String request)
{
- static String emptyString;
+ static PVFieldPtrArray emptyFields;
+ static StringArray emptyFieldNames;
+
if (!request.empty()) trim(request);
if (request.empty())
{
- PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(0, emptyString, 0));
+ PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
return pvStructure;
}
@@ -159,7 +166,7 @@ public:
size_t offsetPutField = request.find("putField(");
size_t offsetGetField = request.find("getField(");
- PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(0, emptyString, 0));
+ PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
if (offsetRecord != std::string::npos) {
size_t offsetBegin = request.find('[', offsetRecord);
@@ -167,9 +174,9 @@ public:
if(offsetEnd == std::string::npos) {
THROW_BASE_EXCEPTION("record[ does not have matching ]");
}
- std::auto_ptr pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "record", 0));
- createRequestOptions(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1));
- pvStructure->appendPVField(pvStruct.release());
+ PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
+ createRequestOptions(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1));
+ pvStructure->appendPVField("record", pvStruct);
}
if (offsetField != std::string::npos) {
size_t offsetBegin = request.find('(', offsetField);
@@ -177,9 +184,9 @@ public:
if(offsetEnd == std::string::npos) {
THROW_BASE_EXCEPTION("field( does not have matching )");
}
- std::auto_ptr pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "field", 0));
- createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
- pvStructure->appendPVField(pvStruct.release());
+ PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
+ createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
+ pvStructure->appendPVField("field", pvStruct);
}
if (offsetPutField != std::string::npos) {
size_t offsetBegin = request.find('(', offsetPutField);
@@ -187,9 +194,9 @@ public:
if(offsetEnd == std::string::npos) {
THROW_BASE_EXCEPTION("putField( does not have matching )");
}
- std::auto_ptr pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "putField", 0));
- createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
- pvStructure->appendPVField(pvStruct.release());
+ PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
+ createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
+ pvStructure->appendPVField("putField", pvStruct);
}
if (offsetGetField != std::string::npos) {
size_t offsetBegin = request.find('(', offsetGetField);
@@ -197,12 +204,12 @@ public:
if(offsetEnd == std::string::npos) {
THROW_BASE_EXCEPTION("getField( does not have matching )");
}
- std::auto_ptr pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "getField", 0));
- createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
- pvStructure->appendPVField(pvStruct.release());
+ PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
+ createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
+ pvStructure->appendPVField("getField", pvStruct);
}
if (pvStructure.get()->getStructure()->getNumberFields()==0) {
- createFieldRequest(pvStructure.get(),request,true);
+ createFieldRequest(pvStructure,request,true);
}
return pvStructure;
}
diff --git a/pvAccessApp/remote/abstractResponseHandler.cpp b/pvAccessApp/remote/abstractResponseHandler.cpp
index ad00f88..8ec35a7 100644
--- a/pvAccessApp/remote/abstractResponseHandler.cpp
+++ b/pvAccessApp/remote/abstractResponseHandler.cpp
@@ -23,7 +23,7 @@ namespace epics {
void AbstractResponseHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
if(_debug) {
char ipAddrStr[48];
ipAddrToDottedIP(&responseFrom->ia, ipAddrStr, sizeof(ipAddrStr));
diff --git a/pvAccessApp/remote/blockingClientTCPTransport.cpp b/pvAccessApp/remote/blockingClientTCPTransport.cpp
index 6a8c9a3..064270d 100644
--- a/pvAccessApp/remote/blockingClientTCPTransport.cpp
+++ b/pvAccessApp/remote/blockingClientTCPTransport.cpp
@@ -42,7 +42,7 @@ namespace epics {
acquire(client);
// use immediate for clients
- setSendQueueFlushStrategy(IMMEDIATE);
+ setSendQueueFlushStrategy(DELAYED);
// setup connection timeout timer (watchdog)
epicsTimeGetCurrent(&_aliveTimestamp);
diff --git a/pvAccessApp/remote/blockingServerTCPTransport.cpp b/pvAccessApp/remote/blockingServerTCPTransport.cpp
index d66862b..53f64fe 100644
--- a/pvAccessApp/remote/blockingServerTCPTransport.cpp
+++ b/pvAccessApp/remote/blockingServerTCPTransport.cpp
@@ -28,7 +28,8 @@ namespace pvAccess {
_lastChannelSID(0)
{
// for performance testing
- // setSendQueueFlushStrategy(IMMEDIATE);
+ setSendQueueFlushStrategy(DELAYED);
+ _delay = 0.000;
// NOTE: priority not yet known, default priority is used to register/unregister
// TODO implement priorities in Reactor... not that user will
diff --git a/pvAccessApp/remote/blockingTCP.h b/pvAccessApp/remote/blockingTCP.h
index 23c0618..f1be511 100644
--- a/pvAccessApp/remote/blockingTCP.h
+++ b/pvAccessApp/remote/blockingTCP.h
@@ -124,20 +124,20 @@ namespace epics {
bool waitUntilVerified(double timeout);
virtual void flush(bool lastMessageCompleted);
- virtual void startMessage(epics::pvData::int8 command, int ensureCapacity);
+ virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity);
virtual void endMessage();
virtual void flushSerializeBuffer() {
flush(false);
}
- virtual void ensureBuffer(int size);
+ virtual void ensureBuffer(std::size_t size);
- virtual void alignBuffer(int alignment);
+ virtual void alignBuffer(std::size_t alignment);
- virtual void ensureData(int size);
+ virtual void ensureData(std::size_t size);
- virtual void alignData(int alignment);
+ virtual void alignData(std::size_t alignment);
virtual void close(bool force);
@@ -165,10 +165,15 @@ namespace epics {
//void enqueueMonitorSendRequest(TransportSender::shared_pointer const & sender);
+ virtual void enqueueOnlySendRequest(TransportSender::shared_pointer const & sender);
+
+ virtual void flushSendQueue();
+
+
protected:
virtual void processReadCached(bool nestedCall,
- ReceiveStage inStage, int requiredBytes);
+ ReceiveStage inStage, std::size_t requiredBytes);
/**
* Called to any resources just before closing transport
@@ -199,11 +204,12 @@ namespace epics {
/**
* Default marker period.
*/
- static const int MARKER_PERIOD = 1024;
+ static const std::size_t MARKER_PERIOD = 1024;
- static const int MAX_ENSURE_DATA_BUFFER_SIZE = 1024;
+ static const std::size_t MAX_ENSURE_DATA_BUFFER_SIZE = 1024;
- static const double _delay;
+// TODO
+ double _delay;
/****** finally initialized at construction time and after start (called by the same thread) ********/
@@ -230,10 +236,12 @@ namespace epics {
*/
std::auto_ptr _responseHandler;
+ // TODO review int vs std::size_t
+
/**
* Send buffer size.
*/
- int _maxPayloadSize;
+ std::size_t _maxPayloadSize;
/**
* Send buffer size.
@@ -333,16 +341,16 @@ namespace epics {
// initialized at construction time
epics::pvData::ByteBuffer* _socketBuffer;
- int _startPosition;
+ std::size_t _startPosition;
- int _storedPayloadSize;
- int _storedPosition;
- int _storedLimit;
+ std::size_t _storedPayloadSize;
+ std::size_t _storedPosition;
+ std::size_t _storedLimit;
epics::pvData::int8 _version;
epics::pvData::int8 _packetType;
epics::pvData::int8 _command;
- int _payloadSize;
+ std::size_t _payloadSize;
ReceiveStage _stage;
diff --git a/pvAccessApp/remote/blockingTCPTransport.cpp b/pvAccessApp/remote/blockingTCPTransport.cpp
index 51c18d6..1bec0f1 100644
--- a/pvAccessApp/remote/blockingTCPTransport.cpp
+++ b/pvAccessApp/remote/blockingTCPTransport.cpp
@@ -76,11 +76,12 @@ namespace pvAccess {
PVDATA_REFCOUNT_MONITOR_DEFINE(blockingTCPTransport);
- const double BlockingTCPTransport::_delay = 0.01;
+ //const double BlockingTCPTransport::_delay = 0.000;
BlockingTCPTransport::BlockingTCPTransport(Context::shared_pointer const & context,
SOCKET channel, std::auto_ptr& responseHandler,
int receiveBufferSize, int16 priority) :
+ _delay(0.0),
_channel(channel),
_priority(priority),
_responseHandler(responseHandler),
@@ -221,7 +222,7 @@ namespace pvAccess {
LOG(logLevelDebug, "Starting thread: %s",threadName.c_str());
_sendThreadId = epicsThreadCreate(threadName.c_str(),
- epicsThreadPriorityMedium,
+ epicsThreadPriorityMedium,
epicsThreadGetStackSize(epicsThreadStackMedium),
BlockingTCPTransport::sendThreadRunner, this);
}
@@ -330,7 +331,7 @@ namespace pvAccess {
startMessage(_lastSegmentedMessageCommand, 0);
}
- void BlockingTCPTransport::startMessage(int8 command, int ensureCapacity) {
+ void BlockingTCPTransport::startMessage(int8 command, size_t ensureCapacity) {
_lastMessageStartPosition = -1;
ensureBuffer(CA_MESSAGE_HEADER_SIZE+ensureCapacity);
_lastMessageStartPosition = _sendBuffer->getPosition();
@@ -346,8 +347,8 @@ namespace pvAccess {
endMessage(false);
}
- void BlockingTCPTransport::ensureBuffer(int size) {
- if(likely((int)(_sendBuffer->getRemaining())>=size)) return;
+ void BlockingTCPTransport::ensureBuffer(size_t size) {
+ if(likely(_sendBuffer->getRemaining()>=size)) return;
// too large for buffer...
if(unlikely(_maxPayloadSizegetRemaining())getRemaining()getRemaining())<(alignment-1)))
+ if(unlikely(_sendBuffer->getRemaining()<(alignment-1)))
ensureBuffer(alignment-1);
_sendBuffer->align(alignment);
@@ -425,9 +426,9 @@ namespace pvAccess {
}
}
- void BlockingTCPTransport::ensureData(int size) {
+ void BlockingTCPTransport::ensureData(size_t size) {
// enough of data?
- if(likely(((int)_socketBuffer->getRemaining())>=size)) return;
+ if(likely(_socketBuffer->getRemaining()>=size)) return;
// too large for buffer...
if(unlikely(MAX_ENSURE_DATA_BUFFER_SIZEgetRemaining())getRemaining()getRemaining())<(alignment-1)))
+ if(unlikely(_socketBuffer->getRemaining()<(alignment-1)))
ensureData(alignment-1);
_socketBuffer->align(alignment);
}
void BlockingTCPTransport::processReadCached(bool nestedCall,
- ReceiveStage inStage, int requiredBytes) {
+ ReceiveStage inStage, size_t requiredBytes) {
try {
while(likely(!_closed.get())) {
if(_stage==READ_FROM_SOCKET||inStage!=UNDEFINED_STAGE) {
@@ -521,7 +522,7 @@ namespace pvAccess {
// read at least requiredBytes bytes
- uintptr_t requiredPosition = (currentStartPosition+requiredBytes);
+ size_t requiredPosition = (currentStartPosition+requiredBytes);
while(_socketBuffer->getPosition()getPosition();
@@ -689,7 +690,7 @@ namespace pvAccess {
}
_socketBuffer->setLimit(_storedLimit);
- int newPosition = _storedPosition+_storedPayloadSize;
+ size_t newPosition = _storedPosition+_storedPayloadSize;
if(unlikely(newPosition>_storedLimit)) {
newPosition -= _storedLimit;
_socketBuffer->setPosition(_storedLimit);
@@ -778,6 +779,7 @@ namespace pvAccess {
int bytesToSend = limit-buffer->getPosition();
//LOG(logLevelInfo,"Total bytes to send: %d", bytesToSend);
+ //printf("Total bytes to send: %d\n", bytesToSend);
// limit sending
if(bytesToSend>maxBytesToSend) {
@@ -1010,6 +1012,18 @@ printf("sendThreadRunnner exception\n");
_sendQueueEvent.signal();
}
+ void BlockingTCPTransport::enqueueOnlySendRequest(TransportSender::shared_pointer const & sender) {
+ Lock lock(_sendQueueMutex);
+ if(unlikely(_closed.get())) return;
+ _sendQueue.push_back(sender);
+ }
+
+ void BlockingTCPTransport::flushSendQueue() {
+ Lock lock(_sendQueueMutex);
+ if(unlikely(_closed.get())) return;
+ _sendQueueEvent.signal();
+ }
+
/*
void BlockingTCPTransport::enqueueMonitorSendRequest(TransportSender::shared_pointer sender) {
Lock lock(_monitorMutex);
diff --git a/pvAccessApp/remote/blockingUDP.h b/pvAccessApp/remote/blockingUDP.h
index e751293..a315d39 100644
--- a/pvAccessApp/remote/blockingUDP.h
+++ b/pvAccessApp/remote/blockingUDP.h
@@ -110,15 +110,15 @@ namespace epics {
virtual void close(bool forced);
- virtual void ensureData(int size) {
+ virtual void ensureData(std::size_t size) {
// noop
}
- virtual void alignData(int alignment) {
+ virtual void alignData(std::size_t alignment) {
_receiveBuffer->align(alignment);
}
- virtual void startMessage(epics::pvData::int8 command, int ensureCapacity);
+ virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity);
virtual void endMessage();
virtual void flush(bool lastMessageCompleted) {
@@ -134,11 +134,11 @@ namespace epics {
// noop
}
- virtual void ensureBuffer(int size) {
+ virtual void ensureBuffer(std::size_t size) {
// noop
}
- virtual void alignBuffer(int alignment) {
+ virtual void alignBuffer(std::size_t alignment) {
_sendBuffer->align(alignment);
}
diff --git a/pvAccessApp/remote/blockingUDPTransport.cpp b/pvAccessApp/remote/blockingUDPTransport.cpp
index a490192..4b724e3 100644
--- a/pvAccessApp/remote/blockingUDPTransport.cpp
+++ b/pvAccessApp/remote/blockingUDPTransport.cpp
@@ -141,7 +141,7 @@ namespace epics {
}
}
- void BlockingUDPTransport::startMessage(int8 command, int ensureCapacity) {
+ void BlockingUDPTransport::startMessage(int8 command, size_t ensureCapacity) {
_lastMessageStartPosition = _sendBuffer->getPosition();
_sendBuffer->putByte(CA_MAGIC);
_sendBuffer->putByte(CA_VERSION);
@@ -276,11 +276,12 @@ namespace epics {
// command ID and paylaod
int8 command = receiveBuffer->getByte();
- int payloadSize = receiveBuffer->getInt();
- int nextRequestPosition = receiveBuffer->getPosition() + payloadSize;
+ // TODO check this cast (size_t must be 32-bit)
+ size_t payloadSize = receiveBuffer->getInt();
+ size_t nextRequestPosition = receiveBuffer->getPosition() + payloadSize;
// payload size check
- if(unlikely(nextRequestPosition>(int)receiveBuffer->getLimit())) return false;
+ if(unlikely(nextRequestPosition>receiveBuffer->getLimit())) return false;
// handle
_responseHandler->handleResponse(&fromAddress, thisTransport,
diff --git a/pvAccessApp/remote/remote.h b/pvAccessApp/remote/remote.h
index 0f17ee8..e0df5a2 100644
--- a/pvAccessApp/remote/remote.h
+++ b/pvAccessApp/remote/remote.h
@@ -111,7 +111,7 @@ namespace epics {
virtual ~TransportSendControl() {}
- virtual void startMessage(epics::pvData::int8 command, int ensureCapacity) = 0;
+ virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity) = 0;
virtual void endMessage() = 0;
virtual void flush(bool lastMessageCompleted) = 0;
@@ -261,6 +261,10 @@ namespace epics {
*/
virtual void enqueueSendRequest(TransportSender::shared_pointer const & sender) = 0;
+ virtual void enqueueOnlySendRequest(TransportSender::shared_pointer const & sender) {};
+
+ virtual void flushSendQueue() {};
+
};
class Channel;
@@ -315,7 +319,7 @@ namespace epics {
*/
virtual void
handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport,
- epics::pvData::int8 version, epics::pvData::int8 command, int payloadSize,
+ epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize,
epics::pvData::ByteBuffer* payloadBuffer) = 0;
};
@@ -335,7 +339,7 @@ namespace epics {
virtual ~AbstractResponseHandler() {}
virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport,
- epics::pvData::int8 version, epics::pvData::int8 command, int payloadSize,
+ epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize,
epics::pvData::ByteBuffer* payloadBuffer);
protected:
diff --git a/pvAccessApp/remote/simpleChannelSearchManagerImpl.h b/pvAccessApp/remote/simpleChannelSearchManagerImpl.h
index 1e6519d..267bfee 100644
--- a/pvAccessApp/remote/simpleChannelSearchManagerImpl.h
+++ b/pvAccessApp/remote/simpleChannelSearchManagerImpl.h
@@ -23,9 +23,9 @@ public:
void endMessage() {}
void flush(bool lastMessageCompleted) {}
void setRecipient(const osiSockAddr& sendTo) {}
- void startMessage(epics::pvData::int8 command, int ensureCapacity) {}
- void ensureBuffer(int size) {}
- void alignBuffer(int alignment) {}
+ void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity) {}
+ void ensureBuffer(std::size_t) {}
+ void alignBuffer(std::size_t alignment) {}
void flushSerializeBuffer() {}
void cachedSerialize(
const std::tr1::shared_ptr& field, epics::pvData::ByteBuffer* buffer)
diff --git a/pvAccessApp/remoteClient/clientContextImpl.cpp b/pvAccessApp/remoteClient/clientContextImpl.cpp
index c691fbe..a464732 100644
--- a/pvAccessApp/remoteClient/clientContextImpl.cpp
+++ b/pvAccessApp/remoteClient/clientContextImpl.cpp
@@ -30,6 +30,8 @@
#include
#include
+#include
+
using std::tr1::dynamic_pointer_cast;
using std::tr1::static_pointer_cast;
@@ -45,7 +47,7 @@ namespace epics {
String emptyString;
// TODO consider std::unordered_map
- typedef std::map IOIDResponseRequestMap;
+ typedef std::tr1::unordered_map IOIDResponseRequestMap;
#define EXCEPTION_GUARD(code) try { code; } \
@@ -88,7 +90,7 @@ namespace epics {
typedef std::tr1::shared_ptr shared_pointer;
typedef std::tr1::shared_ptr const_shared_pointer;
- static PVDataCreate* pvDataCreate;
+ static PVDataCreatePtr pvDataCreate;
static Status notInitializedStatus;
static Status destroyedStatus;
@@ -290,7 +292,7 @@ namespace epics {
- PVDataCreate* BaseRequestImpl::pvDataCreate = getPVDataCreate();
+ PVDataCreatePtr BaseRequestImpl::pvDataCreate = getPVDataCreate();
Status BaseRequestImpl::notInitializedStatus = Status(Status::STATUSTYPE_ERROR, "request not initialized");
Status BaseRequestImpl::destroyedStatus = Status(Status::STATUSTYPE_ERROR, "request destroyed");
@@ -371,7 +373,7 @@ namespace epics {
if (pendingRequest & QOS_INIT)
{
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
stopRequest();
@@ -474,7 +476,7 @@ namespace epics {
{
BaseRequestImpl::activate();
- if (m_pvRequest.get() == 0)
+ if (m_pvRequest == 0)
{
ChannelGet::shared_pointer thisPointer = dynamic_pointer_cast(shared_from_this());
PVStructure::shared_pointer nullPVStructure;
@@ -526,7 +528,7 @@ namespace epics {
if (pendingRequest & QOS_INIT)
{
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
stopRequest();
@@ -552,7 +554,7 @@ namespace epics {
// create data and its bitSet
{
Lock lock(m_structureMutex);
- m_structure.reset(transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
+ m_structure = transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
m_bitSet.reset(new BitSet(m_structure->getNumberFields()));
}
@@ -593,7 +595,19 @@ namespace epics {
return;
}
}
-
+/*
+// TODO bulk hack
+ if (lastRequest)
+ {
+ try {
+ m_channel->checkAndGetTransport()->flushSendQueue();
+ } catch (std::runtime_error &rte) {
+ stopRequest();
+ EXCEPTION_GUARD(m_channelGetRequester->getDone(channelNotConnected));
+ }
+ return;
+ }
+ */
if (!startRequest(lastRequest ? QOS_DESTROY | QOS_GET : QOS_DEFAULT)) {
EXCEPTION_GUARD(m_channelGetRequester->getDone(otherRequestPendingStatus));
return;
@@ -602,6 +616,7 @@ namespace epics {
try {
TransportSender::shared_pointer thisSender = shared_from_this();
m_channel->checkAndGetTransport()->enqueueSendRequest(thisSender);
+ //TODO bulk hack m_channel->checkAndGetTransport()->enqueueOnlySendRequest(thisSender);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelGetRequester->getDone(channelNotConnected));
@@ -665,7 +680,7 @@ namespace epics {
{
BaseRequestImpl::activate();
- if (m_pvRequest.get() == 0)
+ if (m_pvRequest == 0)
{
ChannelPut::shared_pointer thisPointer = dynamic_pointer_cast(shared_from_this());
PVStructure::shared_pointer nullPVStructure;
@@ -717,7 +732,7 @@ namespace epics {
if (pendingRequest & QOS_INIT)
{
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
else if (!(pendingRequest & QOS_GET))
{
@@ -752,7 +767,7 @@ namespace epics {
// create data and its bitSet
{
Lock lock(m_structureMutex);
- m_structure.reset(transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
+ m_structure = transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
m_bitSet.reset(new BitSet(m_structure->getNumberFields()));
}
@@ -897,7 +912,7 @@ namespace epics {
{
BaseRequestImpl::activate();
- if (m_pvRequest.get() == 0)
+ if (m_pvRequest == 0)
{
ChannelPutGet::shared_pointer thisPointer = dynamic_pointer_cast(shared_from_this());
PVStructure::shared_pointer nullPVStructure;
@@ -947,7 +962,7 @@ namespace epics {
buffer->putByte((int8)QOS_INIT);
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
else if (pendingRequest & (QOS_GET | QOS_GET_PUT)) {
// noop
@@ -983,8 +998,8 @@ namespace epics {
{
Lock lock(m_structureMutex);
- m_putData.reset(registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
- m_getData.reset(registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
+ m_putData = registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
+ m_getData = registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
}
// notify
@@ -1186,7 +1201,7 @@ namespace epics {
{
BaseRequestImpl::activate();
- if (m_pvRequest.get() == 0)
+ if (m_pvRequest == 0)
{
ChannelRPC::shared_pointer thisPointer = dynamic_pointer_cast(shared_from_this());
EXCEPTION_GUARD(m_channelRPCRequester->channelRPCConnect(pvRequestNull, thisPointer));
@@ -1235,14 +1250,14 @@ namespace epics {
buffer->putByte((int8)QOS_INIT);
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
else
{
{
// no need to lock here, since it is already locked via TransportSender IF
//Lock lock(m_structureMutex);
- m_channel->getTransport()->getIntrospectionRegistry()->serializeStructure(buffer, control, m_structure.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializeStructure(buffer, control, m_structure);
// release arguments structure
m_structure.reset();
}
@@ -1382,7 +1397,7 @@ namespace epics {
{
BaseRequestImpl::activate();
- if (m_pvRequest.get() == 0)
+ if (m_pvRequest == 0)
{
ChannelArray::shared_pointer thisPointer = dynamic_pointer_cast(shared_from_this());
PVArray::shared_pointer nullPVArray;
@@ -1430,7 +1445,7 @@ namespace epics {
if (pendingRequest & QOS_INIT)
{
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
else if (pendingRequest & QOS_GET)
{
@@ -1476,7 +1491,7 @@ namespace epics {
FieldConstPtr field = transport->getIntrospectionRegistry()->deserialize(payloadBuffer, transport.get());
{
Lock lock(m_structureMutex);
- m_structure.reset(dynamic_cast(getPVDataCreate()->createPVField(0, field)));
+ m_structure = dynamic_pointer_cast(getPVDataCreate()->createPVField(field));
}
// notify
@@ -1786,31 +1801,6 @@ namespace epics {
- class MonitorElementImpl : public MonitorElement
- {
- public:
-
- PVStructure::shared_pointer m_pvStructure;
- BitSet::shared_pointer m_changedBitSet;
- BitSet::shared_pointer m_overrunBitSet;
-
- virtual PVStructure::shared_pointer const & getPVStructure()
- {
- return m_pvStructure;
- }
-
- virtual BitSet::shared_pointer const & getChangedBitSet()
- {
- return m_changedBitSet;
- }
-
- virtual BitSet::shared_pointer const & getOverrunBitSet()
- {
- return m_overrunBitSet;
- }
- };
-
-
class MonitorStrategy : public Monitor {
public:
virtual ~MonitorStrategy() {};
@@ -1837,7 +1827,7 @@ namespace epics {
public:
MonitorStrategyNotify(MonitorRequester::shared_pointer const & callback) :
- m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElementImpl())
+ m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElement())
{
}
@@ -1857,7 +1847,7 @@ namespace epics {
m_callback->monitorEvent(thisMonitor);
}
- virtual MonitorElement::shared_pointer const & poll() {
+ virtual MonitorElement::shared_pointer poll() {
Lock guard(m_mutex);
if (m_gotMonitor)
return m_nullMonitorElement;
@@ -1865,7 +1855,7 @@ namespace epics {
return m_monitorElement;
}
- virtual void release(MonitorElement::shared_pointer const & monitorElement) {
+ virtual void release(MonitorElement::shared_pointer & monitorElement) {
Lock guard(m_mutex);
m_gotMonitor = false;
}
@@ -1896,12 +1886,11 @@ namespace epics {
MonitorElement::shared_pointer m_nullMonitorElement;
MonitorElement::shared_pointer m_monitorElement;
- std::tr1::shared_ptr m_monitorElementImpl;
public:
MonitorStrategyEntire(MonitorRequester::shared_pointer const & callback) :
- m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElementImpl()), m_monitorElementImpl(static_pointer_cast(m_monitorElement))
+ m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElement())
{
}
@@ -1912,24 +1901,24 @@ namespace epics {
virtual void init(StructureConstPtr const & structure) {
Lock guard(m_mutex);
- m_monitorElementImpl->m_pvStructure.reset(getPVDataCreate()->createPVStructure(0, structure));
- int numberFields = m_monitorElementImpl->m_pvStructure->getNumberFields();
- m_monitorElementImpl->m_changedBitSet.reset(new BitSet(numberFields));
- m_monitorElementImpl->m_overrunBitSet.reset(new BitSet(numberFields));
+ m_monitorElement->pvStructurePtr = getPVDataCreate()->createPVStructure(structure);
+ int numberFields = m_monitorElement->pvStructurePtr->getNumberFields();
+ m_monitorElement->changedBitSet.reset(new BitSet(numberFields));
+ m_monitorElement->overrunBitSet.reset(new BitSet(numberFields));
}
virtual void response(Transport::shared_pointer const & transport, ByteBuffer* payloadBuffer) {
Lock guard(m_mutex);
// simply deserialize and notify
- m_monitorElementImpl->m_changedBitSet->deserialize(payloadBuffer, transport.get());
- m_monitorElementImpl->m_pvStructure->deserialize(payloadBuffer, transport.get(), m_monitorElementImpl->m_changedBitSet.get());
- m_monitorElementImpl->m_overrunBitSet->deserialize(payloadBuffer, transport.get());
+ m_monitorElement->changedBitSet->deserialize(payloadBuffer, transport.get());
+ m_monitorElement->pvStructurePtr->deserialize(payloadBuffer, transport.get(), m_monitorElement->changedBitSet.get());
+ m_monitorElement->overrunBitSet->deserialize(payloadBuffer, transport.get());
m_gotMonitor = true;
Monitor::shared_pointer thisMonitor = shared_from_this();
m_callback->monitorEvent(thisMonitor);
}
- virtual MonitorElement::shared_pointer const & poll() {
+ virtual MonitorElement::shared_pointer poll() {
Lock guard(m_mutex);
if (m_gotMonitor)
return m_nullMonitorElement;
@@ -1937,7 +1926,7 @@ namespace epics {
return m_monitorElement;
}
- virtual void release(MonitorElement::shared_pointer const & monitorElement) {
+ virtual void release(MonitorElement::shared_pointer & monitorElement) {
Lock guard(m_mutex);
m_gotMonitor = false;
}
@@ -1976,13 +1965,12 @@ namespace epics {
MonitorElement::shared_pointer m_nullMonitorElement;
MonitorElement::shared_pointer m_monitorElement;
- std::tr1::shared_ptr m_monitorElementImpl;
public:
MonitorStrategySingle(MonitorRequester::shared_pointer callback) :
m_callback(callback), m_gotMonitor(false), m_mutex(),
- m_needToCompress(false), m_monitorElement(new MonitorElementImpl()), m_monitorElementImpl(static_pointer_cast(m_monitorElement))
+ m_needToCompress(false), m_monitorElement(new MonitorElement())
{
}
@@ -1993,10 +1981,10 @@ namespace epics {
virtual void init(StructureConstPtr const & structure) {
Lock guard(m_mutex);
- m_monitorElementImpl->m_pvStructure.reset(getPVDataCreate()->createPVStructure(0, structure));
- int numberFields = m_monitorElementImpl->m_pvStructure->getNumberFields();
- m_monitorElementImpl->m_changedBitSet.reset(new BitSet(numberFields));
- m_monitorElementImpl->m_overrunBitSet.reset(new BitSet(numberFields));
+ m_monitorElement->pvStructurePtr = getPVDataCreate()->createPVStructure(structure);
+ int numberFields = m_monitorElement->pvStructurePtr->getNumberFields();
+ m_monitorElement->changedBitSet.reset(new BitSet(numberFields));
+ m_monitorElement->overrunBitSet.reset(new BitSet(numberFields));
m_structureChangeBitSet.reset(new BitSet(numberFields));
m_structureOverrunBitSet.reset(new BitSet(numberFields));
@@ -2009,9 +1997,9 @@ namespace epics {
if (!m_gotMonitor)
{
// simply deserialize and notify
- m_monitorElementImpl->m_changedBitSet->deserialize(payloadBuffer, transport.get());
- m_monitorElementImpl->m_pvStructure->deserialize(payloadBuffer, transport.get(), m_monitorElementImpl->m_changedBitSet.get());
- m_monitorElementImpl->m_overrunBitSet->deserialize(payloadBuffer, transport.get());
+ m_monitorElement->changedBitSet->deserialize(payloadBuffer, transport.get());
+ m_monitorElement->pvStructurePtr->deserialize(payloadBuffer, transport.get(), m_monitorElement->changedBitSet.get());
+ m_monitorElement->overrunBitSet->deserialize(payloadBuffer, transport.get());
m_gotMonitor = true;
Monitor::shared_pointer thisMonitor = shared_from_this();
m_callback->monitorEvent(thisMonitor);
@@ -2020,48 +2008,48 @@ namespace epics {
{
// deserialize first
m_structureChangeBitSet->deserialize(payloadBuffer, transport.get());
- m_monitorElementImpl->m_pvStructure->deserialize(payloadBuffer, transport.get(), m_structureChangeBitSet.get());
+ m_monitorElement->pvStructurePtr->deserialize(payloadBuffer, transport.get(), m_structureChangeBitSet.get());
m_structureOverrunBitSet->deserialize(payloadBuffer, transport.get());
// OR local overrun
// TODO should work only on uncompressed
- m_monitorElementImpl->m_overrunBitSet->or_and(*m_structureChangeBitSet.get(), *m_monitorElementImpl->m_changedBitSet.get());
+ m_monitorElement->overrunBitSet->or_and(*m_structureChangeBitSet.get(), *m_monitorElement->changedBitSet.get());
// OR new changes
- *(m_monitorElementImpl->m_changedBitSet) |= *m_structureChangeBitSet.get();
+ *(m_monitorElement->changedBitSet) |= *m_structureChangeBitSet.get();
// OR remote overrun
- *(m_monitorElementImpl->m_overrunBitSet) |= *m_structureOverrunBitSet.get();
+ *(m_monitorElement->overrunBitSet) |= *m_structureOverrunBitSet.get();
}
}
- virtual MonitorElement::shared_pointer const & poll() {
+ virtual MonitorElement::shared_pointer poll() {
Lock guard(m_mutex);
if (!m_gotMonitor) return m_nullMonitorElement;
// compress if needed
if (m_needToCompress)
{
- BitSetUtil::compress(m_monitorElementImpl->m_changedBitSet.get(), m_monitorElementImpl->m_pvStructure.get());
- BitSetUtil::compress(m_monitorElementImpl->m_overrunBitSet.get(), m_monitorElementImpl->m_pvStructure.get());
+ BitSetUtil::compress(m_monitorElement->changedBitSet.get(), m_monitorElement->pvStructurePtr.get());
+ BitSetUtil::compress(m_monitorElement->overrunBitSet.get(), m_monitorElement->pvStructurePtr.get());
m_needToCompress = false;
}
return m_monitorElement;
}
- virtual void release(MonitorElement::shared_pointer const & monitorElement) {
+ virtual void release(MonitorElement::shared_pointer & monitorElement) {
Lock guard(m_mutex);
m_gotMonitor = false;
}
Status start() {
Lock guard(m_mutex);
- if (!m_monitorElementImpl->m_changedBitSet.get())
+ if (!m_monitorElement->changedBitSet.get())
return Status(Status::STATUSTYPE_ERROR, "Monitor not connected.");
m_gotMonitor = false;
- m_monitorElementImpl->m_changedBitSet->clear();
- m_monitorElementImpl->m_overrunBitSet->clear();
+ m_monitorElement->changedBitSet->clear();
+ m_monitorElement->overrunBitSet->clear();
return Status::Ok;
}
@@ -2104,7 +2092,7 @@ namespace epics {
{
BaseRequestImpl::activate();
- if (m_pvRequest.get() == 0)
+ if (m_pvRequest == 0)
{
Monitor::shared_pointer thisPointer = dynamic_pointer_cast(shared_from_this());
StructureConstPtr nullPVStructure;
@@ -2113,10 +2101,10 @@ namespace epics {
}
int queueSize = 2;
- PVField* pvField = m_pvRequest->getSubField("record.queueSize");
- if (pvField) {
- PVString* pvString = dynamic_cast(pvField);
- if (pvString)
+ PVFieldPtr pvField = m_pvRequest->getSubField("record.queueSize");
+ if (pvField.get()) {
+ PVStringPtr pvString = dynamic_pointer_cast(pvField);
+ if (pvString.get())
{
String value = pvString->get();
@@ -2184,7 +2172,7 @@ namespace epics {
if (pendingRequest & QOS_INIT)
{
// pvRequest
- m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
+ m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
}
stopRequest();
@@ -2336,12 +2324,12 @@ namespace epics {
BaseRequestImpl::destroy();
}
- virtual MonitorElement::shared_pointer const & poll()
+ virtual MonitorElement::shared_pointer poll()
{
return m_monitorStrategy->poll();
}
- virtual void release(MonitorElement::shared_pointer const & monitorElement)
+ virtual void release(MonitorElement::shared_pointer & monitorElement)
{
m_monitorStrategy->release(monitorElement);
}
@@ -2396,7 +2384,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
char ipAddrStr[48];
ipAddrToDottedIP(&responseFrom->ia, ipAddrStr, sizeof(ipAddrStr));
@@ -2420,7 +2408,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
@@ -2449,7 +2437,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
@@ -2512,7 +2500,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
// reception timestamp
TimeStamp timestamp;
@@ -2560,17 +2548,16 @@ namespace epics {
// TODO smart pointers
// extra data
- PVFieldPtr data = 0;
+ PVFieldPtr data;
const FieldConstPtr field = IntrospectionRegistry::deserializeFull(payloadBuffer, transport.get());
if (field != 0)
{
- data = getPVDataCreate()->createPVField(0, field);
+ data = getPVDataCreate()->createPVField(field);
data->deserialize(payloadBuffer, transport.get());
}
// notify beacon handler
beaconHandler->beaconNotify(responseFrom, version, ×tamp, &startupTimestamp, sequentalID, data);
- if (data) delete data;
}
};
@@ -2586,7 +2573,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
@@ -2616,7 +2603,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
@@ -2653,7 +2640,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
+ size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
{
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
@@ -2734,7 +2721,7 @@ namespace epics {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
if (command < 0 || command >= (int8)m_handlerTable.size())
{
@@ -3053,7 +3040,7 @@ namespace epics {
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
int32_t& getUserValue() { return m_userValue; }
diff --git a/pvAccessApp/server/beaconServerStatusProvider.cpp b/pvAccessApp/server/beaconServerStatusProvider.cpp
index 9ad7a7f..358d6cf 100644
--- a/pvAccessApp/server/beaconServerStatusProvider.cpp
+++ b/pvAccessApp/server/beaconServerStatusProvider.cpp
@@ -23,17 +23,28 @@ DefaultBeaconServerStatusProvider::~DefaultBeaconServerStatusProvider()
void DefaultBeaconServerStatusProvider::initialize()
{
- FieldCreate* fieldCreate = getFieldCreate();
- FieldConstPtrArray fields = new FieldConstPtr[6];
- // TODO hierarchy can be used...
- fields[0] = fieldCreate->createScalar("connections",pvInt);
- fields[1] = fieldCreate->createScalar("allocatedMemory",pvLong);
- fields[2] = fieldCreate->createScalar("freeMemory",pvLong);
- fields[3] = fieldCreate->createScalar("threads",pvInt);
- fields[4] = fieldCreate->createScalar("deadlocks",pvInt);
- fields[5] = fieldCreate->createScalar("averageSystemLoad",pvDouble);
+ FieldCreatePtr fieldCreate = getFieldCreate();
- _status.reset(getPVDataCreate()->createPVStructure(0,"status",6,fields));
+ StringArray fieldNames;
+ fieldNames.resize(6);
+ fieldNames[0] = "connections";
+ fieldNames[1] = "allocatedMemory";
+ fieldNames[2] = "freeMemory";
+ fieldNames[3] = "threads";
+ fieldNames[4] = "deadlocks";
+ fieldNames[5] = "averageSystemLoad";
+
+ FieldConstPtrArray fields;
+ fields.resize(6);
+ // TODO hierarchy can be used...
+ fields[0] = fieldCreate->createScalar(pvInt);
+ fields[1] = fieldCreate->createScalar(pvLong);
+ fields[2] = fieldCreate->createScalar(pvLong);
+ fields[3] = fieldCreate->createScalar(pvInt);
+ fields[4] = fieldCreate->createScalar(pvInt);
+ fields[5] = fieldCreate->createScalar(pvDouble);
+
+ _status = getPVDataCreate()->createPVStructure(fieldCreate->createStructure(fieldNames, fields));
}
PVField::shared_pointer DefaultBeaconServerStatusProvider::getServerStatusData()
diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp
index 988bb4c..1862885 100644
--- a/pvAccessApp/server/responseHandlers.cpp
+++ b/pvAccessApp/server/responseHandlers.cpp
@@ -28,7 +28,7 @@ namespace pvAccess {
void ServerBadResponse::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -74,7 +74,7 @@ ServerResponseHandler::ServerResponseHandler(ServerContextImpl::shared_pointer c
void ServerResponseHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
if(command<0||command>=(int8)m_handlerTable.size())
{
@@ -98,7 +98,7 @@ void ServerResponseHandler::handleResponse(osiSockAddr* responseFrom,
void ServerConnectionValidationHandler::handleResponse(
osiSockAddr* responseFrom, Transport::shared_pointer const & transport, int8 version,
- int8 command, int payloadSize,
+ int8 command, size_t payloadSize,
ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
@@ -116,7 +116,7 @@ void ServerConnectionValidationHandler::handleResponse(
void ServerEchoHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -128,7 +128,7 @@ void ServerEchoHandler::handleResponse(osiSockAddr* responseFrom,
void ServerIntrospectionSearchHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -149,7 +149,7 @@ ServerSearchHandler::~ServerSearchHandler()
void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -273,7 +273,7 @@ void ServerChannelFindRequesterImpl::send(ByteBuffer* buffer, TransportSendContr
/****************************************************************************************/
void ServerCreateChannelHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -424,7 +424,7 @@ String ServerChannelRequesterImpl::getRequesterName()
void ServerChannelRequesterImpl::message(const String message, const MessageType messageType)
{
- LOG(logLevelDebug, "[%s] %s", messageTypeName[messageType].c_str(), message.c_str());
+ LOG(logLevelDebug, "[%s] %s", getMessageTypeName(messageType).c_str(), message.c_str());
}
void ServerChannelRequesterImpl::lock()
@@ -479,7 +479,7 @@ void ServerChannelRequesterImpl::createChannelFailedResponse(ByteBuffer* buffer,
void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -520,7 +520,7 @@ void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom,
void ServerGetHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer)
+ size_t payloadSize, ByteBuffer* payloadBuffer)
{
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -710,7 +710,7 @@ void ServerChannelGetRequesterImpl::send(ByteBuffer* buffer, TransportSendContro
/****************************************************************************************/
void ServerPutHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -922,7 +922,7 @@ void ServerChannelPutRequesterImpl::send(ByteBuffer* buffer, TransportSendContro
/****************************************************************************************/
void ServerPutGetHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -1152,7 +1152,7 @@ void ServerChannelPutGetRequesterImpl::send(ByteBuffer* buffer, TransportSendCon
/****************************************************************************************/
void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -1246,7 +1246,7 @@ void ServerMonitorRequesterImpl::activate(PVStructure::shared_pointer const & pv
INIT_EXCEPTION_GUARD(CMD_MONITOR, _channelMonitor = _channel->getChannel()->createMonitor(thisPointer, pvRequest));
}
-void ServerMonitorRequesterImpl::monitorConnect(const Status& status, Monitor::shared_pointer const & monitor, epics::pvData::StructureConstPtr const & structure)
+void ServerMonitorRequesterImpl::monitorConnect(const Status& status, Monitor::shared_pointer & monitor, epics::pvData::StructureConstPtr const & structure)
{
{
Lock guard(_mutex);
@@ -1352,14 +1352,14 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
buffer->putByte((int8)request);
// changedBitSet and data, if not notify only (i.e. queueSize == -1)
- BitSet::shared_pointer changedBitSet = element->getChangedBitSet();
+ BitSet::shared_pointer changedBitSet = element->changedBitSet;
if (changedBitSet != NULL)
{
changedBitSet->serialize(buffer, control);
- element->getPVStructure()->serialize(buffer, control, changedBitSet.get());
+ element->pvStructurePtr->serialize(buffer, control, changedBitSet.get());
// overrunBitset
- element->getOverrunBitSet()->serialize(buffer, control);
+ element->overrunBitSet->serialize(buffer, control);
}
monitor->release(element);
@@ -1370,7 +1370,7 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
/****************************************************************************************/
void ServerArrayHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -1595,7 +1595,7 @@ void ServerChannelArrayRequesterImpl::send(ByteBuffer* buffer, TransportSendCont
/****************************************************************************************/
void ServerCancelRequestHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -1635,7 +1635,7 @@ void ServerCancelRequestHandler::failureResponse(Transport::shared_pointer const
/****************************************************************************************/
void ServerProcessHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -1794,7 +1794,7 @@ void ServerChannelProcessRequesterImpl::send(ByteBuffer* buffer, TransportSendCo
/****************************************************************************************/
void ServerGetFieldHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -1873,7 +1873,7 @@ void ServerGetFieldRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
/****************************************************************************************/
void ServerRPCHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
- int payloadSize, ByteBuffer* payloadBuffer) {
+ size_t payloadSize, ByteBuffer* payloadBuffer) {
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
@@ -2034,7 +2034,7 @@ void ServerChannelRPCRequesterImpl::send(ByteBuffer* buffer, TransportSendContro
}
else
{
- introspectionRegistry->serializeStructure(buffer, control, _pvResponse.get());
+ introspectionRegistry->serializeStructure(buffer, control, _pvResponse);
}
}
}
diff --git a/pvAccessApp/server/responseHandlers.h b/pvAccessApp/server/responseHandlers.h
index 74921ba..d389c2f 100644
--- a/pvAccessApp/server/responseHandlers.h
+++ b/pvAccessApp/server/responseHandlers.h
@@ -43,7 +43,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
/**
@@ -58,7 +58,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
private:
/**
* Table of response handlers for each command ID.
@@ -78,7 +78,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
/**
@@ -102,7 +102,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class EchoTransportSender : public TransportSender {
@@ -142,7 +142,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
/****************************************************************************************/
@@ -161,7 +161,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
private:
std::vector _providers;
@@ -208,7 +208,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
private:
void disconnect(Transport::shared_pointer const & transport);
@@ -257,7 +257,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
@@ -299,7 +299,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class ServerChannelGetRequesterImpl :
@@ -352,7 +352,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class ServerChannelPutRequesterImpl :
@@ -405,7 +405,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class ServerChannelPutGetRequesterImpl :
@@ -459,7 +459,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
@@ -482,7 +482,7 @@ namespace pvAccess {
ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid,
Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest);
- void monitorConnect(const epics::pvData::Status& status, epics::pvData::Monitor::shared_pointer const & monitor, epics::pvData::StructureConstPtr const & structure);
+ void monitorConnect(const epics::pvData::Status& status, epics::pvData::Monitor::shared_pointer & monitor, epics::pvData::StructureConstPtr const & structure);
void unlisten(epics::pvData::Monitor::shared_pointer const & monitor);
void monitorEvent(epics::pvData::Monitor::shared_pointer const & monitor);
void lock();
@@ -511,7 +511,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class ServerChannelArrayRequesterImpl :
@@ -565,7 +565,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
private:
void failureResponse(Transport::shared_pointer const & transport, pvAccessID ioid, const epics::pvData::Status& errorStatus);
@@ -585,7 +585,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class ServerChannelProcessRequesterImpl :
@@ -634,7 +634,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
private:
void getFieldFailureResponse(Transport::shared_pointer const & transport, const pvAccessID ioid, const epics::pvData::Status& errorStatus);
};
@@ -706,7 +706,7 @@ namespace pvAccess {
virtual void handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
- int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
+ std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
};
class ServerChannelRPCRequesterImpl :
diff --git a/pvAccessApp/utils/introspectionRegistry.cpp b/pvAccessApp/utils/introspectionRegistry.cpp
index b3af587..a472574 100644
--- a/pvAccessApp/utils/introspectionRegistry.cpp
+++ b/pvAccessApp/utils/introspectionRegistry.cpp
@@ -17,15 +17,11 @@ namespace pvAccess {
const int8 IntrospectionRegistry::NULL_TYPE_CODE = (int8)-1;
const int8 IntrospectionRegistry::ONLY_ID_TYPE_CODE = (int8)-2;
const int8 IntrospectionRegistry::FULL_WITH_ID_TYPE_CODE = (int8)-3;
-PVDataCreate* IntrospectionRegistry::_pvDataCreate = 0;
-FieldCreate* IntrospectionRegistry::_fieldCreate = 0;
+PVDataCreatePtr IntrospectionRegistry::_pvDataCreate (getPVDataCreate());
+FieldCreatePtr IntrospectionRegistry::_fieldCreate(getFieldCreate());
IntrospectionRegistry::IntrospectionRegistry(bool serverSide)
{
- // TODO not optimal
- _pvDataCreate = getPVDataCreate();
- _fieldCreate = getFieldCreate();
-
_direction = serverSide ? 1 : -1;
reset();
}
@@ -181,7 +177,7 @@ void IntrospectionRegistry::serialize(FieldConstPtr field, StructureConstPtr par
FieldConstPtr IntrospectionRegistry::deserialize(ByteBuffer* buffer, DeserializableControl* control, IntrospectionRegistry* registry)
{
control->ensureData(1);
- uintptr_t pos = buffer->getPosition();
+ size_t pos = buffer->getPosition();
const int8 typeCode = buffer->getByte();
if(typeCode == IntrospectionRegistry::NULL_TYPE_CODE)
{
@@ -225,12 +221,11 @@ void IntrospectionRegistry::serializeStructure(ByteBuffer* buffer, SerializableC
PVStructurePtr IntrospectionRegistry::deserializeStructure(ByteBuffer* buffer, DeserializableControl* control)
{
- PVStructurePtr pvStructure = NULL;
+ PVStructurePtr pvStructure;
FieldConstPtr structureField = deserialize(buffer, control);
- if (structureField != NULL)
+ if (structureField.get() != NULL)
{
- pvStructure = _pvDataCreate->createPVStructure(NULL,
- static_pointer_cast(structureField));
+ pvStructure = _pvDataCreate->createPVStructure(static_pointer_cast(structureField));
pvStructure->deserialize(buffer, control);
}
return pvStructure;
@@ -252,12 +247,9 @@ PVStructurePtr IntrospectionRegistry::deserializeStructureAndCreatePVStructure(B
{
FieldConstPtr field = deserialize(buffer, control);
if (field == NULL)
- {
- return NULL;
- }
- PVStructurePtr retVal = _pvDataCreate->createPVStructure(NULL,
- static_pointer_cast(field));
- return retVal;
+ return PVStructurePtr();
+
+ return _pvDataCreate->createPVStructure(static_pointer_cast(field));
}
void IntrospectionRegistry::serializeStatus(ByteBuffer* buffer, SerializableControl* control, const Status& status)
diff --git a/pvAccessApp/utils/introspectionRegistry.h b/pvAccessApp/utils/introspectionRegistry.h
index b99f5f0..ba0314f 100644
--- a/pvAccessApp/utils/introspectionRegistry.h
+++ b/pvAccessApp/utils/introspectionRegistry.h
@@ -211,12 +211,12 @@ typedef std::map registryMap_t;
/**
* PVField factory.
*/
- static epics::pvData::PVDataCreate* _pvDataCreate;
+ static epics::pvData::PVDataCreatePtr _pvDataCreate;
/**
* Field factory.
*/
- static epics::pvData::FieldCreate* _fieldCreate;
+ static epics::pvData::FieldCreatePtr _fieldCreate;
bool registryContainsValue(epics::pvData::FieldConstPtr field, short& key);
};
diff --git a/testApp/remote/eget.cpp b/testApp/remote/eget.cpp
index 31b6f75..2961b19 100644
--- a/testApp/remote/eget.cpp
+++ b/testApp/remote/eget.cpp
@@ -124,13 +124,11 @@ void convertToString(StringBuilder buffer,PVField * pv,int notFirst)
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
{
PVFieldPtrArray fieldsData = data->getPVFields();
- if (fieldsData != 0) {
- int length = data->getStructure()->getNumberFields();
- for(int i=0; igetStructure()->getNumberFields();
+ for(int i=0; i(pv);
BooleanArrayData data = BooleanArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
BooleanArray value = data.data;
if(value[data.offset]) {
@@ -163,9 +161,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVByteArray *pvdata = static_cast(pv);
ByteArrayData data = ByteArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -182,9 +180,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVShortArray *pvdata = static_cast(pv);
ShortArrayData data = ShortArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -201,9 +199,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVIntArray *pvdata = static_cast(pv);
IntArrayData data = IntArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -220,9 +218,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVLongArray *pvdata = static_cast(pv);
LongArrayData data = LongArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int64 val = data.data[data.offset];
char buf[16];
@@ -239,9 +237,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVFloatArray *pvdata = static_cast(pv);
FloatArrayData data = FloatArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
float val = data.data[data.offset];
char buf[16];
@@ -258,9 +256,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVDoubleArray *pvdata = static_cast(pv);
DoubleArrayData data = DoubleArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
double val = data.data[data.offset];
char buf[16];
@@ -277,9 +275,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVStringArray *pvdata = static_cast(pv);
StringArrayData data = StringArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
StringArray value = data.data;
if(num==1) {
if(value[data.offset].length()>0) {
@@ -307,13 +305,13 @@ void convertStructureArray(StringBuilder buffer,
return;
}
StructureArrayData data = StructureArrayData();
- pvdata->get(0, length, &data);
+ pvdata->get(0, length, data);
for (int i = 0; i < length; i++) {
- PVStructure *pvStructure = data.data[i];
+ PVStructurePtr pvStructure = data.data[i];
if (pvStructure == 0) {
*buffer += "null";
} else {
- convertToString(buffer,pvStructure,notFirst+1);
+ convertToString(buffer,pvStructure.get(),notFirst+1);
}
}
}
@@ -369,8 +367,8 @@ char *url_encode(char *str) {
void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
{
- PVStringArray* labels = static_cast(pvStruct->getScalarArrayField("labels", pvString));
- if (labels == 0)
+ PVStringArrayPtr labels = static_pointer_cast(pvStruct->getScalarArrayField("labels", pvString));
+ if (labels.get() == 0)
return; // TODO
int numColumns = labels->getLength();
@@ -379,23 +377,24 @@ void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
// next numColumns fields are columns
int maxValues = 0;
- vector columnData;
+// vector columnData;
+ vector*> columnData;
PVFieldPtrArray fields = pvStruct->getPVFields();
for (int i = 0; i < numColumns; i++)
{
DoubleArrayData values;
// TODO we relay on field ordering here (normativeType, labels, )
- PVDoubleArray* arrayField = static_cast(fields[i+2]);
- int count = arrayField->get(0, arrayField->getLength(), &values);
+ PVDoubleArrayPtr arrayField = static_pointer_cast(fields[i+2]);
+ int count = arrayField->get(0, arrayField->getLength(), values);
if (count > maxValues) maxValues = count;
- columnData.push_back(values);
+ columnData.push_back(&values.data);
}
std::cout << std::left;
// first print labels
StringArrayData data;
- labels->get(0, numColumns, &data);
+ labels->get(0, numColumns, data);
for (int i = 0; i < numColumns; i++)
{
std::cout << std::setw(16) << data.data[i];
@@ -408,7 +407,8 @@ void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
{
for (int i = 0; i < numColumns; i++)
{
- std::cout << std::setw(16) << columnData[i].data[r];
+// std::cout << std::setw(16) << columnData[i].data[r];
+ std::cout << std::setw(16) << (*columnData[i])[r];
}
std::cout << std::endl;
}
@@ -422,8 +422,8 @@ void toNTString(StringBuilder buffer, PVField *pv,int notFirst)
{
PVStructure* pvStruct = static_cast(pv);
// TODO type check, getStringField is verbose
- PVString* ntType = static_cast(pvStruct->getSubField("normativeType"));
- if (ntType)
+ PVStringPtr ntType = static_pointer_cast(pvStruct->getSubField("normativeType"));
+ if (ntType.get())
{
String value = ntType->get();
@@ -508,7 +508,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
@@ -610,7 +610,7 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC::shared_pointer const & channelRPC)
@@ -713,7 +713,7 @@ public:
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
@@ -935,15 +935,17 @@ int main (int argc, char *argv[])
}
int i = 0;
- FieldConstPtrArray fields = new FieldConstPtr[parameters.size()];
+ StringArray fieldNames(parameters.size());
+ FieldConstPtrArray fields(parameters.size());
for (vector< pair >::iterator iter = parameters.begin();
iter != parameters.end();
iter++, i++)
{
- fields[i] = getFieldCreate()->createScalar(iter->first, pvString);
+ fieldNames[i] = iter->first;
+ fields[i] = getFieldCreate()->createScalar(pvString);
}
PVStructure::shared_pointer args(
- new PVStructure(NULL, getFieldCreate()->createStructure("", parameters.size(), fields)));
+ new PVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
for (vector< pair >::iterator iter = parameters.begin();
iter != parameters.end();
iter++)
diff --git a/testApp/remote/pvget.cpp b/testApp/remote/pvget.cpp
index 009de83..6ab0990 100644
--- a/testApp/remote/pvget.cpp
+++ b/testApp/remote/pvget.cpp
@@ -123,16 +123,14 @@ void convertToString(StringBuilder buffer,PVField * pv,int notFirst)
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
{
PVFieldPtrArray fieldsData = data->getPVFields();
- if (fieldsData != 0) {
- int length = data->getStructure()->getNumberFields();
- for(int i=0; igetStructure()->getNumberFields();
+ for(int i=0; igetScalarArray();
ScalarType type = array->getElementType();
@@ -141,9 +139,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVBooleanArray *pvdata = static_cast(pv);
BooleanArrayData data = BooleanArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
BooleanArray value = data.data;
if(value[data.offset]) {
@@ -162,9 +160,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVByteArray *pvdata = static_cast(pv);
ByteArrayData data = ByteArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -181,9 +179,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVShortArray *pvdata = static_cast(pv);
ShortArrayData data = ShortArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -200,9 +198,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVIntArray *pvdata = static_cast(pv);
IntArrayData data = IntArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -219,9 +217,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVLongArray *pvdata = static_cast(pv);
LongArrayData data = LongArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int64 val = data.data[data.offset];
char buf[16];
@@ -238,9 +236,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVFloatArray *pvdata = static_cast(pv);
FloatArrayData data = FloatArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
float val = data.data[data.offset];
char buf[16];
@@ -257,9 +255,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVDoubleArray *pvdata = static_cast(pv);
DoubleArrayData data = DoubleArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
double val = data.data[data.offset];
char buf[16];
@@ -276,9 +274,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVStringArray *pvdata = static_cast(pv);
StringArrayData data = StringArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
StringArray value = data.data;
if(num==1) {
if(value[data.offset].length()>0) {
@@ -306,13 +304,13 @@ void convertStructureArray(StringBuilder buffer,
return;
}
StructureArrayData data = StructureArrayData();
- pvdata->get(0, length, &data);
+ pvdata->get(0, length, data);
for (int i = 0; i < length; i++) {
- PVStructure *pvStructure = data.data[i];
+ PVStructurePtr pvStructure = data.data[i];
if (pvStructure == 0) {
*buffer += "null";
} else {
- convertToString(buffer,pvStructure,notFirst+1);
+ convertToString(buffer,pvStructure.get(),notFirst+1);
}
}
}
@@ -379,7 +377,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
@@ -475,7 +473,7 @@ public:
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
diff --git a/testApp/remote/pvput.cpp b/testApp/remote/pvput.cpp
index 014f0e9..ea2d9d2 100644
--- a/testApp/remote/pvput.cpp
+++ b/testApp/remote/pvput.cpp
@@ -121,13 +121,11 @@ void convertToString(StringBuilder buffer,PVField * pv,int notFirst)
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
{
PVFieldPtrArray fieldsData = data->getPVFields();
- if (fieldsData != 0) {
- int length = data->getStructure()->getNumberFields();
- for(int i=0; igetStructure()->getNumberFields();
+ for(int i=0; i(pv);
BooleanArrayData data = BooleanArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
BooleanArray value = data.data;
if(value[data.offset]) {
@@ -160,9 +158,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVByteArray *pvdata = static_cast(pv);
ByteArrayData data = ByteArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -179,9 +177,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVShortArray *pvdata = static_cast(pv);
ShortArrayData data = ShortArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -198,9 +196,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVIntArray *pvdata = static_cast(pv);
IntArrayData data = IntArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int val = data.data[data.offset];
char buf[16];
@@ -217,9 +215,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVLongArray *pvdata = static_cast(pv);
LongArrayData data = LongArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
int64 val = data.data[data.offset];
char buf[16];
@@ -236,9 +234,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVFloatArray *pvdata = static_cast(pv);
FloatArrayData data = FloatArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
float val = data.data[data.offset];
char buf[16];
@@ -255,9 +253,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVDoubleArray *pvdata = static_cast(pv);
DoubleArrayData data = DoubleArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ',';
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
if(num==1) {
double val = data.data[data.offset];
char buf[16];
@@ -274,9 +272,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
PVStringArray *pvdata = static_cast(pv);
StringArrayData data = StringArrayData();
*buffer += "[";
- for(int i=0; i < pvdata->getLength(); i++) {
+ for(size_t i=0; i < pvdata->getLength(); i++) {
if(i!=0) *buffer += ",";
- int num = pvdata->get(i,1,&data);
+ int num = pvdata->get(i,1,data);
StringArray value = data.data;
if(num==1) {
if(value[data.offset].length()>0) {
@@ -304,13 +302,13 @@ void convertStructureArray(StringBuilder buffer,
return;
}
StructureArrayData data = StructureArrayData();
- pvdata->get(0, length, &data);
+ pvdata->get(0, length, data);
for (int i = 0; i < length; i++) {
- PVStructure *pvStructure = data.data[i];
+ PVStructurePtr pvStructure = data.data[i];
if (pvStructure == 0) {
*buffer += "null";
} else {
- convertToString(buffer,pvStructure,notFirst+1);
+ convertToString(buffer,pvStructure.get(),notFirst+1);
}
}
}
@@ -378,7 +376,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
@@ -485,7 +483,7 @@ public:
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
@@ -635,7 +633,7 @@ int main (int argc, char *argv[])
allOK &= putRequesterImpl->waitUntilDone(timeOut);
if (allOK)
{
- getConvert()->fromString(putRequesterImpl->getStructure().get(), values);
+ getConvert()->fromString(putRequesterImpl->getStructure(), values);
putRequesterImpl->resetEvent();
channelPut->put(false);
diff --git a/testApp/remote/pvrpc.cpp b/testApp/remote/pvrpc.cpp
index ffdd064..617c1fc 100644
--- a/testApp/remote/pvrpc.cpp
+++ b/testApp/remote/pvrpc.cpp
@@ -68,7 +68,7 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
void resetEvent()
@@ -96,7 +96,7 @@ public:
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
@@ -243,8 +243,10 @@ int main (int argc, char *argv[])
shared_ptr rpcRequesterImpl(new ChannelRPCRequesterImpl(channel->getChannelName()));
// A PVStructure is sent at ChannelRPC connect time but we don't use it, so send an empty one
+ StringArray fieldNames;
+ FieldConstPtrArray fields;
PVStructure::shared_pointer nothing(
- new PVStructure(NULL, getFieldCreate()->createStructure("nothing", 0, NULL)));
+ new PVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
ChannelRPC::shared_pointer channelRPC = channel->createChannelRPC(rpcRequesterImpl, nothing);
allOK &= rpcRequesterImpl->waitUntilDone(timeOut);
diff --git a/testApp/remote/testBlockingTCPClnt.cpp b/testApp/remote/testBlockingTCPClnt.cpp
index 35a9c9e..0e0e1ad 100644
--- a/testApp/remote/testBlockingTCPClnt.cpp
+++ b/testApp/remote/testBlockingTCPClnt.cpp
@@ -73,7 +73,7 @@ public:
}
virtual void handleResponse(osiSockAddr* responseFrom,
- Transport::shared_pointer const & transport, int8 version, int8 command, int payloadSize,
+ Transport::shared_pointer const & transport, int8 version, int8 command, std::size_t payloadSize,
ByteBuffer* payloadBuffer) {
if(command==CMD_CONNECTION_VALIDATION) transport->verified();
diff --git a/testApp/remote/testBlockingTCPSrv.cpp b/testApp/remote/testBlockingTCPSrv.cpp
index 80aa4fa..ade36ce 100644
--- a/testApp/remote/testBlockingTCPSrv.cpp
+++ b/testApp/remote/testBlockingTCPSrv.cpp
@@ -40,7 +40,7 @@ private:
class DummyResponseHandler : public ResponseHandler {
public:
virtual void handleResponse(osiSockAddr* responseFrom,
- Transport::shared_pointer const & transport, int8 version, int8 command, int payloadSize,
+ Transport::shared_pointer const & transport, int8 version, int8 command, std::size_t payloadSize,
ByteBuffer* payloadBuffer) {
cout << "DummyResponseHandler::handleResponse" << endl;
}
diff --git a/testApp/remote/testBlockingUDPClnt.cpp b/testApp/remote/testBlockingUDPClnt.cpp
index 84be47d..2c5e485 100644
--- a/testApp/remote/testBlockingUDPClnt.cpp
+++ b/testApp/remote/testBlockingUDPClnt.cpp
@@ -61,7 +61,7 @@ public:
virtual ~DummyResponseHandler() {}
virtual void handleResponse(osiSockAddr* responseFrom,
- Transport::shared_pointer const &, int8 version, int8 command, int payloadSize,
+ Transport::shared_pointer const &, int8 version, int8 command, std::size_t payloadSize,
ByteBuffer* payloadBuffer) {
}
};
diff --git a/testApp/remote/testBlockingUDPSrv.cpp b/testApp/remote/testBlockingUDPSrv.cpp
index 2fcdeb0..08f23e9 100644
--- a/testApp/remote/testBlockingUDPSrv.cpp
+++ b/testApp/remote/testBlockingUDPSrv.cpp
@@ -60,14 +60,14 @@ public:
}
virtual void handleResponse(osiSockAddr* responseFrom,
- Transport::shared_pointer const &, int8 version, int8 command, int payloadSize,
+ Transport::shared_pointer const &, int8 version, int8 command, std::size_t payloadSize,
ByteBuffer* payloadBuffer);
private:
int packets;
};
void DummyResponseHandler::handleResponse(osiSockAddr* responseFrom,
- Transport::shared_pointer const &, int8 version, int8 command, int payloadSize,
+ Transport::shared_pointer const &, int8 version, int8 command, std::size_t payloadSize,
ByteBuffer* payloadBuffer) {
std::ostringstream os;
@@ -84,7 +84,7 @@ void DummyResponseHandler::handleResponse(osiSockAddr* responseFrom,
char payload[50];
- for(int i = 0; iget(payload, 0, dataCount);
os<<"Payload ("< getCs;
+int channelCount = 0;
+int allCount = 0;
+
+timeval startTime;
+
+void get_all()
+{
+ ChannelGet::shared_pointer last;
+ for (vector::const_iterator i = getCs.begin();
+ i != getCs.end();
+ i++)
+ {
+ (*i)->get(false);
+ last = *i;
+ }
+ last->get(true);
+}
+
class ChannelGetRequesterImpl : public ChannelGetRequester
{
@@ -48,6 +69,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
PVStructure::shared_pointer m_pvStructure;
BitSet::shared_pointer m_bitSet;
Event m_event;
+ Event m_connectionEvent;
String m_channelName;
int m_count;
@@ -64,7 +86,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelGetConnect(const epics::pvData::Status& status,
@@ -83,11 +105,14 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
m_channelGet = channelGet;
m_pvStructure = pvStructure;
m_bitSet = bitSet;
+
+ m_connectionEvent.signal();
+/*
m_count = COUNT;
gettimeofday(&m_startTime, NULL);
- m_channelGet->get(false);
+*/
}
else
{
@@ -105,32 +130,43 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
std::cout << "[" << m_channelName << "] channel get: " << status.toString() << std::endl;
}
+ channelCount++;
+ if (channelCount == CHANNELS)
+ {
+ allCount++;
+ channelCount = 0;
+ }
+//printf("channelCount %d\n", channelCount);
+
+ if (allCount == COUNT)
+ {
+ timeval endTime;
+ gettimeofday(&endTime, NULL);
+
+
+ long seconds, nseconds;
+ double duration;
+ seconds = endTime.tv_sec - startTime.tv_sec;
+ nseconds = endTime.tv_usec - startTime.tv_usec;
+
+ duration = seconds + nseconds/1000000.0;
+
+ printf("%5.6f seconds, %5.3f (x %d = %5.3f) gets/s\n", duration, COUNT/duration, CHANNELS, COUNT*CHANNELS/duration);
+
+ allCount = 0;
+ gettimeofday(&startTime, NULL);
+
+ get_all();
- //String str;
- //m_pvStructure->toString(&str);
- //std::cout << str << std::endl;
-
- //m_event.signal();
-
- if (--m_count)
- m_channelGet->get(false);
- else
- {
- timeval endTime;
- gettimeofday(&endTime, NULL);
+ }
+ else if (channelCount == 0)
+ {
+
+ get_all();
+ }
- long seconds, nseconds;
- double duration;
- seconds = endTime.tv_sec - m_startTime.tv_sec;
- nseconds = endTime.tv_usec - m_startTime.tv_usec;
- duration = seconds + nseconds/1000000.0;
-
- printf("%5.6f seconds, %5.3f gets/s \n", duration, COUNT/duration);
-
- m_event.signal();
- }
}
else
{
@@ -139,10 +175,16 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
}
- bool wait(double timeOut)
+/*
+ void get()
{
return m_event.wait(timeOut);
}
+*/
+ bool waitUntilConnected(double timeOut)
+ {
+ return m_connectionEvent.wait(timeOut);
+ }
};
class ChannelRequesterImpl : public ChannelRequester
@@ -159,7 +201,7 @@ public:
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status,
@@ -194,9 +236,10 @@ public:
};
-
int main (int argc, char *argv[])
{
+printf("this does not work... since this impl. requires bulk get control... tODO\n");
+return -1;
int opt; // getopt() current option
setvbuf(stdout,NULL,_IOLBF,BUFSIZ); // Set stdout to line buffering
@@ -233,14 +276,17 @@ int main (int argc, char *argv[])
}
}
- int nPvs = argc - optind; // Remaining arg list is PV name
- if (nPvs < 1 || nPvs > 1)
- {
- fprintf(stderr, "No pv name specified. ('testGetPerformance -h' for help.)\n");
- return 1;
- }
+ printf("%d channels of double array size of %d elements, %d repetitions per sample\n", CHANNELS, ARRAY_SIZE, COUNT);
+
+ vector pvs;
+ char buf[64];
+ for (int i = 0; i < CHANNELS; i++)
+ {
+ sprintf(buf, "array%d_%d", ARRAY_SIZE, i);
+ pvs.push_back(buf);
+ //printf("%s\n", buf);
+ }
- string pvName = argv[optind]; // Copy PV name from command line
try {
pvRequest = getCreateRequest()->createRequest(request);
@@ -257,33 +303,57 @@ int main (int argc, char *argv[])
ClientFactory::start();
ChannelProvider::shared_pointer provider = getChannelAccess()->getProvider("pvAccess");
+
+ vector chs;
+
+ for (vector::iterator i = pvs.begin();
+ i != pvs.end();
+ i++)
+ {
+
+
shared_ptr channelRequesterImpl(new
ChannelRequesterImpl());
- Channel::shared_pointer channel = provider->createChannel(pvName, channelRequesterImpl);
+ Channel::shared_pointer channel = provider->createChannel(*i, channelRequesterImpl);
+ chs.push_back(channel);
+ }
+ for (vector::iterator i = chs.begin();
+ i != chs.end();
+ i++)
+ {
+ Channel::shared_pointer channel = *i;
+ shared_ptr channelRequesterImpl = dynamic_pointer_cast(channel->getChannelRequester());
if (channelRequesterImpl->waitUntilConnected(5.0))
{
shared_ptr getRequesterImpl(new
ChannelGetRequesterImpl(channel->getChannelName()));
ChannelGet::shared_pointer channelGet = channel->createChannelGet(getRequesterImpl, pvRequest);
- allOK &= getRequesterImpl->wait(timeOut);
+ allOK = getRequesterImpl->waitUntilConnected(timeOut);
if (!allOK)
{
std::cout << "[" << channel->getChannelName() << "] failed to get all the gets" << std::endl;
+ return 1;
}
- channelGet->destroy();
+ getCs.push_back(channelGet);
+
}
else
{
- allOK = false;
- channel->destroy();
std::cout << "[" << channel->getChannelName() << "] connection timeout" << std::endl;
+ return 1;
}
+}
+ std::cout << "all connected" << std::endl;
- ClientFactory::stop();
+ gettimeofday(&startTime, NULL);
+ get_all();
+
+ epicsThreadSleep(DEFAULT_TIMEOUT);
+ //ClientFactory::stop();
return allOK ? 0 : 1;
}
diff --git a/testApp/remote/testRemoteClientImpl.cpp b/testApp/remote/testRemoteClientImpl.cpp
index 3ae3f57..3829f46 100644
--- a/testApp/remote/testRemoteClientImpl.cpp
+++ b/testApp/remote/testRemoteClientImpl.cpp
@@ -32,7 +32,7 @@ class ChannelRequesterImpl : public ChannelRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
@@ -56,7 +56,7 @@ class GetFieldRequesterImpl : public GetFieldRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr const & field)
@@ -91,7 +91,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
@@ -141,7 +141,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
@@ -197,7 +197,7 @@ class ChannelPutGetRequesterImpl : public ChannelPutGetRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelPutGetConnect(const epics::pvData::Status& status, ChannelPutGet::shared_pointer const & channelPutGet,
@@ -275,7 +275,7 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC::shared_pointer const & channelRPC)
@@ -314,7 +314,7 @@ class ChannelArrayRequesterImpl : public ChannelArrayRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelArrayConnect(const epics::pvData::Status& status,ChannelArray::shared_pointer const & channelArray,
@@ -364,10 +364,10 @@ class MonitorRequesterImpl : public MonitorRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
- virtual void monitorConnect(const epics::pvData::Status& status, Monitor::shared_pointer const & monitor, StructureConstPtr const & structure)
+ virtual void monitorConnect(const epics::pvData::Status& status, Monitor::shared_pointer & monitor, StructureConstPtr const & structure)
{
std::cout << "monitorConnect(" << status.toString() << ")" << std::endl;
if (status.isSuccess() && structure)
@@ -385,11 +385,11 @@ class MonitorRequesterImpl : public MonitorRequester
MonitorElement::shared_pointer element = monitor->poll();
String str("changed/overrun ");
- element->getChangedBitSet()->toString(&str);
+ element->changedBitSet->toString(&str);
str += '/';
- element->getOverrunBitSet()->toString(&str);
+ element->overrunBitSet->toString(&str);
str += '\n';
- element->getPVStructure()->toString(&str);
+ element->pvStructurePtr->toString(&str);
std::cout << str << std::endl;
monitor->release(element);
@@ -413,7 +413,7 @@ class ChannelProcessRequesterImpl : public ChannelProcessRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess::shared_pointer const & channelProcess)
@@ -526,10 +526,9 @@ int main(int argc,char *argv[])
{
ChannelArrayRequester::shared_pointer channelArrayRequesterImpl(new ChannelArrayRequesterImpl());
- PVStructure::shared_pointer pvRequest(getPVDataCreate()->createPVStructure(0, "", 0));
- PVString* pvFieldName = (PVString*)getPVDataCreate()->createPVScalar(pvRequest.get(), "field", pvString);
- pvFieldName->put("value");
- pvRequest->appendPVField(pvFieldName);
+ StringArray fieldNames(1); fieldNames.push_back("field");
+ FieldConstPtrArray fields(1); fields.push_back(getFieldCreate()->createScalar(pvString));
+ PVStructure::shared_pointer pvRequest(getPVDataCreate()->createPVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
ChannelArray::shared_pointer channelArray = channel->createChannelArray(channelArrayRequesterImpl, pvRequest);
epicsThreadSleep ( 1.0 );
diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp
index aaecf04..2debcb8 100644
--- a/testApp/remote/testServer.cpp
+++ b/testApp/remote/testServer.cpp
@@ -28,7 +28,7 @@ class MockChannelProcess :
private:
ChannelProcessRequester::shared_pointer m_channelProcessRequester;
PVStructure::shared_pointer m_pvStructure;
- PVScalar* m_valueField;
+ PVScalarPtr m_valueField;
protected:
MockChannelProcess(ChannelProcessRequester::shared_pointer const & channelProcessRequester, PVStructure::shared_pointer const & pvStructure, PVStructure::shared_pointer const & pvRequest) :
@@ -37,8 +37,8 @@ class MockChannelProcess :
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelProcess);
ChannelProcess::shared_pointer thisPtr; // we return null = static_pointer_cast(shared_from_this());
- PVField* field = pvStructure->getSubField(String("value"));
- if (field == 0)
+ PVFieldPtr field = pvStructure->getSubField(String("value"));
+ if (field.get() == 0)
{
Status noValueFieldStatus(Status::STATUSTYPE_ERROR, "no 'value' field");
m_channelProcessRequester->channelProcessConnect(noValueFieldStatus, thisPtr);
@@ -56,7 +56,7 @@ class MockChannelProcess :
return;
}
- m_valueField = static_cast(field);
+ m_valueField = static_pointer_cast(field);
}
public:
@@ -83,56 +83,56 @@ class MockChannelProcess :
case pvBoolean:
{
// negate
- PVBoolean *pvBoolean = static_cast(m_valueField);
+ PVBooleanPtr pvBoolean = static_pointer_cast(m_valueField);
pvBoolean->put(!pvBoolean->get());
break;
}
case pvByte:
{
// increment by one
- PVByte *pvByte = static_cast(m_valueField);
+ PVBytePtr pvByte = static_pointer_cast(m_valueField);
pvByte->put(pvByte->get() + 1);
break;
}
case pvShort:
{
// increment by one
- PVShort *pvShort = static_cast(m_valueField);
+ PVShortPtr pvShort = static_pointer_cast(m_valueField);
pvShort->put(pvShort->get() + 1);
break;
}
case pvInt:
{
// increment by one
- PVInt *pvInt = static_cast(m_valueField);
+ PVIntPtr pvInt = static_pointer_cast(m_valueField);
pvInt->put(pvInt->get() + 1);
break;
}
case pvLong:
{
// increment by one
- PVLong *pvLong = static_cast(m_valueField);
+ PVLongPtr pvLong = static_pointer_cast(m_valueField);
pvLong->put(pvLong->get() + 1);
break;
}
case pvFloat:
{
// increment by one
- PVFloat *pvFloat = static_cast(m_valueField);
+ PVFloatPtr pvFloat = static_pointer_cast(m_valueField);
pvFloat->put(pvFloat->get() + 1.0f);
break;
}
case pvDouble:
{
// increment by one
- PVDouble *pvDouble = static_cast(m_valueField);
+ PVDoublePtr pvDouble = static_pointer_cast(m_valueField);
pvDouble->put(pvDouble->get() + 1.0);
break;
}
case pvString:
{
// increment by one
- PVString *pvString = static_cast(m_valueField);
+ PVStringPtr pvString = static_pointer_cast(m_valueField);
String val = pvString->get();
if (val.empty())
pvString->put("gen0");
@@ -404,8 +404,8 @@ class MockChannelRPC : public ChannelRPC
if (m_channelName == "rpcNTTable")
{
// TODO type check, getStringField is verbose
- PVString* columns = static_cast(pvArgument->getSubField("columns"));
- if (columns == 0)
+ PVStringPtr columns = static_pointer_cast(pvArgument->getSubField("columns"));
+ if (columns.get() == 0)
{
PVStructure::shared_pointer nullPtr;
Status errorStatus(Status::STATUSTYPE_ERROR, "no columns specified");
@@ -415,23 +415,27 @@ class MockChannelRPC : public ChannelRPC
{
int i = 0;
int totalFields = 1 + 1 + atoi(columns->get().c_str()); // normativeType, labels,
- FieldConstPtrArray fields = new FieldConstPtr[totalFields];
- fields[i++] = getFieldCreate()->createScalar("normativeType", pvString);
- fields[i++] = getFieldCreate()->createScalarArray("labels", pvString);
+ StringArray fieldNames(totalFields);
+ FieldConstPtrArray fields(totalFields);
+ fieldNames[i] = "normativeType";
+ fields[i++] = getFieldCreate()->createScalar(pvString);
+ fieldNames[i] = "labels";
+ fields[i++] = getFieldCreate()->createScalarArray(pvString);
char sbuf[16];
vector labels;
for (; i < totalFields; i++)
{
sprintf(sbuf, "column%d", i-1 );
- fields[i] = getFieldCreate()->createScalarArray(sbuf, pvDouble);
+ fieldNames[i] = sbuf;
+ fields[i] = getFieldCreate()->createScalarArray(pvDouble);
labels.push_back(sbuf);
}
PVStructure::shared_pointer result(
- new PVStructure(NULL, getFieldCreate()->createStructure("", totalFields, fields)));
+ new PVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
result->getStringField("normativeType")->put("NTTable");
- static_cast(result->getScalarArrayField("labels", pvString))->put(0, labels.size(), &labels[0], 0);
+ static_pointer_cast(result->getScalarArrayField("labels", pvString))->put(0, labels.size(), &labels[0], 0);
srand ( time(NULL) );
@@ -446,7 +450,7 @@ class MockChannelRPC : public ChannelRPC
iter++)
{
FILL_VALUES;
- static_cast(result->getScalarArrayField(*iter, pvDouble))->put(0, ROWS, values, 0);
+ static_pointer_cast(result->getScalarArrayField(*iter, pvDouble))->put(0, ROWS, values, 0);
}
m_channelRPCRequester->requestDone(Status::Ok, result);
}
@@ -499,7 +503,7 @@ class MockChannelArray : public ChannelArray
protected:
MockChannelArray(ChannelArrayRequester::shared_pointer const & channelArrayRequester, PVStructure::shared_pointer const & pvStructure, PVStructure::shared_pointer const & pvRequest) :
m_channelArrayRequester(channelArrayRequester),
- m_pvArray(getPVDataCreate()->createPVScalarArray(0, "", pvDouble))
+ m_pvArray(getPVDataCreate()->createPVScalarArray(pvDouble))
{
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelArray);
}
@@ -625,7 +629,7 @@ class MockMonitor : public Monitor, public MonitorElement, public std::tr1::enab
return Status::Ok;
}
- virtual MonitorElement::shared_pointer const & poll()
+ virtual MonitorElement::shared_pointer poll()
{
Lock xx(m_lock);
if (m_count)
@@ -640,7 +644,7 @@ class MockMonitor : public Monitor, public MonitorElement, public std::tr1::enab
}
}
- virtual void release(MonitorElement::shared_pointer const & monitorElement)
+ virtual void release(MonitorElement::shared_pointer & monitorElement)
{
Lock xx(m_lock);
if (m_count)
@@ -716,21 +720,62 @@ class MockChannel : public Channel {
if (m_name.find("array") == 0)
{
- String allProperties("alarm,timeStamp,display,control");
- m_pvStructure.reset(getStandardPVField()->scalarArray(0,name,pvDouble,allProperties));
- PVDoubleArray *pvField = static_cast(m_pvStructure->getScalarArrayField(String("value"), pvDouble));
- double v = 0;
- int ix = 0;
- const int COUNT = 1000;
+ String allProperties("");
+// String allProperties("alarm,timeStamp,display,control");
+ m_pvStructure = getStandardPVField()->scalarArray(pvDouble,allProperties);
+ PVDoubleArrayPtr pvField = static_pointer_cast(m_pvStructure->getScalarArrayField(String("value"), pvDouble));
- pvField->setCapacity(1000*COUNT);
- for (int n = 0; n < 1000; n++)
+ int specCount = 0; char postfix[64];
+ int done = sscanf(m_name.c_str(), "array%d%s", &specCount, postfix);
+
+ if (done && specCount > 0)
{
-
- double array[COUNT];
+ pvField->setCapacity(specCount);
+ pvField->setLength(specCount);
+ }
+ else
+ {
+ double v = 0;
+ int ix = 0;
+ const int COUNT = 1024;
+
+ pvField->setCapacity(1024*COUNT);
+ for (int n = 0; n < 1024; n++)
+ {
+
+ double array[COUNT];
+ for (int i = 0; i < COUNT; i++)
+ {
+ array[i] = v; v+=1.1;
+ }
+ pvField->put(ix, COUNT, array, 0);
+ ix += COUNT;
+ }
+ }
+ /*
+ printf("array prepared------------------------------------!!!\n");
+ String str;
+ pvField->toString(&str);
+ printf("%s\n", str.c_str());
+ printf("=============------------------------------------!!!\n");
+ */
+ }
+ else if (m_name.find("image") == 0)
+ {
+ String allProperties("alarm,timeStamp,display,control");
+ m_pvStructure = getStandardPVField()->scalarArray(pvByte,allProperties);
+ PVByteArrayPtr pvField = static_pointer_cast(m_pvStructure->getScalarArrayField(String("value"), pvByte));
+ int ix = 0;
+ const int COUNT = 1024;
+
+ pvField->setCapacity(1024*COUNT);
+ for (int n = 0; n < 1024; n++)
+ {
+
+ int8 array[COUNT];
for (int i = 0; i < COUNT; i++)
{
- array[i] = v; v+=1.1;
+ array[i] = ix;
}
pvField->put(ix, COUNT, array, 0);
ix += COUNT;
@@ -741,17 +786,24 @@ class MockChannel : public Channel {
pvField->toString(&str);
printf("%s\n", str.c_str());
printf("=============------------------------------------!!!\n");
- */
+ */
}
else if (m_name.find("rpc") == 0)
{
- m_pvStructure.reset(getPVDataCreate()->createPVStructure(0, name, 0, static_cast(0)));
+ StringArray fieldNames;
+ PVFieldPtrArray fields;
+ m_pvStructure = getPVDataCreate()->createPVStructure(fieldNames, fields);
+ }
+ else if (m_name.find("valueOnly") == 0)
+ {
+ String allProperties("");
+ m_pvStructure = getStandardPVField()->scalar(pvDouble,allProperties);
}
else
{
String allProperties("alarm,timeStamp,display,control,valueAlarm");
- m_pvStructure.reset(getStandardPVField()->scalar(0,name,pvDouble,allProperties));
- PVDouble *pvField = m_pvStructure->getDoubleField(String("value"));
+ m_pvStructure = getStandardPVField()->scalar(pvDouble,allProperties);
+ PVDoublePtr pvField = m_pvStructure->getDoubleField(String("value"));
pvField->put(1.123);
}
}
@@ -788,7 +840,7 @@ class MockChannel : public Channel {
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual ChannelProvider::shared_pointer const & getProvider()
@@ -831,7 +883,7 @@ class MockChannel : public Channel {
PVFieldPtr pvField;
if(subField == "")
{
- pvField = m_pvStructure.get();
+ pvField = m_pvStructure;
}
else
{
@@ -1042,7 +1094,7 @@ class ChannelRequesterImpl : public ChannelRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer &channel)
@@ -1066,7 +1118,7 @@ class GetFieldRequesterImpl : public GetFieldRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr field)
@@ -1097,7 +1149,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelGetConnect(const epics::pvData::Status& status, ChannelGet::shared_pointer const & channelGet,
@@ -1133,7 +1185,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
@@ -1176,7 +1228,7 @@ class MonitorRequesterImpl : public MonitorRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void monitorConnect(const Status& status, Monitor::shared_pointer const & monitor, StructureConstPtr& structure)
@@ -1197,11 +1249,11 @@ class MonitorRequesterImpl : public MonitorRequester
MonitorElement::shared_pointer element = monitor->poll();
String str("changed/overrun ");
- element->getChangedBitSet()->toString(&str);
+ element->changedBitSet->toString(&str);
str += '/';
- element->getOverrunBitSet()->toString(&str);
+ element->overrunBitSet->toString(&str);
str += '\n';
- element->getPVStructure()->toString(&str);
+ element->pvStructurePtr->toString(&str);
std::cout << str << std::endl;
monitor->release(element);
@@ -1225,7 +1277,7 @@ class ChannelProcessRequesterImpl : public ChannelProcessRequester
virtual void message(String message,MessageType messageType)
{
- std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
+ std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess::shared_pointer const & channelProcess)
diff --git a/testApp/utils/inetAddressUtilsTest.cpp b/testApp/utils/inetAddressUtilsTest.cpp
index eea147e..9147e6b 100644
--- a/testApp/utils/inetAddressUtilsTest.cpp
+++ b/testApp/utils/inetAddressUtilsTest.cpp
@@ -112,7 +112,7 @@ TEST(inetAddressUtils, encodeAsIPv6Address)
osiSockAddr addr = *paddr;
encodeAsIPv6Address(buff.get(), &addr);
- ASSERT_EQ(static_cast(16), buff->getPosition());
+ ASSERT_EQ(static_cast(16), buff->getPosition());
EXPECT_TRUE(strncmp(buff->getArray(), src, 16)==0);
}
@@ -134,4 +134,4 @@ TEST(inetAddressUtils, getBroadcastAddresses)
cout<<"\t"<at(i))<