diff --git a/src/nt/ntmultiChannel.cpp b/src/nt/ntmultiChannel.cpp
index b48086a..35dbfd7 100644
--- a/src/nt/ntmultiChannel.cpp
+++ b/src/nt/ntmultiChannel.cpp
@@ -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;
}
diff --git a/src/nt/ntmultiChannel.h b/src/nt/ntmultiChannel.h
index c0e806f..0c59a57 100644
--- a/src/nt/ntmultiChannel.h
+++ b/src/nt/ntmultiChannel.h
@@ -99,6 +99,11 @@ namespace detail {
* @return this instance of NTMultiChannelBuilder.
*/
shared_pointer addUserTag();
+ /**
+ * Add isConnected array to the NTMultiChannel.
+ * @return this instance of NTMultiChannelBuilder.
+ */
+ shared_pointer addIsConnected();
/**
* Create a Structure 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;
diff --git a/src/nt/ntscalarMultiChannel.cpp b/src/nt/ntscalarMultiChannel.cpp
index 2d45142..043e712 100644
--- a/src/nt/ntscalarMultiChannel.cpp
+++ b/src/nt/ntscalarMultiChannel.cpp
@@ -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;
}
diff --git a/src/nt/ntscalarMultiChannel.h b/src/nt/ntscalarMultiChannel.h
index 9b8c295..645147f 100644
--- a/src/nt/ntscalarMultiChannel.h
+++ b/src/nt/ntscalarMultiChannel.h
@@ -100,6 +100,11 @@ namespace detail {
* @return this instance of NTScalarMultiChannelBuilder.
*/
shared_pointer addUserTag();
+ /**
+ * Add isConnected array to the NTScalarMultiChannel.
+ * @return this instance of NTScalarMultiChannelBuilder.
+ */
+ shared_pointer addIsConnected();
/**
* Create a Structure 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;