better implementation of setCapacity

This commit is contained in:
Marty Kraimer
2012-08-20 07:13:05 -04:00
parent 05be6e6729
commit 9061e8f731
2 changed files with 23 additions and 16 deletions

View File

@@ -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; i<length; i++) array[i] = from[i];
value->swap(array);
size_t oldCapacity = getCapacity();
if(oldCapacity>capacity) {
PVStructurePtrArray array;
array.reserve(capacity);
array.resize(length);
PVStructurePtr * from = get();
for (size_t i=0; i<length; i++) array[i] = from[i];
value->swap(array);
} else {
value->reserve(capacity);
}
setCapacityLength(capacity,length);
}