コード例 #1
0
PVFieldPtr  PVStructure::getSubField(size_t fieldOffset) const
{
    if(fieldOffset<=getFieldOffset()) {
        return nullPVField;
    }
    if(fieldOffset>getNextFieldOffset()) return nullPVField;
    size_t numFields = pvFields.size();
    for(size_t i=0; i<numFields; i++) {
        PVFieldPtr pvField  = pvFields[i];
        if(pvField->getFieldOffset()==fieldOffset) return pvFields[i];
        if(pvField->getNextFieldOffset()<=fieldOffset) continue;
        if(pvField->getField()->getType()==structure) {
            PVStructure *pvStructure = static_cast<PVStructure *>(pvField.get());
            return pvStructure->getSubField(fieldOffset);
        }
    }
    throw std::logic_error("PVStructure.getSubField: Logic error");
}
コード例 #2
0
ファイル: pvCopy.cpp プロジェクト: epics-base/pvIOCCPP
std::tr1::shared_ptr<PVCopy> PVCopy::create(
    PVRecord &pvRecord, PVStructure &request, String structureName)
{
    PVStructure *pvRequest = &request;
    if(structureName.length()>0) {
        if(pvRequest->getStructure()->getNumberFields()>0) {
            PVStructure *pvStructure
                 = pvRequest->getStructureField(structureName);
            if(pvStructure==0) return std::tr1::shared_ptr<PVCopy>();
            pvRequest = pvStructure;
        }
    }
    std::tr1::shared_ptr<PVCopy> pvCopy =
        std::tr1::shared_ptr<PVCopy>(new PVCopy(pvRecord));
    PVStructure *pvStruct = pvRequest;
    if(pvRequest->getSubField("field")!=0) {
        pvStruct = pvRequest->getStructureField("field");
    }
    pvCopy->init(*pvStruct);
    return pvCopy;
}