Make isConnected optional field of multi-channel types
A boolean[] isConnected field was included in all constructed NTMultiChannels and NTScalarMultiChannels. However this is neither a required nor optional field of these types. Applications use this though, (specifically pvaClient) so treat as if optional field. Add addIsConnected() function to builders and retain isConnected() in wrapper classes. Leave isConnected field in structures until clients updated.
This commit is contained in:
@@ -84,10 +84,16 @@ NTMultiChannelBuilder::shared_pointer NTMultiChannelBuilder::addUserTag()
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
NTMultiChannelBuilder::shared_pointer NTMultiChannelBuilder::addIsConnected()
|
||||
{
|
||||
isConnected = true;
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
StructureConstPtr NTMultiChannelBuilder::createStructure()
|
||||
{
|
||||
StandardFieldPtr standardField = getStandardField();
|
||||
size_t nfields = 3;
|
||||
size_t nfields = 2;
|
||||
size_t extraCount = extraFieldNames.size();
|
||||
nfields += extraCount;
|
||||
if(descriptor) ++nfields;
|
||||
@@ -99,6 +105,7 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
|
||||
if(secondsPastEpoch) ++nfields;
|
||||
if(nanoseconds) ++nfields;
|
||||
if(userTag) ++nfields;
|
||||
if(isConnected) ++nfields;
|
||||
FieldConstPtrArray fields(nfields);
|
||||
StringArray names(nfields);
|
||||
size_t ind = 0;
|
||||
@@ -110,8 +117,6 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
|
||||
}
|
||||
names[ind] = "channelName";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvString);
|
||||
names[ind] = "isConnected";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvBoolean);
|
||||
if(descriptor) {
|
||||
names[ind] = "descriptor";
|
||||
fields[ind++] = fieldCreate->createScalar(pvString);
|
||||
@@ -148,6 +153,10 @@ StructureConstPtr NTMultiChannelBuilder::createStructure()
|
||||
names[ind] = "userTag";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvInt);
|
||||
}
|
||||
if(isConnected) {
|
||||
names[ind] = "isConnected";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvBoolean);
|
||||
}
|
||||
for (size_t i = 0; i< extraCount; i++) {
|
||||
names[ind] = extraFieldNames[i];
|
||||
fields[ind++] = extraFields[i];
|
||||
@@ -187,6 +196,9 @@ void NTMultiChannelBuilder::reset()
|
||||
secondsPastEpoch = false;
|
||||
nanoseconds = false;
|
||||
userTag = false;
|
||||
// TODO When client code updated, don't include isConnected by default
|
||||
// i.e. change line below to isConnected = false;
|
||||
isConnected = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -99,6 +99,11 @@ namespace detail {
|
||||
* @return this instance of <b>NTMultiChannelBuilder</b>.
|
||||
*/
|
||||
shared_pointer addUserTag();
|
||||
/**
|
||||
* Add isConnected array to the NTMultiChannel.
|
||||
* @return this instance of <b>NTMultiChannelBuilder</b>.
|
||||
*/
|
||||
shared_pointer addIsConnected();
|
||||
/**
|
||||
* Create a <b>Structure</b> that represents NTMultiChannel.
|
||||
* This resets this instance state and allows new instance to be created.
|
||||
@@ -139,6 +144,7 @@ namespace detail {
|
||||
bool secondsPastEpoch;
|
||||
bool nanoseconds;
|
||||
bool userTag;
|
||||
bool isConnected;
|
||||
|
||||
// NOTE: this preserves order, however it does not handle duplicates
|
||||
epics::pvData::StringArray extraFieldNames;
|
||||
|
||||
@@ -84,10 +84,16 @@ NTScalarMultiChannelBuilder::shared_pointer NTScalarMultiChannelBuilder::addUser
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
NTScalarMultiChannelBuilder::shared_pointer NTScalarMultiChannelBuilder::addIsConnected()
|
||||
{
|
||||
isConnected = true;
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
StructureConstPtr NTScalarMultiChannelBuilder::createStructure()
|
||||
{
|
||||
StandardFieldPtr standardField = getStandardField();
|
||||
size_t nfields = 3;
|
||||
size_t nfields = 2;
|
||||
size_t extraCount = extraFieldNames.size();
|
||||
nfields += extraCount;
|
||||
if(descriptor) ++nfields;
|
||||
@@ -99,6 +105,7 @@ StructureConstPtr NTScalarMultiChannelBuilder::createStructure()
|
||||
if(secondsPastEpoch) ++nfields;
|
||||
if(nanoseconds) ++nfields;
|
||||
if(userTag) ++nfields;
|
||||
if(isConnected) ++nfields;
|
||||
FieldConstPtrArray fields(nfields);
|
||||
StringArray names(nfields);
|
||||
size_t ind = 0;
|
||||
@@ -106,8 +113,6 @@ StructureConstPtr NTScalarMultiChannelBuilder::createStructure()
|
||||
fields[ind++] = fieldCreate->createScalarArray(valueType);
|
||||
names[ind] = "channelName";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvString);
|
||||
names[ind] = "isConnected";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvBoolean);
|
||||
if(descriptor) {
|
||||
names[ind] = "descriptor";
|
||||
fields[ind++] = fieldCreate->createScalar(pvString);
|
||||
@@ -144,6 +149,10 @@ StructureConstPtr NTScalarMultiChannelBuilder::createStructure()
|
||||
names[ind] = "userTag";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvInt);
|
||||
}
|
||||
if(isConnected) {
|
||||
names[ind] = "isConnected";
|
||||
fields[ind++] = fieldCreate->createScalarArray(pvBoolean);
|
||||
}
|
||||
for (size_t i = 0; i< extraCount; i++) {
|
||||
names[ind] = extraFieldNames[i];
|
||||
fields[ind++] = extraFields[i];
|
||||
@@ -184,6 +193,9 @@ void NTScalarMultiChannelBuilder::reset()
|
||||
secondsPastEpoch = false;
|
||||
nanoseconds = false;
|
||||
userTag = false;
|
||||
// TODO When client code updated, don't include isConnected by default
|
||||
// i.e. change line below to isConnected = false;
|
||||
isConnected = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -100,6 +100,11 @@ namespace detail {
|
||||
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
|
||||
*/
|
||||
shared_pointer addUserTag();
|
||||
/**
|
||||
* Add isConnected array to the NTScalarMultiChannel.
|
||||
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
|
||||
*/
|
||||
shared_pointer addIsConnected();
|
||||
/**
|
||||
* Create a <b>Structure</b> that represents NTScalarMultiChannel.
|
||||
* This resets this instance state and allows new instance to be created.
|
||||
@@ -140,6 +145,7 @@ namespace detail {
|
||||
bool secondsPastEpoch;
|
||||
bool nanoseconds;
|
||||
bool userTag;
|
||||
bool isConnected;
|
||||
|
||||
// NOTE: this preserves order, however it does not handle duplicates
|
||||
epics::pvData::StringArray extraFieldNames;
|
||||
|
||||
Reference in New Issue
Block a user