17 #define epicsExportSharedSymbols 27 namespace epics {
namespace pvData {
30 static std::vector<string> split(
string commaSeparatedList) {
31 string::size_type numValues = 1;
32 string::size_type index=0;
34 string::size_type pos = commaSeparatedList.find(
',',index);
35 if(pos==string::npos)
break;
39 std::vector<string> valueList(numValues,
"");
41 for(
size_t i=0;
i<numValues;
i++) {
42 size_t pos = commaSeparatedList.find(
',',index);
43 string value = commaSeparatedList.substr(index,pos);
53 std::ostringstream strm;
54 pvField->dumpValue(strm);
56 strm.str().swap(*buf);
65 if (fieldsData.size() != 0) {
66 size_t length = pvStructure->getStructure()->getNumberFields();
67 for(
size_t i=0;
i<length;
i++) {
70 Type type = fieldField->getField()->getType();
73 size_t count =
fromString(pv, from, fromStartIndex);
75 fromStartIndex += count;
79 size_t count =
fromString(pv, from[fromStartIndex]);
81 fromStartIndex += count;
90 std::ostringstream oss;
91 oss <<
"Convert::fromString unsupported fieldType " <<
type;
92 throw std::logic_error(oss.str());
102 if(from[0]==
'[' && from[from.length()]==
']') {
103 size_t offset = from.rfind(
']');
104 from = from.substr(1, offset);
106 std::vector<string> valueList(split(from));
107 size_t length = valueList.size();
109 if(num<length) length = num;
110 pv->setLength(length);
115 size_t offset,
size_t length,
119 size_t alen = pv->getLength();
121 if(offset==0 && length>=alen) {
123 assert(from.size()>=fromOffset+length);
127 from.begin()+fromOffset+length,
131 pv->putFrom<
string>(temp);
136 throw std::runtime_error(
"fromStringArray: partial update not implemented");
141 size_t offset,
size_t length,
145 pv->getAs<
string>(data);
146 data.
slice(offset, length);
147 if(toOffset+data.
size() > to.size())
148 to.resize(toOffset+data.
size());
159 if(convert.get()==0) {
Conversion and Copy facility for pvData.
#define assert(exp)
Declare that a condition should be true.
static ConvertPtr getConvert()
A holder for a contiguous piece of memory.
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
pvd::StructureConstPtr type
void getString(std::string *buf, PVFieldPtr const &pvField)
TODO only here because of the Lockable.
A lock for multithreading.
void copy(PVValueArray< T > &pvFrom, size_t fromOffset, size_t fromStride, PVValueArray< T > &pvTo, size_t toOffset, size_t toStride, size_t count)
Copy a subarray from one scalar array to another.
APIs for the epicsMutex mutual exclusion semaphore.
std::size_t toStringArray(PVScalarArrayPtr const &pv, std::size_t offset, std::size_t length, StringArray &to, std::size_t toOffset)
std::tr1::shared_ptr< PVScalar > PVScalarPtr
std::vector< PVFieldPtr > PVFieldPtrArray
size_t size() const
Number of elements visible through this vector.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::vector< std::string > StringArray
std::tr1::shared_ptr< PVField > PVFieldPtr
std::size_t fromStringArray(PVScalarArrayPtr const &pv, std::size_t offset, std::size_t length, StringArray const &from, std::size_t fromOffset)
std::tr1::shared_ptr< Convert > ConvertPtr
void slice(size_t offset, size_t length=(size_t)-1)
Reduce the view of this shared_vector.
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
std::size_t fromString(PVStructurePtr const &pv, StringArray const &from, std::size_t fromStartIndex=0)