From 0e48497cd4c12422a101c8d25258e27ccadd1c55 Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Mon, 20 Aug 2012 09:01:51 +0200 Subject: [PATCH] array deserialization fixed --- pvDataApp/factory/PVDataCreateFactory.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pvDataApp/factory/PVDataCreateFactory.cpp b/pvDataApp/factory/PVDataCreateFactory.cpp index 5a746ef..c6705b1 100644 --- a/pvDataApp/factory/PVDataCreateFactory.cpp +++ b/pvDataApp/factory/PVDataCreateFactory.cpp @@ -223,12 +223,15 @@ void DefaultPVArray::setCapacity(size_t capacity) } size_t length = PVArray::getLength(); if(length>capacity) length = capacity; + /* std::vector array; array.reserve(capacity); array.resize(length); T * from = get(); for (size_t i=0; iswap(array); + */ + value->reserve(capacity); PVArray::setCapacityLength(capacity,length); } @@ -320,6 +323,8 @@ void DefaultPVArray::deserialize(ByteBuffer *pbuffer, if(size>=0) { // prepare array, if necessary if(size>this->getCapacity()) this->setCapacity(size); + // set new length + this->setLength(size); // retrieve value from the buffer size_t i = 0; while(true) { @@ -337,8 +342,7 @@ void DefaultPVArray::deserialize(ByteBuffer *pbuffer, else break; } - // set new length - this->setLength(size); + // inform about the change? PVField::postPut(); } // TODO null arrays (size == -1) not supported @@ -393,14 +397,15 @@ void DefaultPVArray::deserialize(ByteBuffer *pbuffer, if(size>=0) { // prepare array, if necessary if(size>getCapacity()) setCapacity(size); + // set new length + setLength(size); // retrieve value from the buffer String * pvalue = get(); for(size_t i = 0; i