/* testPVScalarArray.cpp */ /** * Copyright - See the COPYRIGHT that is included with this distribution. * EPICS pvData is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. */ /* Author: Marty Kraimer Date: 2010.11 */ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace epics::pvData; using std::tr1::static_pointer_cast; static bool debug = false; static FieldCreatePtr fieldCreate = getFieldCreate(); static PVDataCreatePtr pvDataCreate = getPVDataCreate(); static StandardFieldPtr standardField = getStandardField(); static StandardPVFieldPtr standardPVField = getStandardPVField(); static ConvertPtr convert = getConvert(); static String builder; static String alarmTimeStamp("alarm,timeStamp"); static String alarmTimeStampValueAlarm("alarm,timeStamp,valueAlarm"); static String allProperties("alarm,timeStamp,display,control,valueAlarm"); static FILE * fd = NULL; static size_t length = 4; static void byteArray() { if(debug) fprintf(fd,"\nbyteArray\n"); PVScalarArrayPtr pvScalarArray = pvDataCreate->createPVScalarArray(pvByte);; PVByteArrayPtr pvByteArray = static_pointer_cast(pvScalarArray); ByteArray value; value.reserve(length); int8 xxx = 0x7f; for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvByteArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromByteArray(pvScalarArray,0,length,value,0); builder.clear(); pvByteArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); ByteArrayData data; pvByteArray->get(0,length,data); ByteArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { if(debug) fprintf(fd,"%d ",*iter); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); int8 * pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvUByte);; PVUByteArrayPtr pvUByteArray = static_pointer_cast(pvScalarArray); UByteArray value; value.reserve(length); uint8 xxx = 0x7f; for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvUByteArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromUByteArray(pvScalarArray,0,length,value,0); builder.clear(); pvUByteArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); UByteArrayData data; pvUByteArray->get(0,length,data); UByteArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { if(debug) fprintf(fd,"%u ",*iter); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); uint8 * pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvLong);; PVLongArrayPtr pvLongArray = static_pointer_cast(pvScalarArray); LongArray value; value.reserve(length); int64 xxx = 0x7fffffffffffffffL; for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvLongArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromLongArray(pvScalarArray,0,length,value,0); builder.clear(); pvLongArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); LongArrayData data; pvLongArray->get(0,length,data); LongArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { if(debug) fprintf(fd,"%lli ",*iter); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); int64 * pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvULong);; PVULongArrayPtr pvULongArray = static_pointer_cast(pvScalarArray); ULongArray value; value.reserve(length); uint64 xxx = 0x7fffffffffffffffL; for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvULongArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromULongArray(pvScalarArray,0,length,value,0); builder.clear(); pvULongArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); ULongArrayData data; pvULongArray->get(0,length,data); ULongArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { if(debug) fprintf(fd,"%llu ",*iter); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); uint64 * pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvFloat);; PVFloatArrayPtr pvFloatArray = static_pointer_cast(pvScalarArray); FloatArray value; value.reserve(length); for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvFloatArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromFloatArray(pvScalarArray,0,length,value,0); builder.clear(); pvFloatArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); FloatArrayData data; pvFloatArray->get(0,length,data); FloatArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { if(debug) fprintf(fd,"%f ",*iter); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); float * pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvDouble);; PVDoubleArrayPtr pvDoubleArray = static_pointer_cast(pvScalarArray); DoubleArray value; value.reserve(length); for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvDoubleArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromDoubleArray(pvScalarArray,0,length,value,0); builder.clear(); pvDoubleArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); DoubleArrayData data; pvDoubleArray->get(0,length,data); DoubleArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { if(debug) fprintf(fd,"%lf ",*iter); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); double * pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvString);; PVStringArrayPtr pvStringArray = static_pointer_cast(pvScalarArray); StringArray value; value.reserve(length); for(size_t i = 0; iput(0,length,value,0); builder.clear(); pvStringArray->toString(&builder); if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); convert->fromStringArray(pvScalarArray,0,length,value,0); builder.clear(); pvStringArray->toString(&builder); if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); StringArrayData data; pvStringArray->get(0,length,data); StringArray_iterator iter = data.data.begin(); if(debug) fprintf(fd,"iter ["); for(iter=data.data.begin();iter!=data.data.end();++iter) { String val = *iter; if(debug) fprintf(fd,"%s ",val.c_str()); } if(debug) fprintf(fd,"]\n"); if(debug) fprintf(fd,"raw ["); String* pdata = get(data.data); for(size_t i=0; icreatePVScalarArray(pvDouble);; PVDoubleArrayPtr pvDoubleArray = static_pointer_cast(pvScalarArray); DoubleArray value; value.reserve(length); for(size_t i = 0; iput(0,length,value,0); PVDoubleArrayPtr pvShareArray = static_pointer_cast( pvDataCreate->createPVScalarArray(pvDouble)); pvShareArray->shareData( pvDoubleArray->getSharedVector(), pvDoubleArray->getCapacity(), pvDoubleArray->getLength()); printf("pvDoubleArray->get() %p pvShareArray->get() %p\n",pvDoubleArray->get(),pvShareArray->get()); printf("pvDoubleArray->getVector() %p pvShareArray->getVector() %p\n", &(pvDoubleArray->getVector()),&(pvShareArray->getVector())); printf("pvDoubleArray->getSharedVector() %p pvShareArray->getSharedVector() %p\n", &(pvDoubleArray->getSharedVector()),&(pvShareArray->getSharedVector())); assert(pvDoubleArray->get()==pvShareArray->get()); builder.clear(); pvShareArray->toString(&builder); if(debug) fprintf(fd,"pvShare\n%s\n",builder.c_str()); fprintf(fd,"shareArray PASSED\n"); } int main(int argc,char *argv[]) { char *fileName = 0; if(argc>1) fileName = argv[1]; fd = stdout; if(fileName!=0 && fileName[0]!=0) { fd = fopen(fileName,"w+"); } byteArray(); ubyteArray(); longArray(); ulongArray(); floatArray(); doubleArray(); stringArray(); shareArray(); return(0); }