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