18 #define epicsExportSharedSymbols 27 namespace epics {
namespace pvaClient {
29 static string notCompatibleScalar(
"value is not a compatible scalar");
30 static string notDoubleArray(
"value is not a doubleArray");
31 static string notStringArray(
"value is not a stringArray");
39 : putData(putData),fieldNumber(fieldNumber){}
40 void postPut() { putData->postPut(fieldNumber);}
46 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::create\n";
54 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::PvaClientPutData\n";
57 setData(pvStructure,bitSet);
58 size_t nfields = pvStructure->getNumberFields();
59 postHandler.resize(nfields);
61 for(
size_t i =0;
i<nfields; ++
i)
65 pvField = pvStructure;
67 pvField = pvStructure->getSubField(
i);
69 pvField->setPostHandler(postHandler[
i]);
74 void PvaClientPutData::putDouble(
double value)
76 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::putDouble\n";
78 Type type = pvField->getField()->getType();
80 throw std::logic_error(
"PvaClientData::putDouble() did not find a scalar field");
90 throw std::logic_error(
91 "PvaClientData::putDouble() did not find a numeric scalar field");
93 convert->fromDouble(pvScalar,value);
96 void PvaClientPutData::putString(std::string
const &
value)
98 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::putString\n";
100 Type type = pvField->getField()->getType();
102 throw std::logic_error(
"PvaClientData::putString() did not find a scalar field");
105 convert->fromString(pvScalar,value);
110 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::putDoubleArray\n";
112 Type type = pvField->getField()->getType();
114 throw std::logic_error(
"PvaClientData::putDoubleArray() did not find a scalarArray field");
119 throw std::logic_error(
120 "PvaClientData::putDoubleArray() did not find a numeric scalarArray field");
122 pvScalarArray->putFrom<
const double>(value);
127 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::putStringArray\n";
129 Type type = pvField->getField()->getType();
131 throw std::logic_error(
"PvaClientData::putStringArray() did not find a scalarArray field");
134 pvScalarArray->
putFrom<
const string>(value);
138 void PvaClientPutData::putStringArray(std::vector<string>
const &
value)
140 size_t length = value.size();
142 for(
size_t i=0;
i < length; ++
i) val[
i] = value[
i];
143 putStringArray(freeze(val));
147 void PvaClientPutData::postPut(
size_t fieldNumber)
149 if(PvaClient::getDebug()) cout <<
"PvaClientPutData::postPut\n";
150 getChangedBitSet()->set(fieldNumber);
PVScalar is the base class for each scalar field.
A holder for a contiguous piece of memory.
A class that holds data given to by PvaClientPut or PvaClientPutGet.
This class is implemented by code that calls setPostHander.
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
pvd::StructureConstPtr type
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
const ScalarConstPtr getScalar() const
std::tr1::shared_ptr< PostHandler > PostHandlerPtr
PvaClientPostHandlerPvt(PvaClientPutData *putData, size_t fieldNumber)
A base class for PvaClientGetData, PvaClientPutData, and PvaClientMonitorData.
bool isNumeric(ScalarType type)
Base class for a scalarArray.
std::tr1::shared_ptr< PVScalar > PVScalarPtr
const ScalarArrayConstPtr getScalarArray() const
void put(typename storage_t::arg_type v)
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Class that holds the data for each possible scalar type.
std::tr1::shared_ptr< PVField > PVFieldPtr
void putFrom(const shared_vector< const T > &inp)
std::tr1::shared_ptr< Convert > ConvertPtr
std::tr1::shared_ptr< BitSet > BitSetPtr
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
std::tr1::shared_ptr< PvaClientPutData > PvaClientPutDataPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
std::tr1::shared_ptr< PVDouble > PVDoublePtr