This product is made available subject to acceptance of the EPICS open source license.
EPICS Version 4 provides efficient
storage, access, and communication, of memory resident structured data.
pvData is the storage compoment.
pvDataCPP is the C++ implementation of pvData.
It is one part of the set of related products in the EPICS
V4 control system programming environment:
relatedDocumentsV4.html
For now this is a working copy so it is not the same as "This version" shown above.
This is the 23-July-2014 version of the C++ implementation of pvData.
RELEASE_NOTES.md provides changes since the last release. TODO.md describes things to do before the next release.
This section describes the C++ implemmentation of normative types. Two (2) helper classes are implemented, ntNameValue and NTTable respectively.
These are helper classes for creating standard fields for normative types. There is a single instance of this class, which is obtained via NTField::get().
class NTField: NoDefaultMethods {
public:
static NTFieldPtr get();
~NTField() {}
PVStructurePtr createEnumerated(StringArray const & choices);
PVStructurePtr createTimeStamp();
PVStructurePtr createAlarm();
PVStructurePtr createDisplay();
PVStructurePtr createAlarmLimit();
PVStructurePtr createControl();
PVStructureArrayPtr createEnumeratedArray();
PVStructureArrayPtr createTimeStampArray();
PVStructureArrayPtr createAlarmArray();
};
where
These are helper classes for NTNameValue
class NTNameValue : private NoDefaultMethods
{
public:
static bool isNTNameValue(PVStructurePtr const & pvStructure);
static NTNameValuePtr create(
bool hasFunction,bool hasTimeStamp, bool hasAlarm);
static NTNameValuePtr create(
PVStructurePtr const & pvStructure);
~NTNameValue();
PVStringPtr getFunction();
void attachTimeStamp(PVTimeStamp &pvTimeStamp);
void attachAlarm(PVAlarm &pvAlarm);
PVStructurePtr getPVStructure();
PVStructurePtr getTimeStamp();
PVStructurePtr getAlarm();
PVStringArrayPtr getNames();
PVStringArrayPtr getValues();
};
where
These are helper classes for NTTable
class NTTable: private NoDefaultMethods
{
public:
static bool isNTTable(PVStructurePtr const & pvStructure);
static PVStructure::shared_pointer create(
bool hasFunction,bool hasTimeStamp, bool hasAlarm,
int numberValues,
FieldConstPtrArray valueFields);
static NTTablePtr create(
bool hasFunction,bool hasTimeStamp, bool hasAlarm,
StringArray const & valueNames,
FieldConstPtrArray const &valueFields);
static NTTablePtr clone(PVStructurePtr const &);
~NTTable();
PVStringPtr getFunction();
void attachTimeStamp(PVTimeStamp &pvTimeStamp);
void attachAlarm(PVAlarm &pvAlarm);
PVStructurePtr getPVStructure();
PVStructurePtr getTimeStamp();
PVStructurePtr getAlarm();
PVStringArrayPtr getLabel();
size_t getNumberValues();
FieldConstPtr getField(int index);
PVFieldPtr getPVField(int index);
};
where
structure NTMultiChannel union_t[] value string[] channelName time_t timeStamp :opt // time when data collected alarm_t alarm :opt // alarm associated with data collection int[] severity :opt // alarm severity for each value int[] status :opt // alarm status for each value string[] message :opt // alarm message for each value long[] secondsPastEpoch :opt // seconds for each value. int[] nanoseconds :opt // nanoseconds for each value string descriptor :opt // descriptor data