NTNDArray. Created builder. Removed create and clone.
This commit is contained in:
@@ -14,41 +14,14 @@ using namespace epics::pvData;
|
||||
|
||||
namespace epics { namespace nt {
|
||||
|
||||
const std::string NTNDArray::URI("uri:ev4:nt/2012/pwd:NTNDArray");
|
||||
namespace detail {
|
||||
|
||||
const std::string ntAttrStr("uri:ev4:nt/2012/pwd:NTAttribute");
|
||||
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
|
||||
bool NTNDArray::is_a(StructureConstPtr const & structure)
|
||||
{
|
||||
return structure->getID() == URI;
|
||||
}
|
||||
|
||||
|
||||
NTNDArrayPtr NTNDArray::create(epics::pvData::PVStructurePtr const &pvStructure)
|
||||
{
|
||||
return NTNDArrayPtr(new NTNDArray(pvStructure));
|
||||
}
|
||||
|
||||
NTNDArrayPtr NTNDArray::create(bool hasDescriptor,
|
||||
bool hasTimeStamp, bool hasAlarm, bool hasDisplay)
|
||||
{
|
||||
PVStructurePtr pvStructure = pvDataCreate->createPVStructure(
|
||||
createStructure(hasDescriptor, hasTimeStamp, hasAlarm, hasDisplay));
|
||||
return NTNDArrayPtr(new NTNDArray(pvStructure));
|
||||
}
|
||||
|
||||
|
||||
NTNDArrayPtr NTNDArray::create()
|
||||
{
|
||||
return create(true,true,true,true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
StructureConstPtr NTNDArray::createStructure(bool hasDescriptor,
|
||||
bool hasTimeStamp, bool hasAlarm, bool hasDisplay)
|
||||
StructureConstPtr NTNDArrayBuilder::createStructure()
|
||||
{
|
||||
enum
|
||||
{
|
||||
@@ -71,10 +44,10 @@ StructureConstPtr NTNDArray::createStructure(bool hasDescriptor,
|
||||
Lock xx(mutex);
|
||||
|
||||
size_t index = 0;
|
||||
if (hasDescriptor) index |= 1 << DISCRIPTOR_INDEX;
|
||||
if (hasTimeStamp) index |= 1 << TIMESTAMP_INDEX;
|
||||
if (hasAlarm) index |= 1 << ALARM_INDEX;
|
||||
if (hasDisplay) index |= 1 << DISPLAY_INDEX;
|
||||
if (descriptor) index |= 1 << DISCRIPTOR_INDEX;
|
||||
if (timeStamp) index |= 1 << TIMESTAMP_INDEX;
|
||||
if (alarm) index |= 1 << ALARM_INDEX;
|
||||
if (display) index |= 1 << DISPLAY_INDEX;
|
||||
|
||||
if (ntndarrayStruc[index] == NULL)
|
||||
{
|
||||
@@ -121,7 +94,7 @@ StructureConstPtr NTNDArray::createStructure(bool hasDescriptor,
|
||||
createStructure();
|
||||
}
|
||||
|
||||
fb->setId(URI)->
|
||||
fb->setId(NTNDArray::URI)->
|
||||
add("value", valueType)->
|
||||
add("compressedSize", pvLong)->
|
||||
add("uncompressedSize", pvLong)->
|
||||
@@ -131,10 +104,17 @@ StructureConstPtr NTNDArray::createStructure(bool hasDescriptor,
|
||||
add("uniqueId", pvInt)->
|
||||
addArray("attribute", attributeStruc);
|
||||
|
||||
if (hasDescriptor) fb->add("descriptor", pvString);
|
||||
if (hasAlarm) fb->add("alarm", standardField->alarm());
|
||||
if (hasTimeStamp) fb->add("timeStamp", standardField->timeStamp());
|
||||
if (hasDisplay) fb->add("display", standardField->display());
|
||||
if (descriptor)
|
||||
fb->add("descriptor", pvString);
|
||||
|
||||
if (timeStamp)
|
||||
fb->add("timeStamp", standardField->timeStamp());
|
||||
|
||||
if (alarm)
|
||||
fb->add("alarm", standardField->alarm());
|
||||
|
||||
if (display)
|
||||
fb->add("display", standardField->display());
|
||||
|
||||
ntndarrayStruc[index] = fb->createStructure();
|
||||
}
|
||||
@@ -142,6 +122,72 @@ StructureConstPtr NTNDArray::createStructure(bool hasDescriptor,
|
||||
return ntndarrayStruc[index];
|
||||
}
|
||||
|
||||
NTNDArrayBuilder::shared_pointer NTNDArrayBuilder::addDescriptor()
|
||||
{
|
||||
descriptor = true;
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
NTNDArrayBuilder::shared_pointer NTNDArrayBuilder::addAlarm()
|
||||
{
|
||||
alarm = true;
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
NTNDArrayBuilder::shared_pointer NTNDArrayBuilder::addTimeStamp()
|
||||
{
|
||||
timeStamp = true;
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
NTNDArrayBuilder::shared_pointer NTNDArrayBuilder::addDisplay()
|
||||
{
|
||||
display = true;
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
PVStructurePtr NTNDArrayBuilder::createPVStructure()
|
||||
{
|
||||
return getPVDataCreate()->createPVStructure(createStructure());
|
||||
}
|
||||
|
||||
NTNDArrayPtr NTNDArrayBuilder::create()
|
||||
{
|
||||
return NTNDArrayPtr(new NTNDArray(createPVStructure()));
|
||||
}
|
||||
|
||||
NTNDArrayBuilder::NTNDArrayBuilder()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
void NTNDArrayBuilder::reset()
|
||||
{
|
||||
descriptor = false;
|
||||
timeStamp = false;
|
||||
alarm = false;
|
||||
display = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const std::string NTNDArray::URI("uri:ev4:nt/2012/pwd:NTNDArray");
|
||||
const std::string ntAttrStr("uri:ev4:nt/2012/pwd:NTAttribute");
|
||||
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
|
||||
bool NTNDArray::is_a(StructureConstPtr const & structure)
|
||||
{
|
||||
return structure->getID() == URI;
|
||||
}
|
||||
|
||||
NTNDArrayBuilderPtr NTNDArray::createBuilder()
|
||||
{
|
||||
return NTNDArrayBuilderPtr(new detail::NTNDArrayBuilder());
|
||||
}
|
||||
|
||||
|
||||
bool NTNDArray::attachTimeStamp(PVTimeStamp &pvTimeStamp) const
|
||||
{
|
||||
PVStructurePtr ts = getTimeStamp();
|
||||
|
||||
@@ -17,6 +17,82 @@ namespace epics { namespace nt {
|
||||
class NTNDArray;
|
||||
typedef std::tr1::shared_ptr<NTNDArray> NTNDArrayPtr;
|
||||
|
||||
namespace detail {
|
||||
|
||||
/**
|
||||
* Interface for in-line creating of NTNDArray.
|
||||
* One instance can be used to create multiple instances.
|
||||
* An instance of this object must not be used concurrently (an object has a state).
|
||||
* @author mse
|
||||
*/
|
||||
class epicsShareClass NTNDArrayBuilder :
|
||||
public std::tr1::enable_shared_from_this<NTNDArrayBuilder>
|
||||
{
|
||||
public:
|
||||
POINTER_DEFINITIONS(NTNDArrayBuilder);
|
||||
|
||||
/**
|
||||
* Add descriptor field to the NTNDArray.
|
||||
* @return this instance of a {@code NTNDArrayBuilder}.
|
||||
*/
|
||||
shared_pointer addDescriptor();
|
||||
|
||||
/**
|
||||
* Add alarm structure to the NTNDArray.
|
||||
* @return this instance of a {@code NTNDArrayBuilder}.
|
||||
*/
|
||||
shared_pointer addAlarm();
|
||||
|
||||
/**
|
||||
* Add timeStamp structure to the NTNDArray.
|
||||
* @return this instance of a {@code NTNDArrayBuilder}.
|
||||
*/
|
||||
shared_pointer addTimeStamp();
|
||||
|
||||
/**
|
||||
* Add display structure to the NTNDArray.
|
||||
* @return this instance of a {@code NTNDArrayBuilder}.
|
||||
*/
|
||||
shared_pointer addDisplay();
|
||||
|
||||
/**
|
||||
* Create a {@code Structure} that represents NTNDArray.
|
||||
* This resets this instance state and allows new instance to be created.
|
||||
* @return a new instance of a {@code Structure}.
|
||||
*/
|
||||
epics::pvData::StructureConstPtr createStructure();
|
||||
|
||||
/**
|
||||
* Create a {@code PVStructure} that represents NTNDArray.
|
||||
* This resets this instance state and allows new {@code instance to be created.
|
||||
* @return a new instance of a {@code PVStructure}
|
||||
*/
|
||||
epics::pvData::PVStructurePtr createPVStructure();
|
||||
|
||||
/**
|
||||
* Create a {@code NTNDArray} instance.
|
||||
* This resets this instance state and allows new {@code instance to be created.
|
||||
* @return a new instance of a {@code NTNDArray}
|
||||
*/
|
||||
NTNDArrayPtr create();
|
||||
|
||||
private:
|
||||
NTNDArrayBuilder();
|
||||
|
||||
void reset();
|
||||
|
||||
bool descriptor;
|
||||
bool timeStamp;
|
||||
bool alarm;
|
||||
bool display;
|
||||
|
||||
friend class ::epics::nt::NTNDArray;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
typedef std::tr1::shared_ptr<detail::NTNDArrayBuilder> NTNDArrayBuilderPtr;
|
||||
|
||||
/**
|
||||
* Convenience Class for NTNDArray
|
||||
* @author dgh
|
||||
@@ -35,22 +111,11 @@ public:
|
||||
*/
|
||||
static bool is_a(epics::pvData::StructureConstPtr const & structure);
|
||||
|
||||
|
||||
static NTNDArrayPtr create(
|
||||
epics::pvData::PVStructurePtr const &pvStructure);
|
||||
|
||||
static NTNDArrayPtr create(bool hasDescriptor,
|
||||
bool hasTimeStamp, bool hasAlarm, bool hasDisplay);
|
||||
|
||||
static NTNDArrayPtr create();
|
||||
|
||||
static NTNDArrayPtr clone(epics::pvData::PVStructurePtr const &);
|
||||
|
||||
/**
|
||||
* Create a {@code Structure} that represents NTNDArray.
|
||||
* Create a NTNDArrayBuilder instance
|
||||
* @return builder instance.
|
||||
*/
|
||||
static epics::pvData::StructureConstPtr createStructure(bool hasDescriptor,
|
||||
bool hasTimeStamp, bool hasAlarm, bool hasDisplay);
|
||||
static NTNDArrayBuilderPtr createBuilder();
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
@@ -153,11 +218,10 @@ public:
|
||||
*/
|
||||
epics::pvData::PVStructurePtr getAlarm() const;
|
||||
|
||||
|
||||
|
||||
private:
|
||||
NTNDArray(epics::pvData::PVStructurePtr const & pvStructure);
|
||||
epics::pvData::PVStructurePtr pvNTNDArray;
|
||||
friend class detail::NTNDArrayBuilder;
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user