diff --git a/pvDataApp/factory/PVDataCreateFactory.cpp b/pvDataApp/factory/PVDataCreateFactory.cpp index c6705b1..80ae305 100644 --- a/pvDataApp/factory/PVDataCreateFactory.cpp +++ b/pvDataApp/factory/PVDataCreateFactory.cpp @@ -223,15 +223,17 @@ 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); + size_t oldCapacity = PVArray::getCapacity(); + if(oldCapacity>capacity) { + std::vector array; + array.reserve(capacity); + array.resize(length); + T * from = get(); + for (size_t i=0; iswap(array); + } else { + value->reserve(capacity); + } PVArray::setCapacityLength(capacity,length); } diff --git a/pvDataApp/factory/PVStructureArray.cpp b/pvDataApp/factory/PVStructureArray.cpp index ce36abf..11a2309 100644 --- a/pvDataApp/factory/PVStructureArray.cpp +++ b/pvDataApp/factory/PVStructureArray.cpp @@ -87,14 +87,19 @@ void PVStructureArray::setCapacity(size_t capacity) { PVField::message(message, errorMessage); return; } - size_t length = getCapacity(); + size_t length = getLength(); if(length>capacity) length = capacity; - PVStructurePtrArray array; - array.reserve(capacity); - array.resize(length); - PVStructurePtr * from = get(); - for (size_t i=0; iswap(array); + size_t oldCapacity = getCapacity(); + if(oldCapacity>capacity) { + PVStructurePtrArray array; + array.reserve(capacity); + array.resize(length); + PVStructurePtr * from = get(); + for (size_t i=0; iswap(array); + } else { + value->reserve(capacity); + } setCapacityLength(capacity,length); }