refactor introspection interfaces. replace epicsTypes by pvData types.

This commit is contained in:
Marty Kraimer
2010-11-02 07:53:03 -04:00
parent 304a9c60d0
commit f259c4451d
35 changed files with 620 additions and 433 deletions

View File

@@ -42,12 +42,39 @@ PVFieldPvt::~PVFieldPvt()
}
static volatile int64 totalConstruct = 0;
static volatile int64 totalDestruct = 0;
static Mutex *globalMutex = 0;
void PVField::init()
{
globalMutex = new Mutex();
}
int64 PVField::getTotalConstruct()
{
Lock xx(globalMutex);
return totalConstruct;
}
int64 PVField::getTotalDestruct()
{
Lock xx(globalMutex);
return totalDestruct;
}
PVField::PVField(PVStructure *parent,FieldConstPtr field)
: pImpl(new PVFieldPvt(parent,field))
{}
{
Lock xx(globalMutex);
totalConstruct++;
}
PVField::~PVField()
{
Lock xx(globalMutex);
totalDestruct++;
delete pImpl;
}

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"

View File

@@ -18,8 +18,8 @@ namespace epics { namespace pvData {
public:
BasePVByte(PVStructure *parent,ScalarConstPtr scalar);
virtual ~BasePVByte();
virtual epicsInt8 get();
virtual void put(epicsInt8 val);
virtual int8 get();
virtual void put(int8 val);
virtual void serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,
@@ -29,7 +29,7 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt8 value;
int8 value;
};
BasePVByte::BasePVByte(PVStructure *parent,ScalarConstPtr scalar)
@@ -38,9 +38,9 @@ namespace epics { namespace pvData {
BasePVByte::~BasePVByte() {}
epicsInt8 BasePVByte::get() { return value;}
int8 BasePVByte::get() { return value;}
void BasePVByte::put(epicsInt8 val){value = val;}
void BasePVByte::put(int8 val){value = val;}
void BasePVByte::serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher)

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"
@@ -36,12 +35,12 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt8 *value;
int8 *value;
};
BasePVByteArray::BasePVByteArray(PVStructure *parent,
ScalarArrayConstPtr scalarArray)
: PVByteArray(parent,scalarArray),value(new epicsInt8[0])
: PVByteArray(parent,scalarArray),value(new int8[0])
{ }
BasePVByteArray::~BasePVByteArray()
@@ -59,7 +58,7 @@ namespace epics { namespace pvData {
}
int length = PVArray::getLength();
if(length>capacity) length = capacity;
epicsInt8 *newValue = new epicsInt8[capacity];
int8 *newValue = new int8[capacity];
for(int i=0; i<length; i++) newValue[i] = value[i];
delete[]value;
value = newValue;

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"

View File

@@ -18,8 +18,8 @@ namespace epics { namespace pvData {
public:
BasePVInt(PVStructure *parent,ScalarConstPtr scalar);
virtual ~BasePVInt();
virtual epicsInt32 get();
virtual void put(epicsInt32 val);
virtual int32 get();
virtual void put(int32 val);
virtual void serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,
@@ -29,7 +29,7 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt32 value;
int32 value;
};
BasePVInt::BasePVInt(PVStructure *parent,ScalarConstPtr scalar)
@@ -38,9 +38,9 @@ namespace epics { namespace pvData {
BasePVInt::~BasePVInt() {}
epicsInt32 BasePVInt::get() { return value;}
int32 BasePVInt::get() { return value;}
void BasePVInt::put(epicsInt32 val){value = val;}
void BasePVInt::put(int32 val){value = val;}
void BasePVInt::serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher)

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"
@@ -25,7 +24,7 @@ namespace epics { namespace pvData {
virtual int get(int offset, int length, IntArrayData *data) ;
virtual int put(int offset,int length,IntArray from,
int fromOffset);
virtual void shareData(epicsInt32 value[],int capacity,int length);
virtual void shareData(int32 value[],int capacity,int length);
// from Serializable
virtual void serialize(ByteBuffer *pbuffer,SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,DeserializableControl *pflusher);
@@ -36,12 +35,12 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt32 *value;
int32 *value;
};
BasePVIntArray::BasePVIntArray(PVStructure *parent,
ScalarArrayConstPtr scalarArray)
: PVIntArray(parent,scalarArray),value(new epicsInt32[0])
: PVIntArray(parent,scalarArray),value(new int32[0])
{ }
BasePVIntArray::~BasePVIntArray()
@@ -59,7 +58,7 @@ namespace epics { namespace pvData {
}
int length = PVArray::getLength();
if(length>capacity) length = capacity;
epicsInt32 *newValue = new epicsInt32[capacity];
int32 *newValue = new int32[capacity];
for(int i=0; i<length; i++) newValue[i] = value[i];
delete[]value;
value = newValue;
@@ -109,7 +108,7 @@ namespace epics { namespace pvData {
}
void BasePVIntArray::shareData(
epicsInt32 shareValue[],int capacity,int length)
int32 shareValue[],int capacity,int length)
{
delete[] value;
value = shareValue;

View File

@@ -18,8 +18,8 @@ namespace epics { namespace pvData {
public:
BasePVLong(PVStructure *parent,ScalarConstPtr scalar);
virtual ~BasePVLong();
virtual epicsInt64 get();
virtual void put(epicsInt64 val);
virtual int64 get();
virtual void put(int64 val);
virtual void serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,
@@ -29,7 +29,7 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt64 value;
int64 value;
};
BasePVLong::BasePVLong(PVStructure *parent,ScalarConstPtr scalar)
@@ -38,9 +38,9 @@ namespace epics { namespace pvData {
BasePVLong::~BasePVLong() {}
epicsInt64 BasePVLong::get() { return value;}
int64 BasePVLong::get() { return value;}
void BasePVLong::put(epicsInt64 val){value = val;}
void BasePVLong::put(int64 val){value = val;}
void BasePVLong::serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher)

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"
@@ -25,7 +24,7 @@ namespace epics { namespace pvData {
virtual int get(int offset, int length, LongArrayData *data) ;
virtual int put(int offset,int length,LongArray from,
int fromOffset);
virtual void shareData(epicsInt64 value[],int capacity,int length);
virtual void shareData(int64 value[],int capacity,int length);
// from Serializable
virtual void serialize(ByteBuffer *pbuffer,SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,DeserializableControl *pflusher);
@@ -36,12 +35,12 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt64 *value;
int64 *value;
};
BasePVLongArray::BasePVLongArray(PVStructure *parent,
ScalarArrayConstPtr scalarArray)
: PVLongArray(parent,scalarArray),value(new epicsInt64[0])
: PVLongArray(parent,scalarArray),value(new int64[0])
{ }
BasePVLongArray::~BasePVLongArray()
@@ -59,7 +58,7 @@ namespace epics { namespace pvData {
}
int length = PVArray::getLength();
if(length>capacity) length = capacity;
epicsInt64 *newValue = new epicsInt64[capacity];
int64 *newValue = new int64[capacity];
for(int i=0; i<length; i++) newValue[i] = value[i];
delete[]value;
value = newValue;
@@ -109,7 +108,7 @@ namespace epics { namespace pvData {
}
void BasePVLongArray::shareData(
epicsInt64 shareValue[],int capacity,int length)
int64 shareValue[],int capacity,int length)
{
delete[] value;
value = shareValue;

View File

@@ -18,8 +18,8 @@ namespace epics { namespace pvData {
public:
BasePVShort(PVStructure *parent,ScalarConstPtr scalar);
virtual ~BasePVShort();
virtual epicsInt16 get();
virtual void put(epicsInt16 val);
virtual int16 get();
virtual void put(int16 val);
virtual void serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,
@@ -29,7 +29,7 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt16 value;
int16 value;
};
BasePVShort::BasePVShort(PVStructure *parent,ScalarConstPtr scalar)
@@ -38,9 +38,9 @@ namespace epics { namespace pvData {
BasePVShort::~BasePVShort() {}
epicsInt16 BasePVShort::get() { return value;}
int16 BasePVShort::get() { return value;}
void BasePVShort::put(epicsInt16 val){value = val;}
void BasePVShort::put(int16 val){value = val;}
void BasePVShort::serialize(ByteBuffer *pbuffer,
SerializableControl *pflusher)

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"
@@ -25,7 +24,7 @@ namespace epics { namespace pvData {
virtual int get(int offset, int length, ShortArrayData *data) ;
virtual int put(int offset,int length,ShortArray from,
int fromOffset);
virtual void shareData(epicsInt16 value[],int capacity,int length);
virtual void shareData(int16 value[],int capacity,int length);
// from Serializable
virtual void serialize(ByteBuffer *pbuffer,SerializableControl *pflusher) ;
virtual void deserialize(ByteBuffer *pbuffer,DeserializableControl *pflusher);
@@ -36,12 +35,12 @@ namespace epics { namespace pvData {
virtual bool operator==(PVField *pv) ;
virtual bool operator!=(PVField *pv) ;
private:
epicsInt16 *value;
int16 *value;
};
BasePVShortArray::BasePVShortArray(PVStructure *parent,
ScalarArrayConstPtr scalarArray)
: PVShortArray(parent,scalarArray),value(new epicsInt16[0])
: PVShortArray(parent,scalarArray),value(new int16[0])
{ }
BasePVShortArray::~BasePVShortArray()
@@ -59,7 +58,7 @@ namespace epics { namespace pvData {
}
int length = PVArray::getLength();
if(length>capacity) length = capacity;
epicsInt16 *newValue = new epicsInt16[capacity];
int16 *newValue = new int16[capacity];
for(int i=0; i<length; i++) newValue[i] = value[i];
delete[]value;
value = newValue;
@@ -109,7 +108,7 @@ namespace epics { namespace pvData {
}
void BasePVShortArray::shareData(
epicsInt16 shareValue[],int capacity,int length)
int16 shareValue[],int capacity,int length)
{
delete[] value;
value = shareValue;

View File

@@ -5,7 +5,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvData.h"
#include "factory.h"
#include "AbstractPVScalarArray.h"

View File

@@ -3,7 +3,6 @@
#include <string>
#include <vector>
#include <stdexcept>
#include <epicsTypes.h>
#include "lock.h"
#include "pvIntrospect.h"
#include "pvData.h"
@@ -21,21 +20,21 @@ static String illegalScalarType("Illegal ScalarType");
static bool convertEquals(PVField *a,PVField *b);
static int convertFromByteArray(PVScalarArray *pv, int offset,
int len,epicsInt8 from[], int fromOffset);
int len,int8 from[], int fromOffset);
static int convertToByteArray(PVScalarArray *pv, int offset,
int len,epicsInt8 to[], int toOffset);
int len,int8 to[], int toOffset);
static int convertFromShortArray(PVScalarArray *pv, int offset,
int len,epicsInt16 from[], int fromOffset);
int len,int16 from[], int fromOffset);
static int convertToShortArray(PVScalarArray *pv, int offset,
int len,epicsInt16 to[], int toOffset);
int len,int16 to[], int toOffset);
static int convertFromIntArray(PVScalarArray *pv, int offset,
int len,epicsInt32 from[], int fromOffset);
int len,int32 from[], int fromOffset);
static int convertToIntArray(PVScalarArray *pv, int offset,
int len,epicsInt32 to[], int toOffset);
int len,int32 to[], int toOffset);
static int convertFromLongArray(PVScalarArray *pv, int offset,
int len,epicsInt64 from[], int fromOffset);
int len,int64 from[], int fromOffset);
static int convertToLongArray(PVScalarArray * pv, int offset,
int len,epicsInt64 to[], int toOffset);
int len,int64 to[], int toOffset);
static int convertFromFloatArray(PVScalarArray *pv, int offset,
int len,float from[], int fromOffset);
static int convertToFloatArray(PVScalarArray * pv, int offset,
@@ -133,7 +132,7 @@ void Convert::fromString(PVScalar *pvScalar, String from)
PVByte *pv = (PVByte*)pvScalar;
int ival;
sscanf(from.c_str(),"%d",&ival);
epicsInt8 value = ival;
int8 value = ival;
pv->put(value);
break;
}
@@ -141,7 +140,7 @@ void Convert::fromString(PVScalar *pvScalar, String from)
PVShort *pv = (PVShort*)pvScalar;
int ival;
sscanf(from.c_str(),"%d",&ival);
epicsInt16 value = ival;
int16 value = ival;
pv->put(value);
break;
}
@@ -149,15 +148,15 @@ void Convert::fromString(PVScalar *pvScalar, String from)
PVInt *pv = (PVInt*)pvScalar;
int ival;
sscanf(from.c_str(),"%d",&ival);
epicsInt32 value = ival;
int32 value = ival;
pv->put(value);
break;
}
case pvLong : {
PVLong *pv = (PVLong*)pvScalar;
epicsInt64 ival;
int64 ival;
sscanf(from.c_str(),"%lld",&ival);
epicsInt64 value = ival;
int64 value = ival;
pv->put(value);
break;
}
@@ -305,7 +304,7 @@ void Convert::copyScalar(PVScalar *from, PVScalar *to)
}
case pvByte : {
PVByte *data = (PVByte*)from;
epicsInt8 value = data->get();
int8 value = data->get();
convert->fromByte(to,value);
break;
}
@@ -602,7 +601,7 @@ void Convert::copyStructureArray(
to->postPut();
}
epicsInt8 Convert::toByte(PVScalar * pv)
int8 Convert::toByte(PVScalar * pv)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -639,7 +638,7 @@ epicsInt8 Convert::toByte(PVScalar * pv)
throw std::logic_error(logicError);
}
epicsInt16 Convert::toShort(PVScalar * pv)
int16 Convert::toShort(PVScalar * pv)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -676,7 +675,7 @@ epicsInt16 Convert::toShort(PVScalar * pv)
throw std::logic_error(logicError);
}
epicsInt32 Convert::toInt(PVScalar * pv)
int32 Convert::toInt(PVScalar * pv)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -713,7 +712,7 @@ epicsInt32 Convert::toInt(PVScalar * pv)
throw std::logic_error(logicError);
}
epicsInt64 Convert::toLong(PVScalar * pv)
int64 Convert::toLong(PVScalar * pv)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -824,7 +823,7 @@ double Convert::toDouble(PVScalar * pv)
throw std::logic_error(logicError);
}
void Convert::fromByte(PVScalar *pv,epicsInt8 from)
void Convert::fromByte(PVScalar *pv,int8 from)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -868,7 +867,7 @@ void Convert::fromByte(PVScalar *pv,epicsInt8 from)
throw std::logic_error(logicError);
}
void Convert::fromShort(PVScalar *pv,epicsInt16 from)
void Convert::fromShort(PVScalar *pv,int16 from)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -912,7 +911,7 @@ void Convert::fromShort(PVScalar *pv,epicsInt16 from)
throw std::logic_error(logicError);
}
void Convert::fromInt(PVScalar *pv, epicsInt32 from)
void Convert::fromInt(PVScalar *pv, int32 from)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -956,7 +955,7 @@ void Convert::fromInt(PVScalar *pv, epicsInt32 from)
throw std::logic_error(logicError);
}
void Convert::fromLong(PVScalar *pv, epicsInt64 from)
void Convert::fromLong(PVScalar *pv, int64 from)
{
ScalarConstPtr scalar = pv->getScalar();
ScalarType scalarType = scalar->getScalarType();
@@ -990,7 +989,7 @@ void Convert::fromLong(PVScalar *pv, epicsInt64 from)
case pvString: {
PVString *value = (PVString *)pv;
char buffer[20];
epicsInt64 ival = from;
int64 ival = from;
sprintf(buffer,"%lld",ival);
String xxx(buffer);
value->put(xxx);
@@ -1089,25 +1088,25 @@ void Convert::fromDouble(PVScalar *pv, double from)
}
int Convert::toByteArray(PVScalarArray * pv, int offset, int length,
epicsInt8 to[], int toOffset)
int8 to[], int toOffset)
{
return convertToByteArray(pv, offset, length, to, toOffset);
}
int Convert::toShortArray(PVScalarArray * pv, int offset, int length,
epicsInt16 to[], int toOffset)
int16 to[], int toOffset)
{
return convertToShortArray(pv, offset, length, to, toOffset);
}
int Convert::toIntArray(PVScalarArray * pv, int offset, int length,
epicsInt32 to[], int toOffset)
int32 to[], int toOffset)
{
return convertToIntArray(pv, offset, length, to, toOffset);
}
int Convert::toLongArray(PVScalarArray * pv, int offset, int length,
epicsInt64 to[], int toOffset)
int64 to[], int toOffset)
{
return convertToLongArray(pv, offset, length, to, toOffset);
}
@@ -1125,25 +1124,25 @@ int Convert::toDoubleArray(PVScalarArray * pv, int offset, int length,
}
int Convert::fromByteArray(PVScalarArray *pv, int offset, int length,
epicsInt8 from[], int fromOffset)
int8 from[], int fromOffset)
{
return convertFromByteArray(pv, offset, length, from, fromOffset);
}
int Convert::fromShortArray(PVScalarArray *pv, int offset, int length,
epicsInt16 from[], int fromOffset)
int16 from[], int fromOffset)
{
return convertFromShortArray(pv, offset, length, from, fromOffset);
}
int Convert::fromIntArray(PVScalarArray *pv, int offset, int length,
epicsInt32 from[], int fromOffset)
int32 from[], int fromOffset)
{
return convertFromIntArray(pv, offset, length, from, fromOffset);
}
int Convert::fromLongArray(PVScalarArray *pv, int offset, int length,
epicsInt64 from[], int fromOffset)
int64 from[], int fromOffset)
{
return convertFromLongArray(pv, offset, length, from, fromOffset);
}
@@ -1182,29 +1181,29 @@ static bool scalarEquals(PVScalar *a,PVScalar *b)
case pvByte: {
PVByte *pa = (PVByte *)a;
PVByte *pb = (PVByte *)b;
epicsInt8 avalue = pa->get();
epicsInt8 bvalue = pb->get();
int8 avalue = pa->get();
int8 bvalue = pb->get();
return ((avalue==bvalue) ? true : false);
}
case pvShort: {
PVShort *pa = (PVShort *)a;
PVShort *pb = (PVShort *)b;
epicsInt16 avalue = pa->get();
epicsInt16 bvalue = pb->get();
int16 avalue = pa->get();
int16 bvalue = pb->get();
return ((avalue==bvalue) ? true : false);
}
case pvInt: {
PVInt *pa = (PVInt *)a;
PVInt *pb = (PVInt *)b;
epicsInt32 avalue = pa->get();
epicsInt32 bvalue = pb->get();
int32 avalue = pa->get();
int32 bvalue = pb->get();
return ((avalue==bvalue) ? true : false);
}
case pvLong: {
PVLong *pa = (PVLong *)a;
PVLong *pb = (PVLong *)b;
epicsInt64 avalue = pa->get();
epicsInt64 bvalue = pb->get();
int64 avalue = pa->get();
int64 bvalue = pb->get();
return ((avalue==bvalue) ? true : false);
}
case pvFloat: {
@@ -1420,7 +1419,7 @@ bool convertEquals(PVField *a,PVField *b)
throw std::logic_error(message);
}
int convertFromByteArray(PVScalarArray *pv, int offset, int len,epicsInt8 from[], int fromOffset)
int convertFromByteArray(PVScalarArray *pv, int offset, int len,int8 from[], int fromOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -1444,9 +1443,9 @@ int convertFromByteArray(PVScalarArray *pv, int offset, int len,epicsInt8 from[]
}
case pvShort: {
PVShortArray *pvdata = (PVShortArray*) pv;
epicsInt16 data[1];
int16 data[1];
while (len > 0) {
data[0] = (epicsInt16) from[fromOffset];
data[0] = (int16) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1458,9 +1457,9 @@ int convertFromByteArray(PVScalarArray *pv, int offset, int len,epicsInt8 from[]
}
case pvInt: {
PVIntArray *pvdata = (PVIntArray*) pv;
epicsInt32 data[1];
int32 data[1];
while (len > 0) {
data[0] = (epicsInt32) from[fromOffset];
data[0] = (int32) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1472,9 +1471,9 @@ int convertFromByteArray(PVScalarArray *pv, int offset, int len,epicsInt8 from[]
}
case pvLong: {
PVLongArray *pvdata = (PVLongArray*) pv;
epicsInt64 data[1];
int64 data[1];
while (len > 0) {
data[0] = (epicsInt64) from[fromOffset];
data[0] = (int64) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1521,7 +1520,7 @@ int convertFromByteArray(PVScalarArray *pv, int offset, int len,epicsInt8 from[]
throw std::logic_error(message);
}
int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], int toOffset)
int convertToByteArray(PVScalarArray * pv, int offset, int len,int8 to[], int toOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -1556,7 +1555,7 @@ int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], i
ShortArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1573,7 +1572,7 @@ int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], i
IntArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1591,7 +1590,7 @@ int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], i
LongArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1608,7 +1607,7 @@ int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], i
FloatArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1626,7 +1625,7 @@ int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], i
DoubleArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1643,7 +1642,7 @@ int convertToByteArray(PVScalarArray * pv, int offset, int len,epicsInt8 to[], i
throw std::logic_error(message);
}
int convertFromShortArray(PVScalarArray *pv, int offset, int len,epicsInt16 from[], int fromOffset)
int convertFromShortArray(PVScalarArray *pv, int offset, int len,int16 from[], int fromOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -1654,9 +1653,9 @@ int convertFromShortArray(PVScalarArray *pv, int offset, int len,epicsInt16 from
}
case pvByte: {
PVByteArray *pvdata = (PVByteArray*) pv;
epicsInt8 data[1];
int8 data[1];
while (len > 0) {
data[0] = (epicsInt8) from[fromOffset];
data[0] = (int8) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1681,9 +1680,9 @@ int convertFromShortArray(PVScalarArray *pv, int offset, int len,epicsInt16 from
}
case pvInt: {
PVIntArray *pvdata = (PVIntArray*) pv;
epicsInt32 data[1];
int32 data[1];
while (len > 0) {
data[0] = (epicsInt32) from[fromOffset];
data[0] = (int32) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1695,9 +1694,9 @@ int convertFromShortArray(PVScalarArray *pv, int offset, int len,epicsInt16 from
}
case pvLong: {
PVLongArray *pvdata = (PVLongArray*) pv;
epicsInt64 data[1];
int64 data[1];
while (len > 0) {
data[0] = (epicsInt64) from[fromOffset];
data[0] = (int64) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1744,7 +1743,7 @@ int convertFromShortArray(PVScalarArray *pv, int offset, int len,epicsInt16 from
throw std::logic_error(message);
}
int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[], int toOffset)
int convertToShortArray(PVScalarArray * pv, int offset, int len,int16 to[], int toOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -1779,7 +1778,7 @@ int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[],
ShortArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1796,7 +1795,7 @@ int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[],
IntArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1814,7 +1813,7 @@ int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[],
LongArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1831,7 +1830,7 @@ int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[],
FloatArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1849,7 +1848,7 @@ int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[],
DoubleArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -1866,7 +1865,7 @@ int convertToShortArray(PVScalarArray * pv, int offset, int len,epicsInt16 to[],
throw std::logic_error(message);
}
int convertFromIntArray(PVScalarArray *pv, int offset, int len,epicsInt32 from[], int fromOffset)
int convertFromIntArray(PVScalarArray *pv, int offset, int len,int32 from[], int fromOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -1877,9 +1876,9 @@ int convertFromIntArray(PVScalarArray *pv, int offset, int len,epicsInt32 from[]
}
case pvByte: {
PVByteArray *pvdata = (PVByteArray*) pv;
epicsInt8 data[1];
int8 data[1];
while (len > 0) {
data[0] = (epicsInt8) from[fromOffset];
data[0] = (int8) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1891,9 +1890,9 @@ int convertFromIntArray(PVScalarArray *pv, int offset, int len,epicsInt32 from[]
}
case pvShort: {
PVShortArray *pvdata = (PVShortArray*) pv;
epicsInt16 data[1];
int16 data[1];
while (len > 0) {
data[0] = (epicsInt16) from[fromOffset];
data[0] = (int16) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1918,9 +1917,9 @@ int convertFromIntArray(PVScalarArray *pv, int offset, int len,epicsInt32 from[]
}
case pvLong: {
PVLongArray *pvdata = (PVLongArray*) pv;
epicsInt64 data[1];
int64 data[1];
while (len > 0) {
data[0] = (epicsInt64) from[fromOffset];
data[0] = (int64) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -1967,7 +1966,7 @@ int convertFromIntArray(PVScalarArray *pv, int offset, int len,epicsInt32 from[]
throw std::logic_error(message);
}
int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], int toOffset)
int convertToIntArray(PVScalarArray * pv, int offset, int len,int32 to[], int toOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -2002,7 +2001,7 @@ int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], i
ShortArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2019,7 +2018,7 @@ int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], i
IntArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2037,7 +2036,7 @@ int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], i
LongArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2054,7 +2053,7 @@ int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], i
FloatArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2072,7 +2071,7 @@ int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], i
DoubleArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2089,7 +2088,7 @@ int convertToIntArray(PVScalarArray * pv, int offset, int len,epicsInt32 to[], i
throw std::logic_error(message);
}
int convertFromLongArray(PVScalarArray *pv, int offset, int len,epicsInt64 from[], int fromOffset)
int convertFromLongArray(PVScalarArray *pv, int offset, int len,int64 from[], int fromOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -2100,9 +2099,9 @@ int convertFromLongArray(PVScalarArray *pv, int offset, int len,epicsInt64 from[
}
case pvByte: {
PVByteArray *pvdata = (PVByteArray*) pv;
epicsInt8 data[1];
int8 data[1];
while (len > 0) {
data[0] = (epicsInt8) from[fromOffset];
data[0] = (int8) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2114,9 +2113,9 @@ int convertFromLongArray(PVScalarArray *pv, int offset, int len,epicsInt64 from[
}
case pvShort: {
PVShortArray *pvdata = (PVShortArray*) pv;
epicsInt16 data[1];
int16 data[1];
while (len > 0) {
data[0] = (epicsInt16) from[fromOffset];
data[0] = (int16) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2128,9 +2127,9 @@ int convertFromLongArray(PVScalarArray *pv, int offset, int len,epicsInt64 from[
}
case pvInt: {
PVIntArray *pvdata = (PVIntArray*) pv;
epicsInt32 data[1];
int32 data[1];
while (len > 0) {
data[0] = (epicsInt32) from[fromOffset];
data[0] = (int32) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2190,7 +2189,7 @@ int convertFromLongArray(PVScalarArray *pv, int offset, int len,epicsInt64 from[
throw std::logic_error(message);
}
int convertToLongArray(PVScalarArray * pv, int offset, int len,epicsInt64 to[], int toOffset)
int convertToLongArray(PVScalarArray * pv, int offset, int len,int64 to[], int toOffset)
{
ScalarType elemType = pv->getScalarArray()->getElementType();
int ntransfered = 0;
@@ -2225,7 +2224,7 @@ int convertToLongArray(PVScalarArray * pv, int offset, int len,epicsInt64 to[],
ShortArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2242,7 +2241,7 @@ int convertToLongArray(PVScalarArray * pv, int offset, int len,epicsInt64 to[],
IntArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2260,7 +2259,7 @@ int convertToLongArray(PVScalarArray * pv, int offset, int len,epicsInt64 to[],
LongArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2277,7 +2276,7 @@ int convertToLongArray(PVScalarArray * pv, int offset, int len,epicsInt64 to[],
FloatArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2295,7 +2294,7 @@ int convertToLongArray(PVScalarArray * pv, int offset, int len,epicsInt64 to[],
DoubleArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2323,9 +2322,9 @@ int convertFromFloatArray(PVScalarArray *pv, int offset, int len,float from[], i
}
case pvByte: {
PVByteArray *pvdata = (PVByteArray*) pv;
epicsInt8 data[1];
int8 data[1];
while (len > 0) {
data[0] = (epicsInt8) from[fromOffset];
data[0] = (int8) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2337,9 +2336,9 @@ int convertFromFloatArray(PVScalarArray *pv, int offset, int len,float from[], i
}
case pvShort: {
PVShortArray *pvdata = (PVShortArray*) pv;
epicsInt16 data[1];
int16 data[1];
while (len > 0) {
data[0] = (epicsInt16) from[fromOffset];
data[0] = (int16) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2351,9 +2350,9 @@ int convertFromFloatArray(PVScalarArray *pv, int offset, int len,float from[], i
}
case pvInt: {
PVIntArray *pvdata = (PVIntArray*) pv;
epicsInt32 data[1];
int32 data[1];
while (len > 0) {
data[0] = (epicsInt32) from[fromOffset];
data[0] = (int32) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2365,9 +2364,9 @@ int convertFromFloatArray(PVScalarArray *pv, int offset, int len,float from[], i
}
case pvLong: {
PVLongArray *pvdata = (PVLongArray*) pv;
epicsInt64 data[1];
int64 data[1];
while (len > 0) {
data[0] = (epicsInt64) from[fromOffset];
data[0] = (int64) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2448,7 +2447,7 @@ int convertToFloatArray(PVScalarArray * pv, int offset, int len,float to[], int
ShortArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2465,7 +2464,7 @@ int convertToFloatArray(PVScalarArray * pv, int offset, int len,float to[], int
IntArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2483,7 +2482,7 @@ int convertToFloatArray(PVScalarArray * pv, int offset, int len,float to[], int
LongArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2500,7 +2499,7 @@ int convertToFloatArray(PVScalarArray * pv, int offset, int len,float to[], int
FloatArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2518,7 +2517,7 @@ int convertToFloatArray(PVScalarArray * pv, int offset, int len,float to[], int
DoubleArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2546,9 +2545,9 @@ int convertFromDoubleArray(PVScalarArray *pv, int offset, int len,double from[],
}
case pvByte: {
PVByteArray *pvdata = (PVByteArray*) pv;
epicsInt8 data[1];
int8 data[1];
while (len > 0) {
data[0] = (epicsInt8) from[fromOffset];
data[0] = (int8) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2560,9 +2559,9 @@ int convertFromDoubleArray(PVScalarArray *pv, int offset, int len,double from[],
}
case pvShort: {
PVShortArray *pvdata = (PVShortArray*) pv;
epicsInt16 data[1];
int16 data[1];
while (len > 0) {
data[0] = (epicsInt16) from[fromOffset];
data[0] = (int16) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2574,9 +2573,9 @@ int convertFromDoubleArray(PVScalarArray *pv, int offset, int len,double from[],
}
case pvInt: {
PVIntArray *pvdata = (PVIntArray*) pv;
epicsInt32 data[1];
int32 data[1];
while (len > 0) {
data[0] = (epicsInt32) from[fromOffset];
data[0] = (int32) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2588,9 +2587,9 @@ int convertFromDoubleArray(PVScalarArray *pv, int offset, int len,double from[],
}
case pvLong: {
PVLongArray *pvdata = (PVLongArray*) pv;
epicsInt64 data[1];
int64 data[1];
while (len > 0) {
data[0] = (epicsInt64) from[fromOffset];
data[0] = (int64) from[fromOffset];
if (pvdata->put(offset, 1, data, 0) == 0)
return ntransfered;
--len;
@@ -2671,7 +2670,7 @@ int convertToDoubleArray(PVScalarArray * pv, int offset, int len,double to[], in
ShortArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2688,7 +2687,7 @@ int convertToDoubleArray(PVScalarArray * pv, int offset, int len,double to[], in
IntArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2706,7 +2705,7 @@ int convertToDoubleArray(PVScalarArray * pv, int offset, int len,double to[], in
LongArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2723,7 +2722,7 @@ int convertToDoubleArray(PVScalarArray * pv, int offset, int len,double to[], in
FloatArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2741,7 +2740,7 @@ int convertToDoubleArray(PVScalarArray * pv, int offset, int len,double to[], in
DoubleArray dataArray = data.data;
int dataOffset = data.offset;
for (int i = 0; i < num; i++)
to[i + toOffset] = (epicsInt8) dataArray[i + dataOffset];
to[i + toOffset] = (int8) dataArray[i + dataOffset];
len -= num;
offset += num;
toOffset += num;
@@ -2780,7 +2779,7 @@ int convertFromStringArray(PVScalarArray *pv, int offset, int len,String from[],
}
case pvByte: {
PVByteArray *pvdata = (PVByteArray*) pv;
epicsInt8 data[1];
int8 data[1];
while (len > 0) {
String fromString = from[fromOffset];
int ival;
@@ -2797,7 +2796,7 @@ int convertFromStringArray(PVScalarArray *pv, int offset, int len,String from[],
}
case pvShort: {
PVShortArray *pvdata = (PVShortArray*) pv;
epicsInt16 data[1];
int16 data[1];
while (len > 0) {
String fromString = from[fromOffset];
int ival;
@@ -2814,7 +2813,7 @@ int convertFromStringArray(PVScalarArray *pv, int offset, int len,String from[],
}
case pvInt: {
PVIntArray *pvdata = (PVIntArray*) pv;
epicsInt32 data[1];
int32 data[1];
while (len > 0) {
String fromString = from[fromOffset];
int ival;
@@ -2831,10 +2830,10 @@ int convertFromStringArray(PVScalarArray *pv, int offset, int len,String from[],
}
case pvLong: {
PVLongArray *pvdata = (PVLongArray*) pv;
epicsInt64 data[1];
int64 data[1];
while (len > 0) {
String fromString = from[fromOffset];
epicsInt64 ival;
int64 ival;
sscanf(fromString.c_str(),"%lld",&ival);
data[0] = ival;
if (pvdata->put(offset, 1, data, 0) == 0)
@@ -2973,7 +2972,7 @@ int convertToStringArray(PVScalarArray * pv, int offset, int len,String to[], in
for (int i = 0; i < num; i++) {
if (pvdata->get(offset + i, 1, &data) == 1) {
LongArray dataArray = data.data;
epicsInt64 ival = dataArray[data.offset];
int64 ival = dataArray[data.offset];
sprintf(cr,"%lld",ival);
to[toOffset + i] = String(cr);
} else {
@@ -3092,7 +3091,7 @@ void convertToString(StringBuilder buffer,PVField * pv,int indentLevel)
case pvLong: {
PVLong *data = (PVLong*)pv;
char xxx[30];
sprintf(xxx,"%lld",(epicsInt64)data->get());
sprintf(xxx,"%lld",(int64)data->get());
*buffer += xxx;
}
return;
@@ -3233,7 +3232,7 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int indentLevel)
if(i!=0) *buffer += ',';
int num = pvdata->get(i,1,&data);
if(num==1) {
epicsInt64 val = data.data[data.offset];
int64 val = data.data[data.offset];
char buf[16];
sprintf(buf,"%lld",val);
*buffer += buf;

View File

@@ -16,133 +16,132 @@ namespace epics { namespace pvData {
for(int i=0; i<indentLevel; i++) *buffer += " ";
}
Field::~Field(){}
class BaseField : public Field {
public:
BaseField(String fieldName,Type type);
virtual ~BaseField();
virtual void decReferenceCount() const;
virtual void incReferenceCount() const {referenceCount++;}
virtual int getReferenceCount() const {return referenceCount;}
virtual String getFieldName() const {return fieldName;}
virtual Type getType() const {return type;}
virtual void toString(StringBuilder buf) const {return toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
class FieldPvt {
public :
FieldPvt(String fieldName,Type type);
String fieldName;
Type type;
mutable volatile int referenceCount;
};
BaseField::BaseField(String fieldName,Type type)
:fieldName(fieldName),type(type), referenceCount(0){}
FieldPvt::FieldPvt(String fieldName,Type type)
: fieldName(fieldName),type(type),referenceCount(0) { }
BaseField::~BaseField() {
// note that c++ automatically calls destructor for fieldName
if(debugLevel==highDebug) printf("~BaseField %s\n",fieldName.c_str());
static volatile int totalReferenceCount = 0;
static volatile int64 totalConstruct = 0;
static volatile int64 totalDestruct = 0;
static Mutex *globalMutex;
int Field::getTotalReferenceCount()
{
Lock xx(globalMutex);
return totalReferenceCount;
}
void BaseField::decReferenceCount() const {
if(referenceCount<=0) {
int64 Field::getTotalConstruct()
{
Lock xx(globalMutex);
return totalConstruct;
}
int64 Field::getTotalDestruct()
{
Lock xx(globalMutex);
return totalDestruct;
}
Field::Field(String fieldName,Type type)
: pImpl(new FieldPvt(fieldName,type))
{
Lock xx(globalMutex);
totalConstruct++;
}
Field::~Field() {
Lock xx(globalMutex);
totalDestruct++;
// note that compiler automatically calls destructor for fieldName
delete pImpl;
if(debugLevel==highDebug) printf("~Field %s\n",pImpl->fieldName.c_str());
}
int Field::getReferenceCount() const {
Lock xx(globalMutex);
return pImpl->referenceCount;
}
String Field::getFieldName() const {return pImpl->fieldName;}
Type Field::getType() const {return pImpl->type;}
void Field::incReferenceCount() const {
Lock xx(globalMutex);
pImpl->referenceCount++;
totalReferenceCount++;
}
void Field::decReferenceCount() const {
Lock xx(globalMutex);
if(pImpl->referenceCount<=0) {
String message("logicError field ");
message += fieldName;
message += pImpl->fieldName;
throw std::logic_error(message);
}
referenceCount--;
if(referenceCount==0) delete this;
pImpl->referenceCount--;
totalReferenceCount--;
if(pImpl->referenceCount==0) delete this;
}
void BaseField::toString(StringBuilder buffer,int indentLevel) const{
void Field::toString(StringBuilder buffer,int indentLevel) const{
*buffer += " ";
*buffer += fieldName.c_str();
*buffer += pImpl->fieldName.c_str();
}
Scalar::Scalar(String fieldName,ScalarType scalarType)
: Field(fieldName,scalar),scalarType(scalarType){}
Scalar::~Scalar(){}
class BaseScalar: private BaseField,public Scalar {
public:
BaseScalar(String fieldName,ScalarType scalarType);
virtual ~BaseScalar();
virtual void incReferenceCount() const {BaseField::incReferenceCount();}
virtual void decReferenceCount() const {BaseField::decReferenceCount();}
virtual int getReferenceCount() const {return BaseField::getReferenceCount();}
virtual String getFieldName() const{ return BaseField::getFieldName(); }
virtual Type getType() const{return BaseField::getType();}
virtual ScalarType getScalarType() const { return scalarType;}
virtual void toString(StringBuilder buf) const {toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
ScalarType scalarType;
};
BaseScalar::BaseScalar(String fieldName,ScalarType scalarType)
: BaseField(fieldName,scalar),scalarType(scalarType){}
BaseScalar::~BaseScalar() {}
void BaseScalar::toString(StringBuilder buffer,int indentLevel) const{
void Scalar::toString(StringBuilder buffer,int indentLevel) const{
ScalarTypeFunc::toString(buffer,scalarType);
BaseField::toString(buffer,indentLevel);
Field::toString(buffer,indentLevel);
}
ScalarArray::~ScalarArray(){}
class BaseScalarArray: private BaseField,public ScalarArray {
public:
BaseScalarArray(String fieldName,ScalarType elementType);
virtual ~BaseScalarArray();
virtual void incReferenceCount() const {BaseField::incReferenceCount();}
virtual void decReferenceCount() const {BaseField::decReferenceCount();}
virtual int getReferenceCount() const {return BaseField::getReferenceCount();}
virtual String getFieldName() const{ return BaseField::getFieldName(); }
virtual Type getType() const{return BaseField::getType();}
virtual ScalarType getElementType() const { return elementType;}
virtual void toString(StringBuilder buf) const {toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
ScalarType elementType;
};
BaseScalarArray::BaseScalarArray
ScalarArray::ScalarArray
(String fieldName,ScalarType elementType)
: BaseField(fieldName,scalarArray),elementType(elementType){}
BaseScalarArray::~BaseScalarArray() {}
: Field(fieldName,scalarArray),elementType(elementType){}
ScalarArray::~ScalarArray() {}
void BaseScalarArray::toString(StringBuilder buffer,int indentLevel) const{
void ScalarArray::toString(StringBuilder buffer,int indentLevel) const{
String temp = String();
ScalarTypeFunc::toString(&temp,elementType);
temp += "Array";
*buffer += temp;
BaseField::toString(buffer,indentLevel);
Field::toString(buffer,indentLevel);
}
Structure::~Structure(){}
StructureArray::StructureArray(String fieldName,StructureConstPtr structure)
: Field(fieldName,structureArray),pstructure(structure)
{
pstructure->incReferenceCount();
}
class BaseStructure: private BaseField,public Structure {
public:
BaseStructure(String fieldName, int numberFields,FieldConstPtrArray fields);
virtual ~BaseStructure();
virtual void incReferenceCount() const {BaseField::incReferenceCount();}
virtual void decReferenceCount() const {BaseField::decReferenceCount();}
virtual int getReferenceCount() const {return BaseField::getReferenceCount();}
virtual String getFieldName() const{ return BaseField::getFieldName(); }
virtual Type getType() const{return BaseField::getType();}
virtual int const getNumberFields() const {return numberFields;}
virtual FieldConstPtr getField(String fieldName) const;
virtual int getFieldIndex(String fieldName) const;
virtual FieldConstPtrArray getFields() const { return fields;}
virtual void toString(StringBuilder buf) const {toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
int numberFields;
FieldConstPtrArray fields;
};
StructureArray::~StructureArray() {
if(debugLevel==highDebug) printf("~StructureArray\n");
pstructure->decReferenceCount();
}
BaseStructure::BaseStructure (String fieldName,
void StructureArray::toString(StringBuilder buffer,int indentLevel) const {
*buffer += " structureArray ";
Field::toString(buffer,indentLevel);
newLine(buffer,indentLevel + 1);
pstructure->toString(buffer,indentLevel + 1);
}
Structure::Structure (String fieldName,
int numberFields, FieldConstPtrArray infields)
: BaseField(fieldName,structure),
: Field(fieldName,structure),
numberFields(numberFields),
fields(new FieldConstPtr[numberFields])
{
@@ -165,9 +164,10 @@ namespace epics { namespace pvData {
fields[i]->incReferenceCount();
}
}
BaseStructure::~BaseStructure() {
Structure::~Structure() {
if(debugLevel==highDebug)
printf("~BaseStructure %s\n",BaseField::getFieldName().c_str());
printf("~Structure %s\n",Field::getFieldName().c_str());
for(int i=0; i<numberFields; i++) {
FieldConstPtr pfield = fields[i];
pfield->decReferenceCount();
@@ -175,7 +175,7 @@ namespace epics { namespace pvData {
delete[] fields;
}
FieldConstPtr BaseStructure::getField(String fieldName) const {
FieldConstPtr Structure::getField(String fieldName) const {
for(int i=0; i<numberFields; i++) {
FieldConstPtr pfield = fields[i];
int result = fieldName.compare(pfield->getFieldName());
@@ -184,7 +184,7 @@ namespace epics { namespace pvData {
return 0;
}
int BaseStructure::getFieldIndex(String fieldName) const {
int Structure::getFieldIndex(String fieldName) const {
for(int i=0; i<numberFields; i++) {
FieldConstPtr pfield = fields[i];
int result = fieldName.compare(pfield->getFieldName());
@@ -193,9 +193,9 @@ namespace epics { namespace pvData {
return -1;
}
void BaseStructure::toString(StringBuilder buffer,int indentLevel) const{
void Structure::toString(StringBuilder buffer,int indentLevel) const{
*buffer += "structure";
BaseField::toString(buffer,indentLevel);
Field::toString(buffer,indentLevel);
newLine(buffer,indentLevel+1);
for(int i=0; i<numberFields; i++) {
FieldConstPtr pfield = fields[i];
@@ -204,73 +204,33 @@ namespace epics { namespace pvData {
}
}
StructureArray::~StructureArray(){}
class BaseStructureArray: private BaseField,public StructureArray {
public:
BaseStructureArray(String fieldName,StructureConstPtr structure);
virtual ~BaseStructureArray();
virtual void incReferenceCount() const {BaseField::incReferenceCount();}
virtual void decReferenceCount() const {BaseField::decReferenceCount();}
virtual int getReferenceCount() const {return BaseField::getReferenceCount();}
virtual String getFieldName() const{
return BaseField::getFieldName();
}
virtual Type getType() const{return BaseField::getType();}
virtual StructureConstPtr getStructure() const { return pstructure; }
virtual void toString(StringBuilder buf) const {toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
StructureConstPtr pstructure;
};
BaseStructureArray::BaseStructureArray(String fieldName,StructureConstPtr structure)
: BaseField(fieldName,structureArray),pstructure(structure)
{
pstructure->incReferenceCount();
}
BaseStructureArray::~BaseStructureArray() {
if(debugLevel==highDebug) printf("~BaseStructureArray\n");
pstructure->decReferenceCount();
}
void BaseStructureArray::toString(StringBuilder buffer,int indentLevel) const {
*buffer += " structureArray ";
BaseField::toString(buffer,indentLevel);
newLine(buffer,indentLevel + 1);
pstructure->toString(buffer,indentLevel + 1);
}
FieldCreate::FieldCreate(){};
ScalarConstPtr FieldCreate::createScalar(String fieldName,
ScalarType scalarType) const
{
BaseScalar *baseScalar = new BaseScalar(fieldName,scalarType);
return baseScalar;
Scalar *scalar = new Scalar(fieldName,scalarType);
return scalar;
}
ScalarArrayConstPtr FieldCreate::createScalarArray(
String fieldName,ScalarType elementType) const
{
BaseScalarArray *baseScalarArray = new BaseScalarArray(fieldName,elementType);
return baseScalarArray;
ScalarArray *scalarArray = new ScalarArray(fieldName,elementType);
return scalarArray;
}
StructureConstPtr FieldCreate::createStructure (
String fieldName,int numberFields,
FieldConstPtr fields[]) const
{
BaseStructure *baseStructure = new BaseStructure(
Structure *structure = new Structure(
fieldName,numberFields,fields);
return baseStructure;
return structure;
}
StructureArrayConstPtr FieldCreate::createStructureArray(
String fieldName,StructureConstPtr structure) const
{
BaseStructureArray *baseStructureArray = new BaseStructureArray(fieldName,structure);
return baseStructureArray;
StructureArray *structureArray = new StructureArray(fieldName,structure);
return structureArray;
}
FieldConstPtr FieldCreate::create(String fieldName,
@@ -300,20 +260,19 @@ namespace epics { namespace pvData {
throw std::logic_error(message);
}
static FieldCreate* instance = 0;
static FieldCreate* fieldCreate = 0;
class FieldCreateExt : public FieldCreate {
public:
FieldCreateExt(): FieldCreate(){};
};
FieldCreate::FieldCreate()
{
globalMutex = new Mutex();
}
FieldCreate * getFieldCreate() {
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(instance==0) instance = new FieldCreateExt();
return instance;
if(fieldCreate==0) fieldCreate = new FieldCreate();
return fieldCreate;
}
}}

View File

@@ -38,7 +38,9 @@ static Convert* convert = 0;
static FieldCreate * fieldCreate = 0;
static PVDataCreate* pvDataCreate = 0;
PVDataCreate::PVDataCreate(){}
PVDataCreate::PVDataCreate(){
PVField::init();
}
PVField *PVDataCreate::createPVField(PVStructure *parent,
FieldConstPtr field)
@@ -222,18 +224,12 @@ PVStructure *PVDataCreate::createPVStructure(PVStructure *parent,
return pvStructure;
}
class PVDataCreateExt : public PVDataCreate {
public:
PVDataCreateExt(): PVDataCreate(){}
};
PVDataCreate * getPVDataCreate() {
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(pvDataCreate==0){
pvDataCreate = new PVDataCreateExt();
pvDataCreate = new PVDataCreate();
convert = getConvert();
fieldCreate = getFieldCreate();
}

View File

@@ -178,22 +178,6 @@ static void createEnumeratedAlarm() {
enumeratedAlarmField = fieldCreate->createStructure(String("valueAlarm"),numFields,fields);
}
static void createPreAllocated() {
createAlarm();
createTimeStamp();
createDisplay();
createControl();
createBooleanAlarm();
createByteAlarm();
createShortAlarm();
createIntAlarm();
createLongAlarm();
createFloatAlarm();
createDoubleAlarm();
createEnumeratedAlarm();
}
static StructureConstPtr createProperties(String fieldName,FieldConstPtr field,String properties) {
bool gotAlarm = false;
bool gotTimeStamp = false;
@@ -265,10 +249,6 @@ static StructureConstPtr createProperties(String fieldName,FieldConstPtr field,S
}
StandardField::StandardField(){}
StandardField::~StandardField(){}
ScalarConstPtr StandardField::scalar(String fieldName,ScalarType type)
{
return fieldCreate->createScalar(fieldName,type);
@@ -452,21 +432,47 @@ StructureConstPtr StandardField::enumeratedAlarm()
return enumeratedAlarmField;
}
void StandardField::init()
{
createAlarm();
alarmField->incReferenceCount();
createTimeStamp();
timeStampField->incReferenceCount();
createDisplay();
displayField->incReferenceCount();
createControl();
controlField->incReferenceCount();
createBooleanAlarm();
booleanAlarmField->incReferenceCount();
createByteAlarm();
byteAlarmField->incReferenceCount();
createShortAlarm();
shortAlarmField->incReferenceCount();
createIntAlarm();
intAlarmField->incReferenceCount();
createLongAlarm();
longAlarmField->incReferenceCount();
createFloatAlarm();
floatAlarmField->incReferenceCount();
createDoubleAlarm();
doubleAlarmField->incReferenceCount();
createEnumeratedAlarm();
enumeratedAlarmField->incReferenceCount();
}
class StandardFieldExt : public StandardField {
public:
StandardFieldExt(): StandardField(){};
};
StandardField::StandardField(){init();}
StandardField::~StandardField(){}
StandardField * getStandardField() {
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(standardField==0) {
standardField = new StandardFieldExt();
standardField = new StandardField();
fieldCreate = getFieldCreate();
createPreAllocated();
}
return standardField;
}

View File

@@ -3,7 +3,6 @@
#include <cstdlib>
#include <string>
#include <cstdio>
#include <epicsTypes.h>
#include "pvIntrospect.h"

View File

@@ -38,16 +38,16 @@ namespace epics { namespace pvData {
StructureArrayConstPtr from, StructureArrayConstPtr to);
void copyStructureArray(
PVStructureArray *from, PVStructureArray *to);
epicsInt8 toByte(PVScalar *pv);
epicsInt16 toShort(PVScalar *pv);
epicsInt32 toInt(PVScalar *pv);
epicsInt64 toLong(PVScalar *pv);
int8 toByte(PVScalar *pv);
int16 toShort(PVScalar *pv);
int32 toInt(PVScalar *pv);
int64 toLong(PVScalar *pv);
float toFloat(PVScalar *pv);
double toDouble(PVScalar *pv);
void fromByte(PVScalar *pv,epicsInt8 from);
void fromShort(PVScalar *pv,epicsInt16 from);
void fromInt(PVScalar *pv, epicsInt32 from);
void fromLong(PVScalar *pv, epicsInt64 from);
void fromByte(PVScalar *pv,int8 from);
void fromShort(PVScalar *pv,int16 from);
void fromInt(PVScalar *pv, int32 from);
void fromLong(PVScalar *pv, int64 from);
void fromFloat(PVScalar* pv, float from);
void fromDouble(PVScalar *pv, double from);
int toByteArray(PVScalarArray *pv, int offset, int length,

View File

@@ -65,6 +65,8 @@ namespace epics { namespace pvData {
class PVField : public Requester, public Serializable ,private NoDefaultMethods{
public:
virtual ~PVField();
static int64 getTotalConstruct();
static int64 getTotalDestruct();
String getRequesterName() ;
virtual void message(String message,MessageType messageType) ;
virtual void setRequester(Requester *prequester);
@@ -91,6 +93,8 @@ namespace epics { namespace pvData {
class PVFieldPvt *pImpl;
static void computeOffset(PVField *pvField);
static void computeOffset(PVField *pvField,int offset);
static void init();
friend class PVDataCreate;
};
class PVScalar : public PVField {
@@ -239,8 +243,8 @@ namespace epics { namespace pvData {
class PVByte : public PVScalar {
public:
virtual ~PVByte();
virtual epicsInt8 get() = 0;
virtual void put(epicsInt8 value) = 0;
virtual int8 get() = 0;
virtual void put(int8 value) = 0;
protected:
PVByte(PVStructure *parent,ScalarConstPtr scalar)
: PVScalar(parent,scalar) {}
@@ -250,8 +254,8 @@ namespace epics { namespace pvData {
class PVShort : public PVScalar {
public:
virtual ~PVShort();
virtual epicsInt16 get() = 0;
virtual void put(epicsInt16 value) = 0;
virtual int16 get() = 0;
virtual void put(int16 value) = 0;
protected:
PVShort(PVStructure *parent,ScalarConstPtr scalar)
: PVScalar(parent,scalar) {}
@@ -261,8 +265,8 @@ namespace epics { namespace pvData {
class PVInt : public PVScalar{
public:
virtual ~PVInt();
virtual epicsInt32 get() = 0;
virtual void put(epicsInt32 value) = 0;
virtual int32 get() = 0;
virtual void put(int32 value) = 0;
protected:
PVInt(PVStructure *parent,ScalarConstPtr scalar)
: PVScalar(parent,scalar) {}
@@ -272,8 +276,8 @@ namespace epics { namespace pvData {
class PVLong : public PVScalar {
public:
virtual ~PVLong();
virtual epicsInt64 get() = 0;
virtual void put(epicsInt64 value) = 0;
virtual int64 get() = 0;
virtual void put(int64 value) = 0;
protected:
PVLong(PVStructure *parent,ScalarConstPtr scalar)
: PVScalar(parent,scalar) {}
@@ -338,7 +342,7 @@ namespace epics { namespace pvData {
};
typedef epicsInt8 * ByteArray;
typedef int8 * ByteArray;
class ByteArrayData {
public:
ByteArray data;
@@ -362,7 +366,7 @@ namespace epics { namespace pvData {
};
typedef epicsInt16 * ShortArray;
typedef int16 * ShortArray;
class ShortArrayData {
public:
ShortArray data;
@@ -385,7 +389,7 @@ namespace epics { namespace pvData {
private:
};
typedef epicsInt32 * IntArray;
typedef int32 * IntArray;
class IntArrayData {
public:
IntArray data;
@@ -409,7 +413,7 @@ namespace epics { namespace pvData {
};
typedef epicsInt64 * LongArray;
typedef int64 * LongArray;
class LongArrayData {
public:
LongArray data;
@@ -533,6 +537,7 @@ namespace epics { namespace pvData {
String fieldName,PVStructure *structToClone);
protected:
PVDataCreate();
friend PVDataCreate * getPVDataCreate();
};
extern PVDataCreate * getPVDataCreate();

View File

@@ -1,11 +1,16 @@
/* pvIntrospect.h */
#include <string>
#include <stdexcept>
#include <epicsTypes.h>
#ifndef PVINTROSPECT_H
#define PVINTROSPECT_H
#include "noDefaultMethods.h"
namespace epics { namespace pvData {
typedef signed char int8;
typedef short int16;
typedef int int32;
typedef long long int64;
class Field;
class Scalar;
class ScalarArray;
@@ -58,48 +63,73 @@ namespace epics { namespace pvData {
class Field : private NoDefaultMethods {
public:
virtual ~Field();
virtual int getReferenceCount() const = 0;
virtual String getFieldName() const = 0;
virtual Type getType() const = 0;
virtual void toString(StringBuilder buf) const = 0;
virtual void toString(StringBuilder buf,int indentLevel) const = 0;
Field(String fieldName,Type type);
static int getTotalReferenceCount();
static int64 getTotalConstruct();
static int64 getTotalDestruct();
int getReferenceCount() const;
String getFieldName() const;
Type getType() const;
virtual void toString(StringBuilder buf) const{toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
virtual void incReferenceCount() const = 0;
virtual void decReferenceCount() const = 0;
friend class BaseStructure;
friend class BaseStructureArray;
class FieldPvt *pImpl;
void incReferenceCount() const;
void decReferenceCount() const;
friend class StructureArray;
friend class Structure;
friend class PVFieldPvt;
friend class StandardField;
};
class Scalar : public Field{
public:
Scalar(String fieldName,ScalarType scalarType);
virtual ~Scalar();
virtual ScalarType getScalarType() const = 0;
ScalarType getScalarType() const {return scalarType;}
virtual void toString(StringBuilder buf) const{toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
ScalarType scalarType;
};
class ScalarArray : public Field{
public:
ScalarArray(String fieldName,ScalarType scalarType);
virtual ~ScalarArray();
virtual ScalarType getElementType() const = 0;
};
class Structure : public Field {
public:
virtual ~Structure();
virtual int const getNumberFields() const = 0;
virtual FieldConstPtr getField(String fieldName) const = 0;
virtual int getFieldIndex(String fieldName) const = 0;
virtual FieldConstPtrArray getFields() const = 0;
ScalarType getElementType() const {return elementType;}
virtual void toString(StringBuilder buf) const{toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
ScalarType elementType;
};
class StructureArray : public Field{
public:
StructureArray(String fieldName,StructureConstPtr structure);
virtual ~StructureArray();
virtual StructureConstPtr getStructure() const = 0;
StructureConstPtr getStructure() const {return pstructure;}
virtual void toString(StringBuilder buf) const{toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
StructureConstPtr pstructure;
};
class Structure : public Field {
public:
Structure(String fieldName, int numberFields,FieldConstPtrArray fields);
virtual ~Structure();
int getNumberFields() const {return numberFields;}
FieldConstPtr getField(String fieldName) const;
int getFieldIndex(String fieldName) const;
FieldConstPtrArray getFields() const {return fields;}
virtual void toString(StringBuilder buf) const{toString(buf,0);}
virtual void toString(StringBuilder buf,int indentLevel) const;
private:
int numberFields;
FieldConstPtrArray fields;
};
class FieldCreate {
public:
@@ -111,8 +141,9 @@ namespace epics { namespace pvData {
int numberFields,FieldConstPtrArray fields) const;
StructureArrayConstPtr createStructureArray(String fieldName,
StructureConstPtr structure) const;
protected:
private:
FieldCreate();
friend FieldCreate * getFieldCreate();
};
extern FieldCreate * getFieldCreate();

View File

@@ -53,6 +53,8 @@ namespace epics { namespace pvData {
StructureConstPtr floatAlarm();
StructureConstPtr doubleAlarm();
StructureConstPtr enumeratedAlarm();
private:
void init();
};
extern StandardField * getStandardField();

View File

@@ -2,6 +2,10 @@ TOP=../..
include $(TOP)/configure/CONFIG
PROD_HOST += testIntTypes
testIntTypes_SRCS += testIntTypes.cpp
testIntTypes_LIBS += pvFactory Com
PROD_HOST += testIntrospect
testIntrospect_SRCS += testIntrospect.cpp
testIntrospect_LIBS += pvFactory Com

View File

@@ -0,0 +1,65 @@
/* testIntrospect.cpp */
/* Author: Marty Kraimer Date: 2010.09 */
#include <cstddef>
#include <cstdlib>
#include <cstddef>
#include <string>
#include <cstdio>
#include <epicsAssert.h>
#include "requester.h"
#include "pvIntrospect.h"
using namespace epics::pvData;
int main(int argc,char *argv[])
{
char *fileName = 0;
if(argc>1) fileName = argv[1];
FILE * fd = stdout;
if(fileName!=0 && fileName[0]!=0) {
fd = fopen(fileName,"w+");
}
assert(sizeof(int8)==1);
assert(sizeof(int16)==2);
assert(sizeof(int32)==4);
assert(sizeof(int64)==8);
int intValue;
int8 byteInt;
intValue = 0x7f;
byteInt = intValue;
fprintf(fd,"int8 max %d",(int)byteInt);
intValue = 0x80;
byteInt = intValue;
fprintf(fd," min %d\n",(int)byteInt);
int16 shortInt;
intValue = 0x7fff;
shortInt = intValue;
fprintf(fd,"int8 max %hd",shortInt);
intValue = 0x8000;
shortInt = intValue;
fprintf(fd," min %hd\n",shortInt);
int32 intInt;
intValue = 0x7fffffff;
intInt = intValue;
fprintf(fd,"int8 max %d",intInt);
intValue = 0x80000000;
intInt = intValue;
fprintf(fd," min %d\n",intInt);
int64 longInt = 0x7fffffff;
longInt <<= 32;
longInt |= 0xffffffff;
fprintf(fd,"int8 max %lld",longInt);
longInt = intValue = 0x80000000;;
longInt <<= 32;
fprintf(fd," min %lld\n",longInt);
return(0);
}

View File

@@ -1,4 +1,4 @@
/* testSimpleStructure.cpp */
/* testIntrospect.cpp */
/* Author: Marty Kraimer Date: 2010.09 */
#include <cstddef>
@@ -11,31 +11,36 @@
#include "requester.h"
#include "pvIntrospect.h"
#include "pvData.h"
#include "standardField.h"
using namespace epics::pvData;
static FieldCreate * fieldCreate = 0;
static PVDataCreate * pvDataCreate = 0;
static StandardField *standardField = 0;
static String builder("");
static void testScalarCommon(FILE * fd,String fieldName,ScalarType stype,
bool isInteger,bool isNumeric,bool isPrimitive)
{
ScalarConstPtr boolean = standardField->scalar(fieldName,stype);
Type type = boolean->getType();
ScalarConstPtr pscalar = standardField->scalar(fieldName,stype);
Type type = pscalar->getType();
assert(type==scalar);
builder.clear();
TypeFunc::toString(&builder,type);
assert(builder.compare("scalar")==0);
ScalarType scalarType = boolean->getScalarType();
ScalarType scalarType = pscalar->getScalarType();
assert(scalarType==stype);
assert(ScalarTypeFunc::isInteger(scalarType)==isInteger);
assert(ScalarTypeFunc::isNumeric(scalarType)==isNumeric);
assert(ScalarTypeFunc::isPrimitive(scalarType)==isPrimitive);
builder.clear();
boolean->toString(&builder);
pscalar->toString(&builder);
fprintf(fd,"%s\n",builder.c_str());
// create tempory PVField so that memory can be released
PVField *pvField = pvDataCreate->createPVField(0,pscalar);
delete pvField;
}
static void testScalar(FILE * fd) {
@@ -53,20 +58,23 @@ static void testScalar(FILE * fd) {
static void testScalarArrayCommon(FILE * fd,String fieldName,ScalarType stype,
bool isInteger,bool isNumeric,bool isPrimitive)
{
ScalarArrayConstPtr boolean = standardField->scalarArray(fieldName,stype);
Type type = boolean->getType();
ScalarArrayConstPtr pscalar = standardField->scalarArray(fieldName,stype);
Type type = pscalar->getType();
assert(type==scalarArray);
builder.clear();
TypeFunc::toString(&builder,type);
assert(builder.compare("scalarArray")==0);
ScalarType scalarType = boolean->getElementType();
ScalarType scalarType = pscalar->getElementType();
assert(scalarType==stype);
assert(ScalarTypeFunc::isInteger(scalarType)==isInteger);
assert(ScalarTypeFunc::isNumeric(scalarType)==isNumeric);
assert(ScalarTypeFunc::isPrimitive(scalarType)==isPrimitive);
builder.clear();
boolean->toString(&builder);
pscalar->toString(&builder);
fprintf(fd,"%s\n",builder.c_str());
// create tempory PVField so that memory can be released
PVField *pvField = pvDataCreate->createPVField(0,pscalar);
delete pvField;
}
static void testScalarArray(FILE * fd) {
@@ -88,6 +96,9 @@ static void testSimpleStructure(FILE * fd) {
builder.clear();
ptop->toString(&builder);
fprintf(fd,"%s\n",builder.c_str());
// create tempory PVField so that memory can be released
PVField *pvField = pvDataCreate->createPVField(0,ptop);
delete pvField;
}
static StructureConstPtr createPowerSupply() {
@@ -111,10 +122,14 @@ static void testStructureArray(FILE * fd) {
builder.clear();
top->toString(&builder);
fprintf(fd,"%s\n",builder.c_str());
// create tempory PVField so that memory can be released
PVField *pvField = pvDataCreate->createPVField(0,top);
delete pvField;
}
int main(int argc,char *argv[])
{
int initialTotalReferences,finalTotalReferences;
char *fileName = 0;
if(argc>1) fileName = argv[1];
FILE * fd = stdout;
@@ -122,11 +137,36 @@ int main(int argc,char *argv[])
fd = fopen(fileName,"w+");
}
fieldCreate = getFieldCreate();
pvDataCreate = getPVDataCreate();
standardField = getStandardField();
initialTotalReferences = Field::getTotalReferenceCount();
testScalar(fd);
finalTotalReferences = Field::getTotalReferenceCount();
assert(initialTotalReferences==finalTotalReferences);
initialTotalReferences = Field::getTotalReferenceCount();
testScalarArray(fd);
finalTotalReferences = Field::getTotalReferenceCount();
assert(initialTotalReferences==finalTotalReferences);
initialTotalReferences = Field::getTotalReferenceCount();
testSimpleStructure(fd);
finalTotalReferences = Field::getTotalReferenceCount();
assert(initialTotalReferences==finalTotalReferences);
initialTotalReferences = Field::getTotalReferenceCount();
testStructureArray(fd);
finalTotalReferences = Field::getTotalReferenceCount();
assert(initialTotalReferences==finalTotalReferences);
initialTotalReferences = Field::getTotalReferenceCount();
long long totalConstruct = Field::getTotalConstruct();
long long totalDestruct = Field::getTotalDestruct();
int totalReference = Field::getTotalReferenceCount();
fprintf(fd,"Field: totalConstruct %lli totalDestruct %lli totalReferenceCount %i\n",
totalConstruct,totalDestruct,totalReference);
assert(totalConstruct==(totalDestruct+totalReference));
totalConstruct = PVField::getTotalConstruct();
totalDestruct = PVField::getTotalDestruct();
fprintf(fd,"PVField: totalConstruct %lli totalDestruct %lli\n",
totalConstruct,totalDestruct);
assert(totalConstruct==totalDestruct);
return(0);
}

View File

@@ -7,6 +7,8 @@
#include <string>
#include <cstdio>
#include <epicsAssert.h>
#include "requester.h"
#include "pvIntrospect.h"
#include "pvData.h"
@@ -23,21 +25,41 @@ static String buffer("");
void testSimpleStructure(FILE * fd) {
int initialTotalReferences,finalTotalReferences;
fprintf(fd,"\ntestSimpleStructure\n");
String properties("alarm,timeStamp,display,control,valueAlarm");
initialTotalReferences = Field::getTotalReferenceCount();
PVStructure *ptop = standardPVField->scalar(
0,String(""),pvDouble,properties);
buffer.clear();
ptop->toString(&buffer);
fprintf(fd,"%s\n",buffer.c_str());
finalTotalReferences = Field::getTotalReferenceCount();
printf("before delete initialTotalReferences %d finalTotalReferences %d\n",
initialTotalReferences,finalTotalReferences);
delete ptop;
finalTotalReferences = Field::getTotalReferenceCount();
printf("after initialTotalReferences %d finalTotalReferences %d\n",
initialTotalReferences,finalTotalReferences);
assert(initialTotalReferences==finalTotalReferences);
}
void testPowerSupply(FILE * fd) {
int initialTotalReferences,finalTotalReferences;
fprintf(fd,"\ntestPowerSupply\n");
initialTotalReferences = Field::getTotalReferenceCount();
PVStructure *ptop = standardPVField->powerSupply(0);
buffer.clear();
ptop->toString(&buffer);
fprintf(fd,"%s\n",buffer.c_str());
finalTotalReferences = Field::getTotalReferenceCount();
printf("before delete initialTotalReferences %d finalTotalReferences %d\n",
initialTotalReferences,finalTotalReferences);
delete ptop;
finalTotalReferences = Field::getTotalReferenceCount();
printf("after initialTotalReferences %d finalTotalReferences %d\n",
initialTotalReferences,finalTotalReferences);
assert(initialTotalReferences==finalTotalReferences);
}
int main(int argc,char *argv[])
@@ -54,6 +76,17 @@ int main(int argc,char *argv[])
standardPVField = getStandardPVField();
testSimpleStructure(fd);
testPowerSupply(fd);
long long totalConstruct = Field::getTotalConstruct();
long long totalDestruct = Field::getTotalDestruct();
int totalReference = Field::getTotalReferenceCount();
printf("Field: totalConstruct %lli totalDestruct %lli totalReferenceCount %i\n",
totalConstruct,totalDestruct,totalReference);
assert(totalConstruct==(totalDestruct+totalReference));
totalConstruct = PVField::getTotalConstruct();
totalDestruct = PVField::getTotalDestruct();
printf("PVField: totalConstruct %lli totalDestruct %lli\n",
totalConstruct,totalDestruct);
assert(totalConstruct==totalDestruct);
return(0);
}

View File

@@ -68,7 +68,7 @@ void testByte() {
printf("\ntestByte\n");
PVScalar *pvScalar = getStandardPVField()->scalarValue(0,pvByte);
PVByte *pvValue = (PVByte *)pvScalar;
epicsInt8 value = 2;
int8 value = 2;
pvValue->put(value);
int getValue = pvValue->get();
printf("put %d get %d\n",value,getValue);
@@ -108,7 +108,7 @@ void testShort() {
printf("\ntestShort\n");
PVScalar *pvScalar = getStandardPVField()->scalarValue(0,pvShort);
PVShort *pvValue = (PVShort *)pvScalar;
epicsInt16 value = 2;
int16 value = 2;
pvValue->put(value);
int getValue = pvValue->get();
printf("put %d get %d\n",value,getValue);
@@ -148,7 +148,7 @@ void testInt() {
printf("\ntestInt\n");
PVScalar *pvScalar = getStandardPVField()->scalarValue(0,pvInt);
PVInt *pvValue = (PVInt *)pvScalar;
epicsInt32 value = 2;
int32 value = 2;
pvValue->put(value);
int getValue = pvValue->get();
printf("put %d get %d\n",value,getValue);
@@ -188,9 +188,9 @@ void testLong() {
printf("\ntestLong\n");
PVScalar *pvScalar = getStandardPVField()->scalarValue(0,pvLong);
PVLong *pvValue = (PVLong *)pvScalar;
epicsInt64 value = 2;
int64 value = 2;
pvValue->put(value);
epicsInt64 getValue = pvValue->get();
int64 getValue = pvValue->get();
printf("put %ld get %ld\n",(long int)value,(long int)getValue);
if(value!=getValue) {
fprintf(stderr,"ERROR getValue put %ld get %ld\n",(long int)value,(long int)getValue);

View File

@@ -26,7 +26,7 @@ void testBooleanArray() {
PVBooleanArray *pvValue = (PVBooleanArray *)pvScalarArray;
int length = 5;
bool *value = new bool[length];
for(int i=0; i<length; i++) value[i] = epicsTrue;
for(int i=0; i<length; i++) value[i] = true;
pvValue->put(0,length,value,0);
BooleanArrayData data = BooleanArrayData();
pvValue->get(0,length,&data);
@@ -34,8 +34,8 @@ void testBooleanArray() {
printf("(orig,get):");
for(int i=0; i< length; i++) {
printf("(%s,%s) ",
((value[i]==epicsTrue) ? "true" : "false"),
((getValue[i]==epicsTrue) ? "true" : "false"));
((value[i]==true) ? "true" : "false"),
((getValue[i]==true) ? "true" : "false"));
}
printf("\n");
FieldConstPtr field = pvValue->getField();
@@ -55,12 +55,12 @@ void testByteArray() {
getStandardPVField()->scalarArrayValue(0,pvByte);
PVByteArray *pvValue = (PVByteArray *)pvScalarArray;
int length = 5;
epicsInt8 *value = new epicsInt8[length];
int8 *value = new int8[length];
for(int i=0; i<length; i++) value[i] = i;
pvValue->put(0,length,value,0);
ByteArrayData data = ByteArrayData();
pvValue->get(0,length,&data);
epicsInt8 * getValue = data.data;
int8 * getValue = data.data;
printf("(orig,get):");
for(int i=0; i< length; i++) {
printf("(%d,%d) ",(int)value[i],(int)getValue[i]);
@@ -83,12 +83,12 @@ void testShortArray() {
getStandardPVField()->scalarArrayValue(0,pvShort);
PVShortArray *pvValue = (PVShortArray *)pvScalarArray;
int length = 5;
epicsInt16 *value = new epicsInt16[length];
int16 *value = new int16[length];
for(int i=0; i<length; i++) value[i] = i;
pvValue->put(0,length,value,0);
ShortArrayData data = ShortArrayData();
pvValue->get(0,length,&data);
epicsInt16 * getValue = data.data;
int16 * getValue = data.data;
printf("(orig,get):");
for(int i=0; i< length; i++) {
printf("(%d,%d) ",(int)value[i],(int)getValue[i]);
@@ -111,12 +111,12 @@ void testIntArray() {
getStandardPVField()->scalarArrayValue(0,pvInt);
PVIntArray *pvValue = (PVIntArray *)pvScalarArray;
int length = 5;
epicsInt32 *value = new epicsInt32[length];
int32 *value = new int32[length];
for(int i=0; i<length; i++) value[i] = i;
pvValue->put(0,length,value,0);
IntArrayData data = IntArrayData();
pvValue->get(0,length,&data);
epicsInt32 * getValue = data.data;
int32 * getValue = data.data;
printf("(orig,get):");
for(int i=0; i< length; i++) {
printf("(%d,%d) ",value[i],getValue[i]);
@@ -140,12 +140,12 @@ void testLongArray() {
getStandardPVField()->scalarArrayValue(0,pvLong);
PVLongArray *pvValue = (PVLongArray *)pvScalarArray;
int length = 5;
epicsInt64 *value = new epicsInt64[length];
int64 *value = new int64[length];
for(int i=0; i<length; i++) value[i] = i;
pvValue->put(0,length,value,0);
LongArrayData data = LongArrayData();
pvValue->get(0,length,&data);
epicsInt64 * getValue = data.data;
int64 * getValue = data.data;
printf("(orig,get):");
for(int i=0; i< length; i++) {
printf("(%ld,%ld) ",(long int)value[i],(long int)getValue[i]);

5
test/testAll.pl Executable file
View File

@@ -0,0 +1,5 @@
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
if $running_under_some_shell; # testIntTypes.pl
$EPICS_HOST_ARCH = "linux-x86";
system ("./testIntTypes.pl");
system ("./testIntrospect.pl");

4
test/testIntTypes Normal file
View File

@@ -0,0 +1,4 @@
int8 max 127 min -128
int8 max 32767 min -32768
int8 max 2147483647 min -2147483648
int8 max 9223372036854775807 min -9223372036854775808

12
test/testIntTypes.pl Executable file
View File

@@ -0,0 +1,12 @@
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
if $running_under_some_shell; # testIntTypes.pl
$EPICS_HOST_ARCH = "linux-x86";
system ("rm testIntTypes");
system ("rm testIntTypesDiff");
system ("../bin/${EPICS_HOST_ARCH}/testIntTypes testIntTypes");
system ("diff testIntTypes testIntTypesGold >> testIntTypesDiff");
if(-z "testIntTypesDiff") {
print "testIntTypes OK\n";
} else {
print "testIntTypes Failed\n";
}

0
test/testIntTypesDiff Normal file
View File

4
test/testIntTypesGold Normal file
View File

@@ -0,0 +1,4 @@
int8 max 127 min -128
int8 max 32767 min -32768
int8 max 2147483647 min -2147483648
int8 max 9223372036854775807 min -9223372036854775808

View File

@@ -77,3 +77,5 @@ structure value
structure timeStamp
long secondsPastEpoch
int nanoSeconds
Field: totalConstruct 156 totalDestruct 63 totalReferenceCount 93
PVField: totalConstruct 55 totalDestruct 55

View File

@@ -77,3 +77,5 @@ structure value
structure timeStamp
long secondsPastEpoch
int nanoSeconds
Field: totalConstruct 156 totalDestruct 63 totalReferenceCount 93
PVField: totalConstruct 55 totalDestruct 55