make it work with latest pvDataCPP.
This commit is contained in:
@@ -64,7 +64,7 @@ bool NTField::isTimeStamp(FieldConstPtr const & field)
|
||||
ScalarConstPtr s = static_pointer_cast<const Scalar>(f);
|
||||
if(s->getScalarType()!=pvLong) return false;
|
||||
f = fields[1];
|
||||
if(names[1].compare("nanoSeconds")!=0) return false;
|
||||
if(names[1].compare("nanoseconds")!=0) return false;
|
||||
if(f->getType()!=scalar) return false;
|
||||
s = static_pointer_cast<const Scalar>(f);
|
||||
if(s->getScalarType()!=pvInt) return false;
|
||||
@@ -184,7 +184,7 @@ bool NTField::isAlarmLimit(FieldConstPtr const & field)
|
||||
s = static_pointer_cast<const Scalar>(f);
|
||||
if(s->getScalarType()!=pvInt) return false;
|
||||
f = fields[9];
|
||||
if(names[9].compare("hystersis")!=0) return false;
|
||||
if(names[9].compare("hysteresis")!=0) return false;
|
||||
if(f->getType()!=scalar) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <pv/pvAlarm.h>
|
||||
#include <pv/timeStamp.h>
|
||||
#include <pv/pvTimeStamp.h>
|
||||
#include <pv/sharedVector.h>
|
||||
|
||||
namespace epics { namespace pvData {
|
||||
/**
|
||||
@@ -23,8 +24,6 @@ namespace epics { namespace pvData {
|
||||
*
|
||||
*/
|
||||
|
||||
typedef std::tr1::shared_ptr<epics::pvData::StringArray> StringArrayPtr;
|
||||
|
||||
class NTField;
|
||||
typedef std::tr1::shared_ptr<NTField> NTFieldPtr;
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ bool NTTable::isNTTable(PVStructurePtr const & pvStructure)
|
||||
|
||||
NTTablePtr NTTable::create(
|
||||
bool hasFunction,bool hasTimeStamp, bool hasAlarm,
|
||||
StringArray const & valueNames,
|
||||
shared_vector<std::string> const & valueNames,
|
||||
FieldConstPtrArray const &valueFields)
|
||||
{
|
||||
StandardFieldPtr standardField = getStandardField();
|
||||
@@ -55,10 +55,8 @@ NTTablePtr NTTable::create(
|
||||
nfields += valueFields.size();
|
||||
FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
FieldConstPtrArray fields;
|
||||
StringArray names;
|
||||
fields.resize(nfields);
|
||||
names.resize(nfields);
|
||||
FieldConstPtrArray fields(nfields);
|
||||
StringArray names(nfields);
|
||||
size_t ind = 0;
|
||||
if(hasFunction) {
|
||||
names[ind] = "function";
|
||||
@@ -83,7 +81,10 @@ NTTablePtr NTTable::create(
|
||||
PVStructurePtr pvStructure = pvDataCreate->createPVStructure(st);
|
||||
PVStringArrayPtr pvLabel = static_pointer_cast<PVStringArray>
|
||||
(pvStructure->getScalarArrayField("label",pvString));
|
||||
pvLabel->put(0,numberValues,valueNames,0);
|
||||
shared_vector<std::string> xxx(numberValues);
|
||||
for(size_t i=0; i<numberValues; ++i) xxx[i] = valueNames[i];
|
||||
shared_vector<const std::string> data(freeze(xxx));
|
||||
pvLabel->replace(data);
|
||||
return NTTablePtr(new NTTable(pvStructure));
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
*/
|
||||
static NTTablePtr create(
|
||||
bool hasFunction,bool hasTimeStamp, bool hasAlarm,
|
||||
StringArray const & valueNames,
|
||||
shared_vector<std::string> const & valueNames,
|
||||
FieldConstPtrArray const &valueFields);
|
||||
static NTTablePtr clone(PVStructurePtr const &);
|
||||
/**
|
||||
|
||||
@@ -14,16 +14,18 @@
|
||||
#include <cstdlib>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <list>
|
||||
#include <iostream>
|
||||
|
||||
#include <epicsAssert.h>
|
||||
|
||||
#include <pv/nt.h>
|
||||
|
||||
using namespace epics::pvData;
|
||||
using std::string;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
@@ -31,61 +33,42 @@ static StandardFieldPtr standardField = getStandardField();
|
||||
static StandardPVFieldPtr standardPVField = getStandardPVField();
|
||||
static NTFieldPtr ntField = NTField::get();
|
||||
static PVNTFieldPtr pvntField = PVNTField::get();
|
||||
static String builder;
|
||||
|
||||
static void testNTField(FILE * fd)
|
||||
{
|
||||
StructureConstPtr structureConstPtr = ntField->createEnumerated();
|
||||
builder.clear();
|
||||
structureConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
assert(ntField->isEnumerated(structureConstPtr));
|
||||
|
||||
structureConstPtr = ntField->createTimeStamp();
|
||||
builder.clear();
|
||||
structureConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
assert(ntField->isTimeStamp(structureConstPtr));
|
||||
|
||||
structureConstPtr = ntField->createAlarm();
|
||||
builder.clear();
|
||||
structureConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
assert(ntField->isAlarm(structureConstPtr));
|
||||
|
||||
structureConstPtr = ntField->createDisplay();
|
||||
builder.clear();
|
||||
structureConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
assert(ntField->isDisplay(structureConstPtr));
|
||||
|
||||
structureConstPtr = ntField->createAlarmLimit();
|
||||
builder.clear();
|
||||
structureConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
assert(ntField->isAlarmLimit(structureConstPtr));
|
||||
|
||||
structureConstPtr = ntField->createControl();
|
||||
builder.clear();
|
||||
structureConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
assert(ntField->isControl(structureConstPtr));
|
||||
|
||||
StructureArrayConstPtr structureArrayConstPtr
|
||||
= ntField->createEnumeratedArray();
|
||||
builder.clear();
|
||||
structureArrayConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
|
||||
structureArrayConstPtr = ntField->createTimeStampArray();
|
||||
builder.clear();
|
||||
structureArrayConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
|
||||
structureArrayConstPtr = ntField->createAlarmArray();
|
||||
builder.clear();
|
||||
structureArrayConstPtr->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *structureConstPtr << endl;
|
||||
}
|
||||
|
||||
static void testPVNTField(FILE * fd)
|
||||
@@ -97,61 +80,39 @@ static void testPVNTField(FILE * fd)
|
||||
choices[2] = "three";
|
||||
PVStructurePtr pvStructure = PVStructurePtr(
|
||||
pvntField->createEnumerated(choices));
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(ntField->isEnumerated(pvStructure->getStructure()));
|
||||
|
||||
pvStructure = PVStructurePtr(pvntField->createTimeStamp());
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(ntField->isTimeStamp(pvStructure->getStructure()));
|
||||
|
||||
pvStructure = PVStructurePtr(pvntField->createAlarm());
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(ntField->isAlarm(pvStructure->getStructure()));
|
||||
|
||||
pvStructure = PVStructurePtr(pvntField->createDisplay());
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(ntField->isDisplay(pvStructure->getStructure()));
|
||||
|
||||
pvStructure = PVStructurePtr(pvntField->createAlarmLimit());
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(ntField->isAlarmLimit(pvStructure->getStructure()));
|
||||
|
||||
PVStructureArrayPtr pvStructureArray = PVStructureArrayPtr(
|
||||
pvntField->createEnumeratedArray());
|
||||
builder.clear();
|
||||
pvStructureArray->toString(&builder);
|
||||
fprintf(fd,"\n%s\n",builder.c_str());
|
||||
builder.clear();
|
||||
pvStructureArray->getStructureArray()->getStructure()->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
cout << *pvStructureArray->getStructureArray()->getStructure();
|
||||
|
||||
pvStructureArray = PVStructureArrayPtr(
|
||||
pvntField->createTimeStampArray());
|
||||
builder.clear();
|
||||
pvStructureArray->toString(&builder);
|
||||
fprintf(fd,"\n%s\n",builder.c_str());
|
||||
builder.clear();
|
||||
pvStructureArray->getStructureArray()->getStructure()->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
cout << *pvStructureArray->getStructureArray()->getStructure();
|
||||
|
||||
pvStructureArray = PVStructureArrayPtr(
|
||||
pvntField->createAlarmArray());
|
||||
builder.clear();
|
||||
pvStructureArray->toString(&builder);
|
||||
fprintf(fd,"\n%s\n",builder.c_str());
|
||||
builder.clear();
|
||||
pvStructureArray->getStructureArray()->getStructure()->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
cout << *pvStructureArray->getStructureArray()->getStructure();
|
||||
}
|
||||
|
||||
int main(int argc,char *argv[])
|
||||
|
||||
@@ -14,45 +14,41 @@
|
||||
#include <cstdlib>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <list>
|
||||
#include <iostream>
|
||||
|
||||
#include <epicsAssert.h>
|
||||
|
||||
#include <pv/nt.h>
|
||||
#include <pv/sharedVector.h>
|
||||
|
||||
using namespace epics::pvData;
|
||||
using std::string;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
static NTFieldPtr ntField = NTField::get();
|
||||
static PVNTFieldPtr pvntField = PVNTField::get();
|
||||
static String builder;
|
||||
|
||||
static void test(FILE * fd)
|
||||
{
|
||||
NTNameValuePtr ntNameValue = NTNameValue::create(true,true,true);
|
||||
PVStructurePtr pvStructure = ntNameValue->getPVStructure();
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
builder.clear();
|
||||
pvStructure->getStructure()->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
cout << *pvStructure->getStructure() << endl;
|
||||
PVStringArrayPtr names = ntNameValue->getNames();
|
||||
PVStringArrayPtr values = ntNameValue->getValues();
|
||||
size_t n = 2;
|
||||
StringArray name;
|
||||
StringArray value;
|
||||
name.resize(n);
|
||||
value.resize(n);
|
||||
shared_vector<string> name(n);
|
||||
shared_vector<string> value(n);
|
||||
name[0] = "name 0";
|
||||
name[1] = "name 1";
|
||||
value[0] = "value 0";
|
||||
value[1] = "value 1";
|
||||
names->put(0,n,name,0);
|
||||
values->put(0,n,value,0);
|
||||
names->replace(freeze(name));
|
||||
values->replace(freeze(value));
|
||||
PVStringPtr function = ntNameValue->getFunction();
|
||||
function->put("test");
|
||||
PVAlarm pvAlarm;
|
||||
@@ -66,9 +62,7 @@ static void test(FILE * fd)
|
||||
ntNameValue->attachTimeStamp(pvTimeStamp);
|
||||
TimeStamp timeStamp(1000,1000,10);
|
||||
pvTimeStamp.set(timeStamp);
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(NTNameValue::isNTNameValue(pvStructure));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,29 +14,29 @@
|
||||
#include <cstdlib>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <list>
|
||||
|
||||
#include <iostream>
|
||||
#include <epicsAssert.h>
|
||||
|
||||
#include <pv/nt.h>
|
||||
|
||||
using namespace epics::pvData;
|
||||
using std::tr1::static_pointer_cast;
|
||||
using std::string;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
static NTFieldPtr ntField = NTField::get();
|
||||
static PVNTFieldPtr pvntField = PVNTField::get();
|
||||
static String builder;
|
||||
|
||||
static void test(FILE * fd)
|
||||
{
|
||||
size_t n = 2;
|
||||
FieldConstPtrArray fields(n);
|
||||
StringArray names(n);
|
||||
shared_vector<string> names(n);
|
||||
names[0] = "position";
|
||||
names[1] = "alarms";
|
||||
fields[0] = fieldCreate->createScalarArray(pvDouble);
|
||||
@@ -44,23 +44,19 @@ static void test(FILE * fd)
|
||||
NTTablePtr ntTable = NTTable::create(
|
||||
true,true,true,names,fields);
|
||||
PVStructurePtr pvStructure = ntTable->getPVStructure();
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
builder.clear();
|
||||
pvStructure->getStructure()->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
cout << *pvStructure->getStructure() << endl;
|
||||
PVDoubleArrayPtr pvPositions
|
||||
= static_pointer_cast<PVDoubleArray>(ntTable->getPVField(0));
|
||||
DoubleArray positions(2);
|
||||
shared_vector<double> positions(2);
|
||||
positions[0] = 1.0;
|
||||
positions[1] = 2.0;
|
||||
pvPositions->put(0,2,positions,0);
|
||||
pvPositions->replace(freeze(positions));
|
||||
PVStructureArrayPtr pvAlarms
|
||||
= static_pointer_cast<PVStructureArray>(ntTable->getPVField(1));
|
||||
PVAlarm pvAlarm;
|
||||
Alarm alarm;
|
||||
PVStructurePtrArray palarms(n);
|
||||
shared_vector<PVStructurePtr> palarms(n);
|
||||
for(size_t i=0; i<n; i++) {
|
||||
palarms[i] = pvntField->createAlarm();
|
||||
pvAlarm.attach(palarms[i]);
|
||||
@@ -69,12 +65,12 @@ static void test(FILE * fd)
|
||||
alarm.setStatus(clientStatus);
|
||||
pvAlarm.set(alarm);
|
||||
}
|
||||
pvAlarms->put(0,n,palarms,0);
|
||||
StringArray labels(n);
|
||||
pvAlarms->replace(freeze(palarms));
|
||||
shared_vector<string> labels(n);
|
||||
labels[0] = pvPositions->getFieldName();
|
||||
labels[1] = pvAlarms->getFieldName();
|
||||
PVStringArrayPtr label = ntTable->getLabel();
|
||||
label->put(0,n,labels,0);
|
||||
label->replace(freeze(labels));
|
||||
PVStringPtr function = ntTable->getFunction();
|
||||
function->put("test");
|
||||
ntTable->attachAlarm(pvAlarm);
|
||||
@@ -86,9 +82,7 @@ static void test(FILE * fd)
|
||||
ntTable->attachTimeStamp(pvTimeStamp);
|
||||
TimeStamp timeStamp(1000,1000,10);
|
||||
pvTimeStamp.set(timeStamp);
|
||||
builder.clear();
|
||||
pvStructure->toString(&builder);
|
||||
fprintf(fd,"%s\n",builder.c_str());
|
||||
cout << *pvStructure << endl;
|
||||
assert(NTTable::isNTTable(pvStructure));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user