diff --git a/pvDataApp/factory/PVStructureArray.cpp b/pvDataApp/factory/PVStructureArray.cpp index 9d5720f..18d7c1e 100644 --- a/pvDataApp/factory/PVStructureArray.cpp +++ b/pvDataApp/factory/PVStructureArray.cpp @@ -32,9 +32,10 @@ size_t PVStructureArray::append(size_t number) size_t newLength = currentLength + number; setCapacity(newLength); StructureConstPtr structure = structureArray->getStructure(); + PVStructurePtrArray vec = *value.get(); for(size_t i=currentLength; icreatePVStructure(structure); + PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(structure)); + vec[i].swap(pvStructure); } return newLength; } @@ -151,7 +152,8 @@ size_t PVStructureArray::put(size_t offset,size_t len, "Element is not a compatible structure")); } } - to[i+offset] = frompv; + PVStructurePtr pvStructure(frompv); + to[i+offset].swap(pvStructure); } postPut(); setLength(length); diff --git a/testApp/pv/testPVStructureArray.cpp b/testApp/pv/testPVStructureArray.cpp index 727c733..503b828 100644 --- a/testApp/pv/testPVStructureArray.cpp +++ b/testApp/pv/testPVStructureArray.cpp @@ -29,6 +29,30 @@ static StandardFieldPtr standardField; static StandardPVFieldPtr standardPVField; static String buffer; +void testPVStructureArray(FILE * fd) { + StructureArrayConstPtr alarm( + fieldCreate->createStructureArray(standardField->alarm())); + PVStructureArrayPtr pvAlarmStructure( + pvDataCreate->createPVStructureArray(alarm)); + PVStructurePtrArray palarms; + size_t na=2; + palarms.reserve(na); + for(size_t i=0; icreatePVStructure(standardField->alarm())); + } + PVStructurePtr *xxx = &palarms[0]; +for(size_t i=0;itoString(&buffer); +printf("xxx[%d]\n%s\n",(int)i,buffer.c_str()); +} + pvAlarmStructure->put(0,2,xxx,0); + buffer.clear(); + pvAlarmStructure->toString(&buffer); + fprintf(fd,"pvAlarmStructure\n%s\n",buffer.c_str()); +} + StructureConstPtr getPowerSupplyStructure() { String properties("alarm"); FieldConstPtrArray fields; @@ -83,6 +107,7 @@ int main(int argc,char *argv[]) pvDataCreate = getPVDataCreate(); standardField = getStandardField(); standardPVField = getStandardPVField(); + testPVStructureArray(fd); testPowerSupplyArray(fd); return(0); }