bool NTHistogram::isCompatible(StructureConstPtr const &structure) { if(!structure.get()) return false; ScalarArrayConstPtr rangesField = structure->getField<ScalarArray>("ranges"); if(!rangesField.get() || rangesField->getElementType() != pvDouble) return false; ScalarArrayConstPtr valueField = structure->getField<ScalarArray>("value"); if(!valueField.get()) return false; ScalarType scalarType = valueField->getElementType(); if (scalarType != pvShort && scalarType != pvInt && scalarType != pvLong) return false; FieldConstPtr field = structure->getField("descriptor"); if(field) { ScalarConstPtr descriptorField = structure->getField<Scalar>("descriptor"); if (!descriptorField.get() || descriptorField->getScalarType() != pvString) return false; } field = structure->getField("alarm"); if (field.get() && !ntField->isAlarm(field)) return false; field = structure->getField("timeStamp"); if (field.get() && !ntField->isTimeStamp(field)) return false; return true; }
void test_extra() { testDiag("test_extra"); NTContinuumBuilderPtr builder = NTContinuum::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addTimeStamp()-> add("function", getFieldCreate()->createScalar(pvString))-> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTContinuum::is_a(structure)); testOk1(structure->getID() == NTContinuum::URI); testOk1(structure->getNumberFields() == 5); testOk1(structure->getField("base").get() != 0); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("units").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("function").get() != 0); testOk(dynamic_pointer_cast<const Scalar>(structure->getField("function")).get() != 0 && dynamic_pointer_cast<const Scalar>(structure->getField("function"))->getScalarType() == pvString, "function type"); std::cout << *structure << std::endl; }
static bool isCompatible(StructureConstPtr const &structure) { if(!structure.get()) return false; if (structure->getID() != "dimension_t") return false; ScalarConstPtr scalarField = structure->getField<Scalar>("size"); if (scalarField.get() == 0 || scalarField->getScalarType() != pvInt) return false; scalarField = structure->getField<Scalar>("offset"); if (scalarField.get() == 0 || scalarField->getScalarType() != pvInt) return false; scalarField = structure->getField<Scalar>("fullSize"); if (scalarField.get() == 0 || scalarField->getScalarType() != pvInt) return false; scalarField = structure->getField<Scalar>("binning"); if (scalarField.get() == 0 || scalarField->getScalarType() != pvInt) return false; scalarField = structure->getField<Scalar>("reverse"); if (scalarField.get() == 0 || scalarField->getScalarType() != pvBoolean) return false; return true; }
bool NTNameValue::isCompatible(StructureConstPtr const & structure) { if (structure.get() == 0) return false; ScalarArrayConstPtr nameField = structure->getField<ScalarArray>("name"); if (nameField.get() == 0 || nameField->getElementType() != pvString) return false; ScalarArrayConstPtr valueField = structure->getField<ScalarArray>("value"); if (valueField.get() == 0) return false; FieldConstPtr field = structure->getField("descriptor"); if (field.get()) { ScalarConstPtr descriptorField = structure->getField<Scalar>("descriptor"); if (!descriptorField || descriptorField->getScalarType() != pvString) return false; } NTFieldPtr ntField = NTField::get(); field = structure->getField("alarm"); if (field && !ntField->isAlarm(field)) return false; field = structure->getField("timeStamp"); if (field && !ntField->isTimeStamp(field)) return false; return true; }
void test_builder() { testDiag("test_builder"); NTEnumBuilderPtr builder = NTEnum::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("valueAlarm",standardField->doubleAlarm()) -> add("extra",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTEnum::is_a(structure)); testOk1(structure->getID() == NTEnum::URI); testOk1(structure->getNumberFields() == 6); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); FieldConstPtr valueField = structure->getField("value"); testOk(valueField.get() != 0 && ntField->isEnumerated(valueField), "value is enum"); std::cout << *structure << std::endl; }
void test_nestedStructureArray() { testDiag("Test test_nestedStructureArray()"); FieldCreatePtr fieldCreate = getFieldCreate(); string NESTED_ID = "nestedID"; StructureConstPtr s = fieldCreate->createFieldBuilder()-> add("double", pvDouble)-> addNestedStructureArray("nested")-> setId(NESTED_ID)-> add("short", pvShort)-> add("long", pvLong)-> endNested()-> addArray("intArray", pvInt)-> createStructure(); testOk1(s.get() != 0); testOk1(Structure::DEFAULT_ID == s->getID()); testOk1(3 == s->getFields().size()); FieldConstPtr f0 = s->getField(0); testOk1(scalar == f0->getType()); testOk1("double" == s->getFieldName(0)); testOk(pvDouble == static_pointer_cast<const Scalar>(f0)->getScalarType(), "f0 scalar type == double"); FieldConstPtr f1 = s->getField(1); testOk1(structureArray == f1->getType()); testOk1("nested" == s->getFieldName(1)); { StructureConstPtr s2 = static_pointer_cast<const StructureArray>(f1)->getStructure(); testOk1(s2.get() != 0); testOk1(NESTED_ID == s2->getID()); testOk1(2 == s2->getFields().size()); FieldConstPtr f20 = s2->getField(0); testOk1(scalar == f20->getType()); testOk1("short" == s2->getFieldName(0)); testOk(pvShort == static_pointer_cast<const Scalar>(f20)->getScalarType(), "f20 scalar type == short"); FieldConstPtr f21 = s2->getField(1); testOk1(scalar == f21->getType()); testOk1("long" == s2->getFieldName(1)); testOk(pvLong == static_pointer_cast<const Scalar>(f21)->getScalarType(), "f21 element type == long"); } FieldConstPtr f2 = s->getField(2); testOk1(scalarArray == f2->getType()); testOk1("intArray" == s->getFieldName(2)); testOk(pvInt == static_pointer_cast<const ScalarArray>(f2)->getElementType(), "f2 element type == int"); }
void test_arraySizeTypes() { testDiag("Test test_arraySizeTypes()"); FieldCreatePtr fieldCreate = getFieldCreate(); StructureConstPtr s = fieldCreate->createFieldBuilder()-> addArray("variableArray", pvDouble)-> addFixedArray("fixedArray", pvDouble, 10)-> addBoundedArray("boundedArray", pvDouble, 1024)-> createStructure(); testOk1(s.get() != 0); testOk1(Structure::DEFAULT_ID == s->getID()); testOk1(3 == s->getFields().size()); }
static bool isCompatible(StructureConstPtr const &structure) { if(!structure.get()) return false; if (structure->getID() != "codec_t") return false; ScalarConstPtr scalarField = structure->getField<Scalar>("name"); if (scalarField.get() == 0 || scalarField->getScalarType() != pvString) return false; UnionConstPtr paramField = structure->getField<Union>("parameters"); if (paramField.get() == 0 || !paramField->isVariant()) return false; return true; }
PVStructure::PVStructure(StructureConstPtr const & structurePtr, PVFieldPtrArray const & pvs ) : PVField(structurePtr), structurePtr(structurePtr), extendsStructureName("") { size_t numberFields = structurePtr->getNumberFields(); StringArray fieldNames = structurePtr->getFieldNames(); pvFields.reserve(numberFields); for(size_t i=0; i<numberFields; i++) { pvFields.push_back(pvs[i]); } for(size_t i=0; i<numberFields; i++) { pvFields[i]->setParentAndName(this,fieldNames[i]); } }
PVStructure::PVStructure(StructureConstPtr const & structurePtr) : PVField(structurePtr), structurePtr(structurePtr), extendsStructureName("") { size_t numberFields = structurePtr->getNumberFields(); FieldConstPtrArray fields = structurePtr->getFields(); StringArray fieldNames = structurePtr->getFieldNames(); // PVFieldPtrArray * xxx = const_cast<PVFieldPtrArray *>(&pvFields); pvFields.reserve(numberFields); PVDataCreatePtr pvDataCreate = getPVDataCreate(); for(size_t i=0; i<numberFields; i++) { pvFields.push_back(pvDataCreate->createPVField(fields[i])); } for(size_t i=0; i<numberFields; i++) { pvFields[i]->setParentAndName(this,fieldNames[i]); } }
StructureConstPtr FieldCreate::appendField( StructureConstPtr const & structure, string const & fieldName, FieldConstPtr const & field) const { StringArray oldNames = structure->getFieldNames(); FieldConstPtrArray oldFields = structure->getFields(); size_t oldLen = oldNames.size(); StringArray newNames(oldLen+1); FieldConstPtrArray newFields(oldLen+1); for(size_t i = 0; i<oldLen; i++) { newNames[i] = oldNames[i]; newFields[i] = oldFields[i]; } newNames[oldLen] = fieldName; newFields[oldLen] = field; return createStructure(structure->getID(),newNames,newFields); }
PVStructure::shared_pointer ValueBuilder::buildPVStructure() const { if(parent) THROW_EXCEPTION2(std::logic_error, "Only top level structure may be built. Missing endNested() ?"); StructureConstPtr type; { FieldBuilderPtr tbuild(getFieldCreate()->createFieldBuilder()); child_struct::buildStruct(*this, tbuild); type = tbuild->createStructure(); } PVStructure::shared_pointer root(type->build()); child_struct::storeStruct(*this, root); return root; }
StructureConstPtr FieldCreate::appendFields( StructureConstPtr const & structure, StringArray const & fieldNames, FieldConstPtrArray const & fields) const { StringArray oldNames = structure->getFieldNames(); FieldConstPtrArray oldFields = structure->getFields(); size_t oldLen = oldNames.size(); size_t extra = fieldNames.size(); StringArray newNames(oldLen+extra); FieldConstPtrArray newFields(oldLen+extra); for(size_t i = 0; i<oldLen; i++) { newNames[i] = oldNames[i]; newFields[i] = oldFields[i]; } for(size_t i = 0; i<extra; i++) { newNames[oldLen +i] = fieldNames[i]; newFields[oldLen +i] = fields[i]; } return createStructure(structure->getID(),newNames,newFields); }
void RecordProcess::initialize() { pvRecord.lock(); try { if(trace) traceMessage(" initialize"); PVRecordStructure &pvRecordStructure = pvRecord.getPVRecordStructure(); PVStructure &pvStructure = pvRecordStructure.getPVStructure(); fieldSupport = const_cast<Support *>(pvRecordStructure.getSupport()); if(fieldSupport==0) { throw std::logic_error(pvRecord.getRecordName() + " has no support"); } PVFieldPtrArray pvFields = pvStructure.getPVFields(); PVRecordFieldPtrArray pvRecordFields = pvRecordStructure.getPVRecordFields(); StructureConstPtr structure = pvStructure.getStructure(); int index; index = structure->getFieldIndex("timeStamp"); if(index>=0) { pvTimeStamp.attach(pvFields[index]); } index = structure->getFieldIndex("scan"); if(index>=0) { scanSupport = pvRecordFields[index]->getSupport(); scanField = ScanField::create(pvRecord); if(scanField.get()!=0) { pvSingleProcessRequester = &scanField->getSingleProcessRequesterPV(); pvRecordFieldSingleProcessRequester = &pvRecord.findPVRecordField(*pvSingleProcessRequester); pvProcessAfterStart = &scanField->getProcessAfterStartPV(); } } fieldSupport->initialize(); pvRecord.unlock(); } catch(...) { pvRecord.unlock(); throw; } }
void PVStructure::fixParentStructure() { PVStructure *parent = getParent(); if(parent==NULL) return; StructureConstPtr parentStructure = parent->structurePtr; String fieldName = getFieldName(); size_t index = parentStructure->getFieldIndex(fieldName); StringArray const &fieldNames = parentStructure->getFieldNames(); size_t num = fieldNames.size(); FieldConstPtrArray fields(num); FieldConstPtrArray const & oldFields = parentStructure->getFields(); for(size_t i=0; i< num; i++) { if(i==index) { fields[i] = structurePtr; } else { fields[i] = oldFields[i]; } } FieldConstPtr field = getFieldCreate()->createStructure( parentStructure->getID(),fieldNames,fields); parent->replaceField(field); parent->fixParentStructure(); }
void testDeserializeStructureAndCreatePVStructure() { buffer->clear(); registry->reset(); StructureConstPtr structureIn = getStructure("structure1"); serialize(structureIn,registry); buffer->flip(); PVStructurePtr pvStructureOut = registry->deserializeStructureAndCreatePVStructure(buffer,control); StructureConstPtr structureOut = pvStructureOut->getStructure(); assert(structureIn->getFieldName() == structureOut->getFieldName()); assert(structureIn->getType() == structureOut->getType()); delete pvStructureOut; }
void testSerializeFull() { buffer->clear(); ScalarConstPtr scalarIn = getScalar("field1"); IntrospectionRegistry::serializeFull(static_pointer_cast<const Field>(scalarIn),buffer,flusher); buffer->flip(); ScalarConstPtr scalarOut = static_pointer_cast<const Scalar>(IntrospectionRegistry::deserializeFull(buffer,control)); PVField *pvField = pvDataCreate->createPVField(0,scalarOut); pvFieldArray.push_back(pvField); assert(scalarIn->getFieldName() == scalarOut->getFieldName()); assert(scalarIn->getType() == scalarOut->getType()); buffer->clear(); ScalarArrayConstPtr scalarArrayIn = getScalarArray("fieldArray1"); IntrospectionRegistry::serializeFull(static_pointer_cast<const Field>(scalarArrayIn),buffer,flusher); buffer->flip(); ScalarArrayConstPtr scalarArrayOut = static_pointer_cast<const ScalarArray>(IntrospectionRegistry::deserializeFull(buffer,control)); pvField = pvDataCreate->createPVField(0,scalarArrayOut); pvFieldArray.push_back(pvField); assert(scalarArrayIn->getFieldName() == scalarArrayOut->getFieldName()); assert(scalarArrayIn->getType() == scalarArrayOut->getType()); buffer->clear(); StructureConstPtr structureIn = getStructure("struct1"); IntrospectionRegistry::serializeFull(static_pointer_cast<const Field>(structureIn),buffer,flusher); buffer->flip(); StructureConstPtr structureOut = static_pointer_cast<const Structure>(IntrospectionRegistry::deserializeFull(buffer,control)); pvField = pvDataCreate->createPVField(0,structureOut); pvFieldArray.push_back(pvField); assert(structureIn->getFieldName() == structureOut->getFieldName()); assert(structureIn->getType() == structureOut->getType()); buffer->clear(); StructureArrayConstPtr structureArrayIn = getStructureArray("struct1","structArray1"); IntrospectionRegistry::serializeFull(static_pointer_cast<const Field>(structureArrayIn),buffer,flusher); buffer->flip(); StructureArrayConstPtr structureArrayOut = static_pointer_cast<const StructureArray>(IntrospectionRegistry::deserializeFull(buffer,control)); pvField = pvDataCreate->createPVField(0,structureArrayOut); pvFieldArray.push_back(pvField); assert(structureArrayIn->getFieldName() == structureArrayOut->getFieldName()); assert(structureArrayIn->getType() == structureArrayOut->getType()); }
bool NTMatrix::isCompatible(StructureConstPtr const & structure) { if (structure.get() == 0) return false; ScalarArrayConstPtr valueField = structure->getField<ScalarArray>("value"); if (valueField.get() == 0 || valueField->getElementType() != pvDouble) return false; FieldConstPtr field = structure->getField("dim"); if (field.get()) { ScalarArrayConstPtr dimField = structure->getField<ScalarArray>("dim"); if (dimField.get() == 0 || dimField->getElementType() != pvInt) return false; } field = structure->getField("descriptor"); if (field.get()) { ScalarConstPtr descriptorField = structure->getField<Scalar>("descriptor"); if (!descriptorField.get() || descriptorField->getScalarType() != pvString) return false; } NTFieldPtr ntField = NTField::get(); field = structure->getField("alarm"); if (field.get() && !ntField->isAlarm(field)) return false; field = structure->getField("timeStamp"); if (field.get() && !ntField->isTimeStamp(field)) return false; field = structure->getField("display"); if (field.get() && !ntField->isDisplay(field)) return false; return true; }
bool NTScalar::isCompatible(StructureConstPtr const &structure) { if (structure.get() == 0) return false; ScalarConstPtr valueField = structure->getField<Scalar>("value"); if (valueField.get() == 0) return false; FieldConstPtr field = structure->getField("descriptor"); if (field.get()) { ScalarConstPtr descriptorField = structure->getField<Scalar>("descriptor"); if (!descriptorField.get() || descriptorField->getScalarType() != pvString) return false; } NTFieldPtr ntField = NTField::get(); field = structure->getField("alarm"); if (field.get() && !ntField->isAlarm(field)) return false; field = structure->getField("timeStamp"); if (field.get() && !ntField->isTimeStamp(field)) return false; field = structure->getField("display"); if (field.get() && !ntField->isDisplay(field)) return false; field = structure->getField("control"); if (field.get() && !ntField->isControl(field)) return false; return true; }
bool NTNDArray::is_a(StructureConstPtr const & structure) { return NTUtils::is_a(structure->getID(), URI); }
bool NTNDArray::isCompatible(StructureConstPtr const &structure) { if(!structure.get()) return false; UnionConstPtr valueField = structure->getField<Union>("value"); if(!NTValueType::isCompatible(valueField)) return false; StructureConstPtr codecField = structure->getField<Structure>("codec"); if(!NTCodec::isCompatible(codecField)) return false; ScalarConstPtr compressedSizeField = structure->getField<Scalar>("compressedSize"); if (compressedSizeField.get() == 0) return false; if (compressedSizeField->getScalarType() != pvLong) return false; ScalarConstPtr uncompressedSizeField = structure->getField<Scalar>("uncompressedSize"); if (uncompressedSizeField.get() == 0) return false; if (uncompressedSizeField->getScalarType() != pvLong) return false; StructureArrayConstPtr dimensionField = structure->getField<StructureArray>("dimension"); if (dimensionField.get() == 0) return false; StructureConstPtr dimElementStruc = dimensionField->getStructure(); if(!NTDimension::isCompatible(dimElementStruc)) return false; NTFieldPtr ntField = NTField::get(); StructureConstPtr dataTimeStampField = structure->getField<Structure>( "dataTimeStamp"); if (dataTimeStampField.get() == 0 || !ntField->isTimeStamp(dataTimeStampField)) return false; ScalarConstPtr uniqueIdField = structure->getField<Scalar>("uniqueId"); if (uniqueIdField.get() == 0) return false; if (uniqueIdField->getScalarType() != pvInt) return false; StructureArrayConstPtr attributeField = structure->getField<StructureArray>( "attribute"); StructureConstPtr attributeElementStruc = attributeField->getStructure(); if (!NTNDArrayAttribute::isCompatible(attributeElementStruc)) return false; FieldConstPtr field = structure->getField("descriptor"); if (field.get()) { ScalarConstPtr descriptorField = structure->getField<Scalar>("descriptor"); if (!descriptorField.get() || descriptorField->getScalarType() != pvString) return false; } field = structure->getField("alarm"); if (field.get() && !ntField->isAlarm(field)) return false; field = structure->getField("timeStamp"); if (field.get() && !ntField->isTimeStamp(field)) return false; field = structure->getField("display"); if (field.get() && !ntField->isDisplay(field)) return false; return true; }
bool NTNameValue::is_a(StructureConstPtr const & structure) { return NTUtils::is_a(structure->getID(), URI); }
void test_builder() { testDiag("test_builder"); NTContinuumBuilderPtr builder = NTContinuum::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTContinuum::is_a(structure)); testOk1(structure->getID() == NTContinuum::URI); testOk1(structure->getNumberFields() == 8); testOk1(structure->getField("base").get() != 0); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("units").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("base")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("base"))->getElementType() == pvDouble, "base array element type"); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("value")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("value"))->getElementType() == pvDouble, "value array element type"); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("units")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("units"))->getElementType() == pvString, "units array element type"); std::cout << *structure << std::endl; }
bool NTMultiChannel::is_a(StructureConstPtr const &structure) { return NTUtils::is_a(structure->getID(), URI); }
void test_builder(bool extraFields) { testDiag("test_builder"); NTNDArrayBuilderPtr builder = NTNDArray::createBuilder(); testOk(builder.get() != 0, "Got builder"); builder->addDescriptor()-> addTimeStamp()-> addAlarm()-> addDisplay(); if (extraFields) { builder->add("extra1",fieldCreate->createScalar(pvString))-> add("extra2",fieldCreate->createScalarArray(pvString)); } StructureConstPtr structure = builder->createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTNDArray::is_a(structure)); testOk1(structure->getID() == NTNDArray::URI); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("compressedSize").get() != 0); testOk1(structure->getField("uncompressedSize").get() != 0); testOk1(structure->getField("codec").get() != 0); testOk1(structure->getField("dimension").get() != 0); testOk1(structure->getField("uniqueId").get() != 0); testOk1(structure->getField("dataTimeStamp").get() != 0); testOk1(structure->getField("attribute").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("display").get() != 0); if (extraFields) { testOk1(structure->getField("extra1").get() != 0); testOk1(structure->getField("extra2").get() != 0); } std::cout << *structure << std::endl; }
bool NTScalar::is_a(StructureConstPtr const & structure) { return NTUtils::is_a(structure->getID(), URI); }
void test_builder() { testDiag("test_builder"); NTTableBuilderPtr builder = NTTable::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addColumn("column0", pvDouble)-> addColumn("column1", pvString)-> addColumn("column2", pvInt)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTTable::is_a(structure)); testOk1(structure->getID() == NTTable::URI); testOk1(structure->getNumberFields() == 7); testOk1(structure->getField("labels").get() != 0); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("extra1").get() != 0); testOk1(structure->getField("extra2").get() != 0); StructureConstPtr s = dynamic_pointer_cast<const Structure>(structure->getField("value")); #define TEST_COLUMN(name, type) \ testOk(s.get() != 0 && \ s->getField(name).get() != 0 && \ dynamic_pointer_cast<const ScalarArray>(s->getField(name)).get() != 0 && \ dynamic_pointer_cast<const ScalarArray>(s->getField(name))->getElementType() == type, \ name " check"); TEST_COLUMN("column0", pvDouble); TEST_COLUMN("column1", pvString); TEST_COLUMN("column2", pvInt); #undef TEST_COLUMN std::cout << *structure << std::endl; // duplicate test try { structure = builder-> addColumn("column0", pvDouble)-> addColumn("column0", pvString)-> createStructure(); testFail("duplicate column name"); } catch (std::runtime_error &) { testPass("duplicate column name"); } }
bool NTAttribute::is_a(StructureConstPtr const & structure) { return NTUtils::is_a(structure->getID(), URI); }
void test_builder() { testDiag("test_builder"); NTScalarArrayBuilderPtr builder = NTScalarArray::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> value(pvDouble)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addDisplay()-> addControl()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTScalarArray::is_a(structure)); testOk1(structure->getID() == NTScalarArray::URI); testOk1(structure->getNumberFields() == 8); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("display").get() != 0); testOk1(structure->getField("control").get() != 0); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("value")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("value"))->getElementType() == pvDouble, "value type"); std::cout << *structure << std::endl; // no value set try { structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addDisplay()-> addControl()-> createStructure(); testFail("no value type set"); } catch (std::runtime_error &) { testPass("no value type set"); } }
bool NTHistogram::is_a(StructureConstPtr const & structure) { return NTUtils::is_a(structure->getID(), URI); }