From 030951c7f11c67db5f558bb720cc2b53755488d4 Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Wed, 4 Jun 2014 08:53:59 +0200 Subject: [PATCH] testServer: erorr status returned if stride!=1 --- testApp/remote/testServer.cpp | 129 +++++++++++++++++++--------------- 1 file changed, 72 insertions(+), 57 deletions(-) diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index bbc7db2..e4970ac 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -1823,39 +1823,47 @@ public: virtual void putArray(PVArray::shared_pointer const & pvArray, size_t offset, size_t count, size_t stride) { - // TODO stride support !!! - - size_t o = offset; - if (count == 0) count = pvArray->getLength(); - size_t c = count; - - Field::const_shared_pointer field = pvArray->getField(); - Type type = field->getType(); - if (type == scalarArray) + // TODO stride support + if (stride == 1) { - switch (std::tr1::static_pointer_cast(field)->getElementType()) + + size_t o = offset; + if (count == 0) count = pvArray->getLength(); + size_t c = count; + + Field::const_shared_pointer field = pvArray->getField(); + Type type = field->getType(); + if (type == scalarArray) { - case pvBoolean: put(pvArray, m_pvStructureArray, o, c); break; - case pvByte: put(pvArray, m_pvStructureArray, o, c); break; - case pvShort: put(pvArray, m_pvStructureArray, o, c); break; - case pvInt: put(pvArray, m_pvStructureArray, o, c); break; - case pvLong: put(pvArray, m_pvStructureArray, o, c); break; - case pvUByte: put(pvArray, m_pvStructureArray, o, c); break; - case pvUShort: put(pvArray, m_pvStructureArray, o, c); break; - case pvUInt: put(pvArray, m_pvStructureArray, o, c); break; - case pvULong: put(pvArray, m_pvStructureArray, o, c); break; - case pvFloat: put(pvArray, m_pvStructureArray, o, c); break; - case pvDouble: put(pvArray, m_pvStructureArray, o, c); break; - case pvString: put(pvArray, m_pvStructureArray, o, c); break; + switch (std::tr1::static_pointer_cast(field)->getElementType()) + { + case pvBoolean: put(pvArray, m_pvStructureArray, o, c); break; + case pvByte: put(pvArray, m_pvStructureArray, o, c); break; + case pvShort: put(pvArray, m_pvStructureArray, o, c); break; + case pvInt: put(pvArray, m_pvStructureArray, o, c); break; + case pvLong: put(pvArray, m_pvStructureArray, o, c); break; + case pvUByte: put(pvArray, m_pvStructureArray, o, c); break; + case pvUShort: put(pvArray, m_pvStructureArray, o, c); break; + case pvUInt: put(pvArray, m_pvStructureArray, o, c); break; + case pvULong: put(pvArray, m_pvStructureArray, o, c); break; + case pvFloat: put(pvArray, m_pvStructureArray, o, c); break; + case pvDouble: put(pvArray, m_pvStructureArray, o, c); break; + case pvString: put(pvArray, m_pvStructureArray, o, c); break; + } } + else if (type == structureArray) + put(pvArray, m_pvStructureArray, o, c); + else if (type == unionArray) + put(pvArray, m_pvStructureArray, o, c); + + m_channelArrayRequester->putArrayDone(Status::Ok, shared_from_this()); } - else if (type == structureArray) - put(pvArray, m_pvStructureArray, o, c); - else if (type == unionArray) - put(pvArray, m_pvStructureArray, o, c); - - m_channelArrayRequester->putArrayDone(Status::Ok, shared_from_this()); - + else + { + Status notSupported(Status::STATUSTYPE_ERROR, "stride != 1 is not supported"); + m_channelArrayRequester->putArrayDone(notSupported, shared_from_this()); + } + if (m_lastRequest.get()) destroy(); } @@ -1878,38 +1886,45 @@ public: virtual void getArray(size_t offset, size_t count, size_t stride) { - // TODO stride support !!! - - size_t o = offset; - if (count == 0) count = m_pvStructureArray->getLength(); - size_t c = count; - - Field::const_shared_pointer field = m_pvArray->getField(); - Type type = field->getType(); - if (type == scalarArray) + // TODO stride support + if (stride == 1) { - switch (std::tr1::static_pointer_cast(field)->getElementType()) + size_t o = offset; + if (count == 0) count = m_pvStructureArray->getLength(); + size_t c = count; + + Field::const_shared_pointer field = m_pvArray->getField(); + Type type = field->getType(); + if (type == scalarArray) { - case pvBoolean: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvByte: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvShort: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvInt: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvLong: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvUByte: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvUShort: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvUInt: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvULong: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvFloat: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvDouble: get(m_pvStructureArray, m_pvArray, o, c); break; - case pvString: get(m_pvStructureArray, m_pvArray, o, c); break; + switch (std::tr1::static_pointer_cast(field)->getElementType()) + { + case pvBoolean: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvByte: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvShort: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvInt: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvLong: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvUByte: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvUShort: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvUInt: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvULong: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvFloat: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvDouble: get(m_pvStructureArray, m_pvArray, o, c); break; + case pvString: get(m_pvStructureArray, m_pvArray, o, c); break; + } } + else if (type == structureArray) + get(m_pvStructureArray, m_pvArray, o, c); + else if (type == unionArray) + get(m_pvStructureArray, m_pvArray, o, c); + + m_channelArrayRequester->getArrayDone(Status::Ok, shared_from_this(), m_pvArray); + } + else + { + Status notSupported(Status::STATUSTYPE_ERROR, "stride != 1 is not supported"); + m_channelArrayRequester->putArrayDone(notSupported, shared_from_this()); } - else if (type == structureArray) - get(m_pvStructureArray, m_pvArray, o, c); - else if (type == unionArray) - get(m_pvStructureArray, m_pvArray, o, c); - - m_channelArrayRequester->getArrayDone(Status::Ok, shared_from_this(), m_pvArray); if (m_lastRequest.get()) destroy();