Use PrinterPlain in Convert
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <pv/pvIntrospect.h>
|
||||
#include <pv/pvData.h>
|
||||
#include <pv/convert.h>
|
||||
#include <pv/printer.h>
|
||||
|
||||
using std::tr1::static_pointer_cast;
|
||||
using std::size_t;
|
||||
@@ -375,14 +376,6 @@ static size_t convertFromStringArray(PVScalarArray *pv, size_t offset,
|
||||
static size_t convertToStringArray(PVScalarArray *pv, size_t offset,
|
||||
size_t len,StringArray & to, size_t toOffset);
|
||||
|
||||
static void convertToString(StringBuilder buffer,
|
||||
PVField const *pv,int indentLevel);
|
||||
static void convertStructure(StringBuilder buffer,
|
||||
PVStructure const *data,int indentLevel);
|
||||
static void convertArray(StringBuilder buffer,
|
||||
PVScalarArray const* pv,int indentLevel);
|
||||
static void convertStructureArray(StringBuilder buffer,
|
||||
PVStructureArray const * pvdata,int indentLevel);
|
||||
static size_t copyArrayDataReference(PVScalarArray *from,PVArray *to);
|
||||
static size_t copyNumericArray(PVScalarArray *from,
|
||||
size_t offset, PVScalarArray *to, size_t toOffset, size_t len);
|
||||
@@ -420,25 +413,16 @@ Convert::Convert()
|
||||
|
||||
Convert::~Convert(){}
|
||||
|
||||
void Convert::getString(StringBuilder buf,PVFieldPtr const & pvField,int indentLevel)
|
||||
{
|
||||
convertToString(buf,pvField.get(),indentLevel);
|
||||
}
|
||||
|
||||
void Convert::getString(StringBuilder buf,PVFieldPtr const & pvField)
|
||||
{
|
||||
convertToString(buf,pvField.get(),0);
|
||||
}
|
||||
|
||||
void Convert::getString(StringBuilder buf,PVField const *pvField,int indentLevel)
|
||||
{
|
||||
convertToString(buf,pvField,indentLevel);
|
||||
// TODO indextLevel ignored
|
||||
std::ostringstream strm;
|
||||
PrinterPlain p;
|
||||
p.setStream(strm);
|
||||
p.print(*pvField);
|
||||
strm.str().swap(*buf);
|
||||
}
|
||||
|
||||
void Convert::getString(StringBuilder buf,PVField const *pvField)
|
||||
{
|
||||
convertToString(buf,pvField,0);
|
||||
}
|
||||
|
||||
size_t Convert::fromString(PVStructurePtr const &pvStructure, StringArray const & from, size_t fromStartIndex)
|
||||
{
|
||||
@@ -2227,408 +2211,6 @@ size_t convertToStringArray(PVScalarArray *pv,
|
||||
return ncopy;
|
||||
}
|
||||
|
||||
|
||||
void convertToString(StringBuilder buffer,PVField const * pv,int indentLevel)
|
||||
{
|
||||
Type type = pv->getField()->getType();
|
||||
if(type==scalarArray) {
|
||||
convertArray(buffer,static_cast<PVScalarArray const *>(pv),indentLevel);
|
||||
return;
|
||||
}
|
||||
if(type==structure) {
|
||||
convertStructure(buffer,static_cast<PVStructure const *>(pv),indentLevel);
|
||||
return;
|
||||
}
|
||||
if(type==structureArray) {
|
||||
convertStructureArray(
|
||||
buffer,static_cast<PVStructureArray const *>(pv),indentLevel);
|
||||
return;
|
||||
}
|
||||
PVScalar const *pvScalar = static_cast<PVScalar const *>(pv);
|
||||
const ScalarConstPtr & pscalar = pvScalar->getScalar();
|
||||
ScalarType scalarType = pscalar->getScalarType();
|
||||
*buffer += pscalar->getID();
|
||||
*buffer += " ";
|
||||
*buffer += pv->getFieldName();
|
||||
*buffer += " ";
|
||||
switch(scalarType) {
|
||||
case pvBoolean: {
|
||||
PVBoolean const *data = static_cast<PVBoolean const *>(pv);
|
||||
bool value = data->get();
|
||||
if(value) {
|
||||
*buffer += "true";
|
||||
} else {
|
||||
*buffer += "false";
|
||||
}
|
||||
}
|
||||
return;
|
||||
case pvByte: {
|
||||
PVByte const *data = static_cast<PVByte const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%d",(int)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvShort: {
|
||||
PVShort const *data = static_cast<PVShort const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%d",(int)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvInt: {
|
||||
PVInt const *data = static_cast<PVInt const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%d",(int)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvLong: {
|
||||
PVLong const *data = static_cast<PVLong const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%lld",(long long)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvUByte: {
|
||||
PVUByte const *data = static_cast<PVUByte const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%u",(unsigned int)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvUShort: {
|
||||
PVUShort const *data = static_cast<PVUShort const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%u",(unsigned int)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvUInt: {
|
||||
PVUInt const *data = static_cast<PVUInt const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%u",(unsigned int)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvULong: {
|
||||
PVULong const *data = static_cast<PVULong const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%llu",(unsigned long long)data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvFloat: {
|
||||
PVFloat const *data = static_cast<PVFloat const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%g",data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvDouble: {
|
||||
PVDouble const *data = static_cast<PVDouble const *>(pv);
|
||||
char xxx[30];
|
||||
sprintf(xxx,"%g",data->get());
|
||||
*buffer += xxx;
|
||||
}
|
||||
return;
|
||||
case pvString: {
|
||||
PVString const *data = static_cast<PVString const *>(pv);
|
||||
*buffer += data->get();
|
||||
}
|
||||
return;
|
||||
default:
|
||||
*buffer += "unknown ScalarType";
|
||||
}
|
||||
}
|
||||
|
||||
void convertStructure(StringBuilder buffer,PVStructure const *data,int indentLevel)
|
||||
{
|
||||
*buffer += data->getStructure()->getID() + " " + data->getFieldName();
|
||||
String extendsName = data->getExtendsStructureName();
|
||||
if(extendsName.length()>0) {
|
||||
*buffer += " extends " + extendsName;
|
||||
}
|
||||
PVFieldPtrArray const & fieldsData = data->getPVFields();
|
||||
if (fieldsData.size() != 0) {
|
||||
int length = data->getStructure()->getNumberFields();
|
||||
for(int i=0; i<length; i++) {
|
||||
newLineImpl(buffer, indentLevel+1);
|
||||
PVFieldPtr fieldField = fieldsData[i];
|
||||
fieldField->toString(buffer,indentLevel + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void convertArray(StringBuilder buffer,PVScalarArray const * xxx,int /*indentLevel*/)
|
||||
{
|
||||
PVScalarArray *pv = const_cast<PVScalarArray *>(xxx);
|
||||
ScalarArrayConstPtr array = pv->getScalarArray();
|
||||
ScalarType type = array->getElementType();
|
||||
*buffer += array->getID() + " " + pv->getFieldName() + " ";
|
||||
switch(type) {
|
||||
case pvBoolean: {
|
||||
PVBooleanArray *pvdata = static_cast<PVBooleanArray *>(pv);
|
||||
BooleanArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ",";
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
BooleanArray & value = data.data;
|
||||
if(value[data.offset]) {
|
||||
*buffer += "true";
|
||||
} else {
|
||||
*buffer += "false";
|
||||
}
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvByte: {
|
||||
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
||||
ByteArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ",";
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
int val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%d",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvShort: {
|
||||
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
||||
ShortArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
int val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%d",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvInt: {
|
||||
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
||||
IntArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
int val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%d",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvLong: {
|
||||
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
||||
LongArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
int64 val = data.data[data.offset];
|
||||
char buf[32];
|
||||
sprintf(buf,"%lld",(long long)val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvUByte: {
|
||||
PVUByteArray *pvdata = static_cast<PVUByteArray*>(pv);
|
||||
UByteArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ",";
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
unsigned int val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%u",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvUShort: {
|
||||
PVUShortArray *pvdata = static_cast<PVUShortArray*>(pv);
|
||||
UShortArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
unsigned int val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%u",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvUInt: {
|
||||
PVUIntArray *pvdata = static_cast<PVUIntArray*>(pv);
|
||||
UIntArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
unsigned int val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%u",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvULong: {
|
||||
PVULongArray *pvdata = static_cast<PVULongArray*>(pv);
|
||||
ULongArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
uint64 val = data.data[data.offset];
|
||||
char buf[32];
|
||||
sprintf(buf,"%llu",(unsigned long long)val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvFloat: {
|
||||
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
||||
FloatArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
float val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%g",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
case pvDouble: {
|
||||
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
||||
DoubleArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ',';
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
if(num==1) {
|
||||
double val = data.data[data.offset];
|
||||
char buf[16];
|
||||
sprintf(buf,"%g",val);
|
||||
*buffer += buf;
|
||||
} else {
|
||||
*buffer += "???? ";
|
||||
}
|
||||
}
|
||||
*buffer += ("]");
|
||||
break;
|
||||
}
|
||||
case pvString: {
|
||||
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
||||
StringArrayData data;
|
||||
*buffer += "[";
|
||||
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||
if(i!=0) *buffer += ",";
|
||||
size_t num = pvdata->get(i,1,data);
|
||||
StringArray & value = data.data;
|
||||
if(num==1) {
|
||||
if(value[data.offset].length()>0) {
|
||||
*buffer += value[data.offset].c_str();
|
||||
} else {
|
||||
*buffer += "null";
|
||||
}
|
||||
} else {
|
||||
*buffer += "null";
|
||||
}
|
||||
}
|
||||
*buffer += "]";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
*buffer += " array element is unknown ScalarType";
|
||||
}
|
||||
if(pv->isImmutable()) {
|
||||
*buffer += " immutable ";
|
||||
}
|
||||
}
|
||||
|
||||
void convertStructureArray(StringBuilder buffer,
|
||||
PVStructureArray const * xxx,int indentLevel)
|
||||
{
|
||||
PVStructureArray *pvdata = const_cast<PVStructureArray *>(xxx);
|
||||
*buffer += pvdata->getStructureArray()->getID() + " " + pvdata->getFieldName() + " ";
|
||||
size_t length = pvdata->getLength();
|
||||
if(length<=0) {
|
||||
return;
|
||||
}
|
||||
StructureArrayData data = StructureArrayData();
|
||||
pvdata->get(0, length, data);
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
newLineImpl(buffer, indentLevel + 1);
|
||||
PVStructurePtr & pvStructure = data.data[i];
|
||||
if (pvStructure.get() == 0) {
|
||||
*buffer += "null";
|
||||
} else {
|
||||
pvStructure->toString(buffer,indentLevel+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t copyArrayDataReference(PVScalarArray *from,PVArray *to)
|
||||
{
|
||||
ScalarType scalarType = from->getScalarArray()->getElementType();
|
||||
|
||||
@@ -113,14 +113,16 @@ public:
|
||||
* If a PVField is a structure or array be prepared for a very long string.
|
||||
* @param indentLevel indentation level
|
||||
*/
|
||||
void getString(StringBuilder buf,PVFieldPtr const & pvField,int indentLevel);
|
||||
void getString(StringBuilder buf,PVFieldPtr const & pvField,int indentLevel)
|
||||
{getString(buf, pvField.get(), indentLevel);}
|
||||
/**
|
||||
* Convert a PVField to a string.
|
||||
* param buf buffer for the result
|
||||
* @param pv The PVField to convert to a string.
|
||||
* If the PVField is a structure or array be prepared for a very long string.
|
||||
*/
|
||||
void getString(StringBuilder buf,PVFieldPtr const & pvField);
|
||||
inline void getString(StringBuilder buf,PVFieldPtr const & pvField)
|
||||
{getString(buf, pvField.get(), 0);}
|
||||
/**
|
||||
* Convert a PVField to a string.
|
||||
* @param buf buffer for the result
|
||||
@@ -135,7 +137,8 @@ public:
|
||||
* @param pv The PVField to convert to a string.
|
||||
* If the PVField is a structure or array be prepared for a very long string.
|
||||
*/
|
||||
void getString(StringBuilder buf,PVField const * pvField);
|
||||
void getString(StringBuilder buf,PVField const * pvField)
|
||||
{getString(buf, pvField, 0);}
|
||||
/**
|
||||
* Convert from an array of String to a PVScalar
|
||||
* @param pv The PV.
|
||||
|
||||
Reference in New Issue
Block a user