diff --git a/pvDataApp/factory/AbstractPVField.h b/pvDataApp/factory/AbstractPVField.h index 984c673..c30e5a0 100644 --- a/pvDataApp/factory/AbstractPVField.h +++ b/pvDataApp/factory/AbstractPVField.h @@ -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; } diff --git a/pvDataApp/factory/BasePVBooleanArray.h b/pvDataApp/factory/BasePVBooleanArray.h index 8b201d2..306f837 100644 --- a/pvDataApp/factory/BasePVBooleanArray.h +++ b/pvDataApp/factory/BasePVBooleanArray.h @@ -5,7 +5,6 @@ #include #include #include -#include #include "pvData.h" #include "factory.h" #include "AbstractPVScalarArray.h" diff --git a/pvDataApp/factory/BasePVByte.h b/pvDataApp/factory/BasePVByte.h index dd3bf7c..1c9ab6e 100644 --- a/pvDataApp/factory/BasePVByte.h +++ b/pvDataApp/factory/BasePVByte.h @@ -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) diff --git a/pvDataApp/factory/BasePVByteArray.h b/pvDataApp/factory/BasePVByteArray.h index 1b8c611..a86c8ee 100644 --- a/pvDataApp/factory/BasePVByteArray.h +++ b/pvDataApp/factory/BasePVByteArray.h @@ -5,7 +5,6 @@ #include #include #include -#include #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 #include #include -#include #include "pvData.h" #include "factory.h" #include "AbstractPVScalarArray.h" diff --git a/pvDataApp/factory/BasePVFloatArray.h b/pvDataApp/factory/BasePVFloatArray.h index 0e38a5f..3c8fbc2 100644 --- a/pvDataApp/factory/BasePVFloatArray.h +++ b/pvDataApp/factory/BasePVFloatArray.h @@ -5,7 +5,6 @@ #include #include #include -#include #include "pvData.h" #include "factory.h" #include "AbstractPVScalarArray.h" diff --git a/pvDataApp/factory/BasePVInt.h b/pvDataApp/factory/BasePVInt.h index a68465e..be8207f 100644 --- a/pvDataApp/factory/BasePVInt.h +++ b/pvDataApp/factory/BasePVInt.h @@ -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) diff --git a/pvDataApp/factory/BasePVIntArray.h b/pvDataApp/factory/BasePVIntArray.h index aa97aa2..e2b83ff 100644 --- a/pvDataApp/factory/BasePVIntArray.h +++ b/pvDataApp/factory/BasePVIntArray.h @@ -5,7 +5,6 @@ #include #include #include -#include #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 #include #include -#include #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 #include #include -#include #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 #include #include -#include #include "pvData.h" #include "factory.h" #include "AbstractPVScalarArray.h" diff --git a/pvDataApp/factory/Convert.cpp b/pvDataApp/factory/Convert.cpp index 20bbf19..8828135 100644 --- a/pvDataApp/factory/Convert.cpp +++ b/pvDataApp/factory/Convert.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #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; diff --git a/pvDataApp/factory/FieldCreateFactory.cpp b/pvDataApp/factory/FieldCreateFactory.cpp index 11c9d44..572b3fe 100644 --- a/pvDataApp/factory/FieldCreateFactory.cpp +++ b/pvDataApp/factory/FieldCreateFactory.cpp @@ -16,133 +16,132 @@ namespace epics { namespace pvData { for(int i=0; ifieldName.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; idecReferenceCount(); @@ -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; igetFieldName()); @@ -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; igetFieldName()); @@ -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; iincReferenceCount(); - } - - 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; } }} diff --git a/pvDataApp/factory/PVDataCreateFactory.cpp b/pvDataApp/factory/PVDataCreateFactory.cpp index 2f15f57..7073a2b 100644 --- a/pvDataApp/factory/PVDataCreateFactory.cpp +++ b/pvDataApp/factory/PVDataCreateFactory.cpp @@ -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(); } diff --git a/pvDataApp/factory/StandardField.cpp b/pvDataApp/factory/StandardField.cpp index 1af2372..23b6951 100644 --- a/pvDataApp/factory/StandardField.cpp +++ b/pvDataApp/factory/StandardField.cpp @@ -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; } diff --git a/pvDataApp/factory/TypeFunc.cpp b/pvDataApp/factory/TypeFunc.cpp index 7e6e100..d778390 100644 --- a/pvDataApp/factory/TypeFunc.cpp +++ b/pvDataApp/factory/TypeFunc.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include "pvIntrospect.h" diff --git a/pvDataApp/pv/convert.h b/pvDataApp/pv/convert.h index 512c917..65f6878 100644 --- a/pvDataApp/pv/convert.h +++ b/pvDataApp/pv/convert.h @@ -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, diff --git a/pvDataApp/pv/pvData.h b/pvDataApp/pv/pvData.h index 09ce502..f3fd8bc 100644 --- a/pvDataApp/pv/pvData.h +++ b/pvDataApp/pv/pvData.h @@ -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(); diff --git a/pvDataApp/pv/pvIntrospect.h b/pvDataApp/pv/pvIntrospect.h index 1a00789..3806317 100644 --- a/pvDataApp/pv/pvIntrospect.h +++ b/pvDataApp/pv/pvIntrospect.h @@ -1,11 +1,16 @@ /* pvIntrospect.h */ #include #include -#include #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(); diff --git a/pvDataApp/pv/standardField.h b/pvDataApp/pv/standardField.h index 777e625..4d26323 100644 --- a/pvDataApp/pv/standardField.h +++ b/pvDataApp/pv/standardField.h @@ -53,6 +53,8 @@ namespace epics { namespace pvData { StructureConstPtr floatAlarm(); StructureConstPtr doubleAlarm(); StructureConstPtr enumeratedAlarm(); + private: + void init(); }; extern StandardField * getStandardField(); diff --git a/pvDataApp/pvTest/Makefile b/pvDataApp/pvTest/Makefile index 2d1e60c..36b4285 100644 --- a/pvDataApp/pvTest/Makefile +++ b/pvDataApp/pvTest/Makefile @@ -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 diff --git a/pvDataApp/pvTest/testIntTypes.cpp b/pvDataApp/pvTest/testIntTypes.cpp new file mode 100644 index 0000000..4682d59 --- /dev/null +++ b/pvDataApp/pvTest/testIntTypes.cpp @@ -0,0 +1,65 @@ +/* testIntrospect.cpp */ +/* Author: Marty Kraimer Date: 2010.09 */ + +#include +#include +#include +#include +#include + +#include + +#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); +} + diff --git a/pvDataApp/pvTest/testIntrospect.cpp b/pvDataApp/pvTest/testIntrospect.cpp index 9277bdd..97c9e2c 100644 --- a/pvDataApp/pvTest/testIntrospect.cpp +++ b/pvDataApp/pvTest/testIntrospect.cpp @@ -1,4 +1,4 @@ -/* testSimpleStructure.cpp */ +/* testIntrospect.cpp */ /* Author: Marty Kraimer Date: 2010.09 */ #include @@ -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); } diff --git a/pvDataApp/pvTest/testSimple.cpp b/pvDataApp/pvTest/testSimple.cpp index 8a81f81..e8d8d50 100644 --- a/pvDataApp/pvTest/testSimple.cpp +++ b/pvDataApp/pvTest/testSimple.cpp @@ -7,6 +7,8 @@ #include #include +#include + #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); } diff --git a/pvDataApp/test/testPVScalar.cpp b/pvDataApp/test/testPVScalar.cpp index 305c337..c76beb4 100644 --- a/pvDataApp/test/testPVScalar.cpp +++ b/pvDataApp/test/testPVScalar.cpp @@ -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); diff --git a/pvDataApp/test/testPVScalarArray.cpp b/pvDataApp/test/testPVScalarArray.cpp index b873527..2477736 100644 --- a/pvDataApp/test/testPVScalarArray.cpp +++ b/pvDataApp/test/testPVScalarArray.cpp @@ -26,7 +26,7 @@ void testBooleanArray() { PVBooleanArray *pvValue = (PVBooleanArray *)pvScalarArray; int length = 5; bool *value = new bool[length]; - for(int i=0; iput(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; iput(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; iput(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; iput(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; iput(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]); diff --git a/test/testAll.pl b/test/testAll.pl new file mode 100755 index 0000000..81d4f9d --- /dev/null +++ b/test/testAll.pl @@ -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"); diff --git a/test/testIntTypes b/test/testIntTypes new file mode 100644 index 0000000..51db51c --- /dev/null +++ b/test/testIntTypes @@ -0,0 +1,4 @@ +int8 max 127 min -128 +int8 max 32767 min -32768 +int8 max 2147483647 min -2147483648 +int8 max 9223372036854775807 min -9223372036854775808 diff --git a/test/testIntTypes.pl b/test/testIntTypes.pl new file mode 100755 index 0000000..ebfefdc --- /dev/null +++ b/test/testIntTypes.pl @@ -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"; +} diff --git a/test/testIntTypesDiff b/test/testIntTypesDiff new file mode 100644 index 0000000..e69de29 diff --git a/test/testIntTypesGold b/test/testIntTypesGold new file mode 100644 index 0000000..51db51c --- /dev/null +++ b/test/testIntTypesGold @@ -0,0 +1,4 @@ +int8 max 127 min -128 +int8 max 32767 min -32768 +int8 max 2147483647 min -2147483648 +int8 max 9223372036854775807 min -9223372036854775808 diff --git a/test/testIntrospect b/test/testIntrospect index 54353ac..d9943be 100644 --- a/test/testIntrospect +++ b/test/testIntrospect @@ -77,3 +77,5 @@ structure value structure timeStamp long secondsPastEpoch int nanoSeconds +Field: totalConstruct 156 totalDestruct 63 totalReferenceCount 93 +PVField: totalConstruct 55 totalDestruct 55 diff --git a/test/testIntrospectGold b/test/testIntrospectGold index 54353ac..d9943be 100644 --- a/test/testIntrospectGold +++ b/test/testIntrospectGold @@ -77,3 +77,5 @@ structure value structure timeStamp long secondsPastEpoch int nanoSeconds +Field: totalConstruct 156 totalDestruct 63 totalReferenceCount 93 +PVField: totalConstruct 55 totalDestruct 55