added "add(name,field)" to each bulder; added is_compatible to each NT(code is not complete)

This commit is contained in:
Marty Kraimer
2014-09-12 09:56:08 -04:00
parent 76546d22b4
commit ddee226a49
18 changed files with 264 additions and 23 deletions

View File

@ -87,6 +87,8 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
{
StandardFieldPtr standardField = getStandardField();
size_t nfields = 3;
size_t extraCount = extraFieldNames.size();
nfields += extraCount;
if(descriptor) ++nfields;
if(alarm) ++nfields;
if(timeStamp) ++nfields;
@ -145,6 +147,11 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
names[ind] = "userTag";
fields[ind++] = fieldCreate->createScalarArray(pvInt);
}
for (size_t i = 0; i< extraCount; i++) {
names[ind] = extraFieldNames[i];
fields[ind++] = extraFields[i];
}
StructureConstPtr st = fieldCreate->createStructure(NTMultiChannel::URI,names,fields);
reset();
return st;
@ -168,6 +175,8 @@ NTMultiChannelBuilder::NTMultiChannelBuilder()
void NTMultiChannelBuilder::reset()
{
valueUnion.reset();
extraFieldNames.clear();
extraFields.clear();
value = false;
descriptor = false;
alarm = false;
@ -180,9 +189,16 @@ void NTMultiChannelBuilder::reset()
userTag = false;
}
NTMultiChannelBuilder::shared_pointer NTMultiChannelBuilder::add(string const & name, FieldConstPtr const & field)
{
extraFields.push_back(field); extraFieldNames.push_back(name);
return shared_from_this();
}
const std::string NTMultiChannel::URI("uri:ev4:nt/2012/pwd:NTMultiChannel");
}
const std::string NTMultiChannel::URI("uri:ev4:nt/2014/pwd:NTMultiChannel");
NTMultiChannel::shared_pointer NTMultiChannel::narrow(PVStructurePtr const & structure)
{
@ -202,6 +218,13 @@ bool NTMultiChannel::is_a(StructureConstPtr const &structure)
return structure->getID() == URI;
}
bool NTMultiChannel::is_compatible(PVStructurePtr const &pvStructure)
{
PVUnionArrayPtr pvValue = pvStructure->getSubField<PVUnionArray>("value");
if(!pvValue) return false;
return true;
}
NTMultiChannelBuilderPtr NTMultiChannel::createBuilder()
{
return NTMultiChannelBuilderPtr(new detail::NTMultiChannelBuilder());

View File

@ -38,6 +38,7 @@ namespace detail {
POINTER_DEFINITIONS(NTMultiChannelBuilder);
/**
* specify the union for the value field.
* If this is not called then a variantUnion is the default.
* @return this instance of a {@code NTMultiChannelBuilder}.
*/
shared_pointer addValue(epics::pvData::UnionConstPtr valuePtr);
@ -104,6 +105,13 @@ namespace detail {
* @return a new instance of a {@code NTMultiChannel}
*/
NTMultiChannelPtr create();
/**
* Add extra {@code Field} to the type.
* @param name name of the field.
* @param field a field to add.
* @return this instance of a {@code NTMultiChannelBuilder}.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTMultiChannelBuilder();
@ -121,6 +129,10 @@ namespace detail {
bool nanoseconds;
bool userTag;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTMultiChannel;
};
@ -151,14 +163,22 @@ public:
* @return NTMultiChannel instance.
*/
static shared_pointer narrow_unsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the pvStructure an NTMultiChannel.
* Is the Structure an NTMultiChannel.
* This method structure->getID() and checks if it is the same as the URI.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_a(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the pvStructure compatible with NTMultiChannel.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The pvStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_compatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Create a NTMultiChannelBuilder instance
* @return builder instance.

View File

@ -108,7 +108,7 @@ NTNameValueBuilder::shared_pointer NTNameValueBuilder::add(string const & name,
}
const std::string NTNameValue::URI("uri:ev4:nt/2012/pwd:NTNameValue");
const std::string NTNameValue::URI("uri:ev4:nt/2014/pwd:NTNameValue");
NTNameValue::shared_pointer NTNameValue::narrow(PVStructurePtr const & structure)
{
@ -128,6 +128,15 @@ bool NTNameValue::is_a(StructureConstPtr const & structure)
return structure->getID() == URI;
}
bool NTNameValue::is_compatible(PVStructurePtr const & pvStructure)
{
PVStringArrayPtr pvNames = pvStructure->getSubField<PVStringArray>("names");
if(!pvNames) return false;
PVFieldPtr pvValues = pvStructure->getSubField("values");
if(!pvValues) return false;
return true;
}
NTNameValueBuilderPtr NTNameValue::createBuilder()
{
return NTNameValueBuilderPtr(new detail::NTNameValueBuilder());

View File

@ -140,7 +140,14 @@ public:
* @return (false,true) if (is not, is) an NTNameValue.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the pvStructure compatible with NTNameValue..
* This method introspects the fields to see if they are compatible.
* @param pvStructure The pvStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_compatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Create a NTNameValue builder instance.
* @return builder instance.

View File

@ -16,7 +16,7 @@ namespace epics { namespace nt {
namespace detail {
const std::string ntAttrStr("uri:ev4:nt/2012/pwd:NTAttribute");
const std::string ntAttrStr("uri:ev4:nt/2014/pwd:NTAttribute");
static FieldCreatePtr fieldCreate = getFieldCreate();
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
@ -41,6 +41,7 @@ StructureConstPtr NTNDArrayBuilder::createStructure()
static epics::pvData::StructureConstPtr attributeStruc;
static Mutex mutex;
Lock xx(mutex);
size_t index = 0;
@ -116,6 +117,11 @@ StructureConstPtr NTNDArrayBuilder::createStructure()
if (display)
fb->add("display", standardField->display());
size_t extraCount = extraFieldNames.size();
for (size_t i = 0; i< extraCount; i++)
fb->add(extraFieldNames[i], extraFields[i]);
ntndarrayStruc[index] = fb->createStructure();
}
@ -167,12 +173,21 @@ void NTNDArrayBuilder::reset()
timeStamp = false;
alarm = false;
display = false;
extraFieldNames.clear();
extraFields.clear();
}
NTNDArrayBuilder::shared_pointer NTNDArrayBuilder::add(string const & name, FieldConstPtr const & field)
{
extraFields.push_back(field); extraFieldNames.push_back(name);
return shared_from_this();
}
}
const std::string NTNDArray::URI("uri:ev4:nt/2012/pwd:NTNDArray");
const std::string ntAttrStr("uri:ev4:nt/2012/pwd:NTAttribute");
const std::string NTNDArray::URI("uri:ev4:nt/2014/pwd:NTNDArray");
const std::string ntAttrStr("uri:ev4:nt/2014/pwd:NTAttribute");
static FieldCreatePtr fieldCreate = getFieldCreate();
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
@ -195,6 +210,12 @@ bool NTNDArray::is_a(StructureConstPtr const & structure)
return structure->getID() == URI;
}
bool NTNDArray::is_compatible(PVStructurePtr const & pvStructure)
{
return true;
}
NTNDArrayBuilderPtr NTNDArray::createBuilder()
{
return NTNDArrayBuilderPtr(new detail::NTNDArrayBuilder());

View File

@ -75,6 +75,13 @@ namespace detail {
* @return a new instance of a {@code NTNDArray}
*/
NTNDArrayPtr create();
/**
* Add extra {@code Field} to the type.
* @param name name of the field.
* @param field a field to add.
* @return this instance of a {@code NTArrayBuilder}.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTNDArrayBuilder();
@ -86,6 +93,10 @@ namespace detail {
bool alarm;
bool display;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTNDArray;
};
@ -126,7 +137,14 @@ public:
* @return (false,true) if (is not, is) an NTNDArray.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the pvStructure compatible with NTNDArray..
* This method introspects the fields to see if they are compatible.
* @param pvStructure The pvStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_compatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Create a NTNDArrayBuilder instance
* @return builder instance.
@ -237,6 +255,7 @@ public:
private:
NTNDArray(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTNDArray;
friend class detail::NTNDArrayBuilder;
};

View File

@ -51,6 +51,11 @@ StructureConstPtr NTScalarBuilder::createStructure()
if (control)
builder->add("control", ntField->createControl());
size_t extraCount = extraFieldNames.size();
for (size_t i = 0; i< extraCount; i++)
builder->add(extraFieldNames[i], extraFields[i]);
StructureConstPtr s = builder->createStructure();
reset();
@ -112,9 +117,16 @@ void NTScalarBuilder::reset()
control = false;
}
NTScalarBuilder::shared_pointer NTScalarBuilder::add(string const & name, FieldConstPtr const & field)
{
extraFields.push_back(field); extraFieldNames.push_back(name);
return shared_from_this();
}
const std::string NTScalar::URI("uri:ev4:nt/2012/pwd:NTScalar");
}
const std::string NTScalar::URI("uri:ev4:nt/2014/pwd:NTScalar");
NTScalar::shared_pointer NTScalar::narrow(PVStructurePtr const & structure)
{
@ -134,6 +146,13 @@ bool NTScalar::is_a(StructureConstPtr const & structure)
return structure->getID() == URI;
}
bool NTScalar::is_compatible(PVStructurePtr const & pvStructure)
{
PVScalarPtr pvValue = pvStructure->getSubField<PVScalar>("value");
if(!pvValue) return false;
return true;
}
NTScalarBuilderPtr NTScalar::createBuilder()
{
return NTScalarBuilderPtr(new detail::NTScalarBuilder());

View File

@ -87,6 +87,13 @@ namespace detail {
* @return a new instance of a {@code NTScalar}
*/
NTScalarPtr create();
/**
* Add extra {@code Field} to the type.
* @param name name of the field.
* @param field a field to add.
* @return this instance of a {@code NTScalarBuilder}.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTScalarBuilder();
@ -102,6 +109,10 @@ namespace detail {
bool display;
bool control;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTScalar;
};
@ -144,7 +155,14 @@ public:
* @return (false,true) if (is not, is) an NTScalar.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the pvStructure compatible with NTScalar.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The pvStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_compatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Create a NTScalar builder instance.
* @return builder instance.
@ -244,6 +262,7 @@ private:
NTScalar(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTScalar;
epics::pvData::PVFieldPtr pvValue;
friend class detail::NTScalarBuilder;
};

View File

@ -51,6 +51,11 @@ StructureConstPtr NTScalarArrayBuilder::createStructure()
if (control)
builder->add("control", ntField->createControl());
size_t extraCount = extraFieldNames.size();
for (size_t i = 0; i< extraCount; i++)
builder->add(extraFieldNames[i], extraFields[i]);
StructureConstPtr s = builder->createStructure();
reset();
@ -112,9 +117,16 @@ void NTScalarArrayBuilder::reset()
control = false;
}
NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::add(string const & name, FieldConstPtr const & field)
{
extraFields.push_back(field); extraFieldNames.push_back(name);
return shared_from_this();
}
const std::string NTScalarArray::URI("uri:ev4:nt/2012/pwd:NTScalarArray");
}
const std::string NTScalarArray::URI("uri:ev4:nt/2014/pwd:NTScalarArray");
NTScalarArray::shared_pointer NTScalarArray::narrow(PVStructurePtr const & structure)
{
@ -134,6 +146,14 @@ bool NTScalarArray::is_a(StructureConstPtr const & structure)
return structure->getID() == URI;
}
bool NTScalarArray::is_compatible(PVStructurePtr const & pvStructure)
{
PVScalarArrayPtr pvValue = pvStructure->getSubField<PVScalarArray>("value");
if(!pvValue) return false;
return true;
}
NTScalarArrayBuilderPtr NTScalarArray::createBuilder()
{
return NTScalarArrayBuilderPtr(new detail::NTScalarArrayBuilder());

View File

@ -87,6 +87,13 @@ namespace detail {
* @return a new instance of a {@code NTScalarArray}
*/
NTScalarArrayPtr create();
/**
* Add extra {@code Field} to the type.
* @param name name of the field.
* @param field a field to add.
* @return this instance of a {@code NTScalarArrayBuilder}.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTScalarArrayBuilder();
@ -102,6 +109,10 @@ namespace detail {
bool display;
bool control;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTScalarArray;
};
@ -145,6 +156,14 @@ public:
* @return (false,true) if (is not, is) an NTScalarArray.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the pvStructure compatible with NTScalarArray..
* This method introspects the fields to see if they are compatible.
* @param pvStructure The pvStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_compatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Create a NTScalarArray builder instance.
@ -245,6 +264,7 @@ private:
NTScalarArray(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTScalarArray;
epics::pvData::PVFieldPtr pvValue;
friend class detail::NTScalarArrayBuilder;
};

View File

@ -58,6 +58,11 @@ StructureConstPtr NTTableBuilder::createStructure()
StructureConstPtr s = builder->createStructure();
size_t extraCount = extraFieldNames.size();
for (size_t i = 0; i< extraCount; i++)
builder->add(extraFieldNames[i], extraFields[i]);
reset();
return s;
}
@ -111,9 +116,16 @@ void NTTableBuilder::reset()
timeStamp = false;
}
NTTableBuilder::shared_pointer NTTableBuilder::add(string const & name, FieldConstPtr const & field)
{
extraFields.push_back(field); extraFieldNames.push_back(name);
return shared_from_this();
}
const std::string NTTable::URI("uri:ev4:nt/2012/pwd:NTTable");
}
const std::string NTTable::URI("uri:ev4:nt/2014/pwd:NTTable");
NTTable::shared_pointer NTTable::narrow(PVStructurePtr const & structure)
{
@ -133,6 +145,11 @@ bool NTTable::is_a(StructureConstPtr const & structure)
return structure->getID() == URI;
}
bool NTTable::is_compatible(PVStructurePtr const & pvStructure)
{
return true;
}
NTTableBuilderPtr NTTable::createBuilder()
{
return NTTableBuilderPtr(new detail::NTTableBuilder());

View File

@ -77,6 +77,13 @@ namespace detail {
* @return a new instance of a {@code NTTable}
*/
NTTablePtr create();
/**
* Add extra {@code Field} to the type.
* @param name name of the field.
* @param field a field to add.
* @return this instance of a {@code NTTableBuilder}.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTTableBuilder();
@ -90,6 +97,10 @@ namespace detail {
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTTable;
};
@ -132,7 +143,14 @@ public:
* @return (false,true) if (is not, is) an NTTable.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the pvStructure compatible with NTTable.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The pvStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
*/
static bool is_compatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Create a NTTable builder instance.
* @return builder instance.

View File

@ -49,6 +49,8 @@ static void test()
addAlarm()->
addTimeStamp()->
addSeverity() ->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
create();
testOk1(multiChannel.get() != 0);
@ -120,6 +122,7 @@ static void test()
testOk1(multiChannel.get() != 0);
pvStructure = multiChannel->getPVStructure();
if(debug) {cout << *pvStructure << endl;}
testOk1(NTMultiChannel::is_compatible(pvStructure)==true);
PVStructurePtr pvTimeStamp = multiChannel->getTimeStamp();
testOk1(pvTimeStamp.get() !=0);
PVStructurePtr pvAlarm = multiChannel->getAlarm();
@ -180,7 +183,7 @@ void test_narrow()
MAIN(testCreateRequest)
{
testPlan(24);
testPlan(25);
test();
test_narrow();
return testDone();

View File

@ -13,6 +13,8 @@ using namespace epics::nt;
using namespace epics::pvData;
using std::tr1::dynamic_pointer_cast;
static FieldCreatePtr fieldCreate = getFieldCreate();
void test_builder()
{
testDiag("test_builder");
@ -25,6 +27,8 @@ void test_builder()
addDescriptor()->
addAlarm()->
addTimeStamp()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createStructure();
testOk1(structure.get() != 0);
if (!structure)
@ -32,7 +36,7 @@ void test_builder()
testOk1(NTNameValue::is_a(structure));
testOk1(structure->getID() == NTNameValue::URI);
testOk1(structure->getNumberFields() == 5);
testOk1(structure->getNumberFields() == 7);
testOk1(structure->getField("names").get() != 0);
testOk1(structure->getField("values").get() != 0);
testOk1(structure->getField("descriptor").get() != 0);
@ -51,6 +55,8 @@ void test_builder()
addDescriptor()->
addAlarm()->
addTimeStamp()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createStructure();
testFail("no value type set");
} catch (std::runtime_error &) {
@ -70,6 +76,8 @@ void test_ntnameValue()
addDescriptor()->
addAlarm()->
addTimeStamp()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
create();
testOk1(ntNameValue.get() != 0);
@ -197,6 +205,7 @@ void test_narrow()
if (!pvStructure)
return;
testOk1(NTNameValue::is_compatible(pvStructure)==true);
NTNameValuePtr ptr = NTNameValue::narrow(pvStructure);
testOk(ptr.get() != 0, "narrow OK");
@ -236,7 +245,7 @@ void test_extra()
MAIN(testNTNameValue) {
testPlan(47);
testPlan(48);
test_builder();
test_ntnameValue();
test_narrow();

View File

@ -12,6 +12,7 @@
using namespace epics::nt;
using namespace epics::pvData;
using std::tr1::dynamic_pointer_cast;
static FieldCreatePtr fieldCreate = getFieldCreate();
void test_builder()
{
@ -25,6 +26,8 @@ void test_builder()
addTimeStamp()->
addAlarm()->
addDisplay()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createStructure();
testOk1(structure.get() != 0);
if (!structure)
@ -73,6 +76,7 @@ void test_narrow()
if (!pvStructure)
return;
testOk1(NTNDArray::is_compatible(pvStructure)==true);
NTNDArrayPtr ptr = NTNDArray::narrow(pvStructure);
testOk(ptr.get() != 0, "narrow OK");
@ -81,7 +85,7 @@ void test_narrow()
}
MAIN(testNTNDArray) {
testPlan(22);
testPlan(23);
test_builder();
test_narrow();
return testDone();

View File

@ -13,6 +13,8 @@ using namespace epics::nt;
using namespace epics::pvData;
using std::tr1::dynamic_pointer_cast;
static FieldCreatePtr fieldCreate = getFieldCreate();
void test_builder()
{
testDiag("test_builder");
@ -27,6 +29,8 @@ void test_builder()
addTimeStamp()->
addDisplay()->
addControl()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createStructure();
testOk1(structure.get() != 0);
if (!structure)
@ -34,7 +38,7 @@ void test_builder()
testOk1(NTScalarArray::is_a(structure));
testOk1(structure->getID() == NTScalarArray::URI);
testOk1(structure->getNumberFields() == 6);
testOk1(structure->getNumberFields() == 8);
testOk1(structure->getField("value").get() != 0);
testOk1(structure->getField("descriptor").get() != 0);
testOk1(structure->getField("alarm").get() != 0);
@ -222,6 +226,7 @@ void test_narrow()
if (!pvStructure)
return;
testOk1(NTScalarArray::is_compatible(pvStructure)==true);
NTScalarArrayPtr ptr = NTScalarArray::narrow(pvStructure);
testOk(ptr.get() != 0, "narrow OK");
@ -230,7 +235,7 @@ void test_narrow()
}
MAIN(testNTScalarArray) {
testPlan(37);
testPlan(38);
test_builder();
test_ntscalarArray();
test_narrow();

View File

@ -13,6 +13,7 @@ using namespace epics::nt;
using namespace epics::pvData;
using std::tr1::dynamic_pointer_cast;
static FieldCreatePtr fieldCreate = getFieldCreate();
void test_builder()
{
testDiag("test_builder");
@ -27,6 +28,8 @@ void test_builder()
addTimeStamp()->
addDisplay()->
addControl()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createStructure();
testOk1(structure.get() != 0);
if (!structure)
@ -34,7 +37,7 @@ void test_builder()
testOk1(NTScalar::is_a(structure));
testOk1(structure->getID() == NTScalar::URI);
testOk1(structure->getNumberFields() == 6);
testOk1(structure->getNumberFields() == 8);
testOk1(structure->getField("value").get() != 0);
testOk1(structure->getField("descriptor").get() != 0);
testOk1(structure->getField("alarm").get() != 0);
@ -211,6 +214,7 @@ void test_narrow()
if (!pvStructure)
return;
testOk1(NTScalar::is_compatible(pvStructure)==true);
NTScalarPtr ptr = NTScalar::narrow(pvStructure);
testOk(ptr.get() != 0, "narrow OK");
@ -219,7 +223,7 @@ void test_narrow()
}
MAIN(testNTScalar) {
testPlan(34);
testPlan(35);
test_builder();
test_ntscalar();
test_narrow();

View File

@ -12,6 +12,7 @@
using namespace epics::nt;
using namespace epics::pvData;
using std::tr1::dynamic_pointer_cast;
static FieldCreatePtr fieldCreate = getFieldCreate();
void test_builder()
{
@ -27,6 +28,8 @@ void test_builder()
addDescriptor()->
addAlarm()->
addTimeStamp()->
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createStructure();
testOk1(structure.get() != 0);
if (!structure)
@ -84,6 +87,7 @@ void test_labels()
if (!pvStructure)
return;
testOk1(NTTable::is_compatible(pvStructure)==true);
std::cout << *pvStructure << std::endl;
PVStringArrayPtr labels = pvStructure->getSubField<PVStringArray>("labels");
@ -230,7 +234,7 @@ void test_narrow()
}
MAIN(testNTTable) {
testPlan(45);
testPlan(46);
test_builder();
test_labels();
test_nttable();