added userTag

This commit is contained in:
Marty Kraimer
2014-08-21 12:57:36 -04:00
parent 072113ab4a
commit c0cb48e97e
3 changed files with 26 additions and 2 deletions

View File

@@ -77,6 +77,12 @@ NTMultiChannelBuilder::shared_pointer NTMultiChannelBuilder::addNanoseconds()
return shared_from_this();
}
NTMultiChannelBuilder::shared_pointer NTMultiChannelBuilder::addUserTag()
{
userTag = true;
return shared_from_this();
}
StructureConstPtr NTMultiChannelBuilder::createStructure()
{
StandardFieldPtr standardField = getStandardField();
@@ -89,6 +95,7 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
if(message) ++nfields;
if(secondsPastEpoch) ++nfields;
if(nanoseconds) ++nfields;
if(userTag) ++nfields;
FieldConstPtrArray fields(nfields);
StringArray names(nfields);
size_t ind = 0;
@@ -132,6 +139,10 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
names[ind] = "nanoseconds";
fields[ind++] = fieldCreate->createScalarArray(pvInt);
}
if(userTag) {
names[ind] = "userTag";
fields[ind++] = fieldCreate->createScalarArray(pvInt);
}
StructureConstPtr st = fieldCreate->createStructure(NTMultiChannel::URI,names,fields);
reset();
return st;

View File

@@ -81,6 +81,11 @@ namespace detail {
* @return this instance of a {@code NTMultiChannelBuilder}.
*/
shared_pointer addNanoseconds();
/**
* Add userTag array to the NTMultiChannel.
* @return this instance of a {@code NTMultiChannelBuilder}.
*/
shared_pointer addUserTag();
/**
* Create a {@code Structure} that represents NTMultiChannel.
* This resets this instance state and allows new instance to be created.
@@ -114,6 +119,7 @@ namespace detail {
bool message;
bool secondsPastEpoch;
bool nanoseconds;
bool userTag;
friend class ::epics::nt::NTMultiChannel;
};
@@ -199,15 +205,20 @@ public:
*/
epics::pvData::PVStringArrayPtr getMessage() {return pvMessage;}
/**
* Get the SecondsPastEpoch of each channel.
* Get the secondsPastEpoch of each channel.
* @return PVLongArrayPtr which may be null.
*/
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() {return pvSecondsPastEpoch;}
/**
* Get the SecondsPastEpoch of each channel.
* Get the nanoseconds of each channel.
* @return PVIntArrayPtr which may be null.
*/
epics::pvData::PVIntArrayPtr getNanoseconds() {return pvNanoseconds;}
/**
* Get the userTag of each channel.
* @return PVIntArrayPtr which may be null.
*/
epics::pvData::PVIntArrayPtr getUserTag() {return pvUserTag;}
/**
* Get the descriptor.
* @return PVStringPtr which may be null.
@@ -225,6 +236,7 @@ private:
epics::pvData::PVStringArrayPtr pvMessage;
epics::pvData::PVLongArrayPtr pvSecondsPastEpoch;
epics::pvData::PVIntArrayPtr pvNanoseconds;
epics::pvData::PVIntArrayPtr pvUserTag;
epics::pvData::PVStringPtr pvDescriptor;
friend class detail::NTMultiChannelBuilder;
};

View File

@@ -113,6 +113,7 @@ static void test()
addMessage() ->
addSecondsPastEpoch() ->
addNanoseconds() ->
addUserTag() ->
create();
testOk1(multiChannel.get() != 0);
pvStructure = multiChannel->getPVStructure();