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;