PVScalarPtr PVDataCreate::createPVScalar(PVScalarPtr const & scalarToClone)
{
     ScalarType scalarType = scalarToClone->getScalar()->getScalarType();
     PVScalarPtr pvScalar = createPVScalar(scalarType);
     pvScalar->copyUnchecked(*scalarToClone);
     return pvScalar;
}
double PvaClientPutData::getDouble()
{
    PVScalarPtr pvScalar = getScalarValue();
    ScalarType scalarType = pvScalar->getScalar()->getScalarType();
    if(scalarType==pvDouble) {
        PVDoublePtr pvDouble = static_pointer_cast<PVDouble>(pvScalar);
        return pvDouble->get();
    }
    if(!ScalarTypeFunc::isNumeric(scalarType)) {
        throw std::runtime_error(messagePrefix  + notCompatibleScalar);
    }
    return convert->toDouble(pvScalar);
}
double PvaClientData::getDouble()
{
    if(PvaClient::getDebug()) cout << "PvaClientData::getDouble\n";
    PVScalarPtr pvScalar;
    PVStructurePtr pvStructure = getPVStructure();
    PVFieldPtr pvValue  = pvStructure->getSubField("value");
    if(pvValue) {
        Type type = pvValue->getField()->getType();
        if(type==scalar) pvScalar = static_pointer_cast<PVScalar>(pvValue);
    }
    if(!pvScalar) {
        while(true) {
             const PVFieldPtrArray fieldPtrArray(pvStructure->getPVFields());
             if(fieldPtrArray.size()!=1) {
                  throw std::logic_error(
                      "PvaClientData::getDouble() pvRequest for multiple fields");
             }
             PVFieldPtr pvField(fieldPtrArray[0]);
             Type type = pvField->getField()->getType();
             if(type==scalar) {
                 pvScalar = static_pointer_cast<PVScalar>(pvField);
                 break;
             }
             if(pvField->getField()->getType()!=epics::pvData::structure) break;
             pvStructure = static_pointer_cast<PVStructure>(pvField);
        }
    }
    if(!pvScalar) {
        throw std::logic_error(
            "PvaClientData::getDouble() did not find a scalar field");
    }
    ScalarType scalarType = pvScalar->getScalar()->getScalarType();
    if(scalarType==pvDouble) {
        PVDoublePtr pvDouble = static_pointer_cast<PVDouble>(pvScalar);
        return pvDouble->get();
    }
    if(!ScalarTypeFunc::isNumeric(scalarType)) {
        throw std::logic_error(
            "PvaClientData::getDouble() did not find a numeric scalar field");
    }
    return convert->toDouble(pvScalar);
}
Beispiel #4
0
static void testPVScalar(
    string const & valueNameMaster,
    string const & valueNameCopy,
    PVStructurePtr const & pvMaster,
    PVCopyPtr const & pvCopy)
{
    PVStructurePtr pvStructureCopy;
    PVScalarPtr pvValueMaster;
    PVScalarPtr pvValueCopy;
    BitSetPtr bitSet;
    size_t offset;
    ConvertPtr convert = getConvert();

    pvValueMaster = pvMaster->getSubField<PVScalar>(valueNameMaster);
    convert->fromDouble(pvValueMaster,.04);
    StructureConstPtr structure = pvCopy->getStructure();
    if(debug) { cout << "structure from copy" << endl << *structure << endl; }
    pvStructureCopy = pvCopy->createPVStructure();
    pvValueCopy = pvStructureCopy->getSubField<PVScalar>(valueNameCopy);
    bitSet = BitSetPtr(new BitSet(pvStructureCopy->getNumberFields()));
    pvCopy->initCopy(pvStructureCopy, bitSet);
    if(debug) { cout << "after initCopy pvValueCopy " << convert->toDouble(pvValueCopy); }
    if(debug) { cout << endl; }
    convert->fromDouble(pvValueMaster,.06);
    testOk1(convert->toDouble(pvValueCopy)==.04);
    pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
    testOk1(convert->toDouble(pvValueCopy)==.06);
    testOk1(bitSet->get(pvValueCopy->getFieldOffset()));
    if(debug) { cout << "after put(.06) pvValueCopy " << convert->toDouble(pvValueCopy); }
    if(debug) { cout << " bitSet " << *bitSet; }
    if(debug) { cout << endl; }
    offset = pvCopy->getCopyOffset(pvValueMaster);
    if(debug) { cout << "getCopyOffset() " << offset; }
    if(debug) { cout << " pvValueCopy->getOffset() " << pvValueCopy->getFieldOffset(); }
    if(debug) { cout << " pvValueMaster->getOffset() " << pvValueMaster->getFieldOffset(); }
    if(debug) { cout << " bitSet " << *bitSet; }
    if(debug) { cout << endl; }
    bitSet->clear();
    convert->fromDouble(pvValueMaster,1.0);
    if(debug) { cout << "before updateCopyFromBitSet"; }
    if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); }
    if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); }
    if(debug) { cout << " bitSet " << *bitSet; }
    if(debug) { cout << endl; }
    bitSet->set(0);
    testOk1(convert->toDouble(pvValueCopy)==0.06);
    pvCopy->updateCopyFromBitSet(pvStructureCopy,bitSet);
    testOk1(convert->toDouble(pvValueCopy)==1.0);
    if(debug) { cout << "after updateCopyFromBitSet"; }
    if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); }
    if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); }
    if(debug) { cout << " bitSet " << *bitSet; }
    if(debug) { cout << endl; }
    convert->fromDouble(pvValueCopy,2.0);
    bitSet->set(0);
    if(debug) { cout << "before updateMaster"; }
    if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); }
    if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); }
    if(debug) { cout << " bitSet " << *bitSet; }
    if(debug) { cout << endl; }
    testOk1(convert->toDouble(pvValueMaster)==1.0);
    pvCopy->updateMaster(pvStructureCopy,bitSet);
    testOk1(convert->toDouble(pvValueMaster)==2.0);
    if(debug) { cout << "after updateMaster"; }
    if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); }
    if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); }
    if(debug) { cout << " bitSet " << *bitSet; }
    if(debug) { cout << endl; }
}
static void testPVScalar(
    string const & valueNameRecord,
    string const & valueNameCopy,
    PVRecordPtr const & pvRecord,
    PVCopyPtr const & pvCopy)
{
    PVStructurePtr pvStructureRecord;
    PVStructurePtr pvStructureCopy;
    PVFieldPtr pvField;
    PVScalarPtr pvValueRecord;
    PVScalarPtr pvValueCopy;
    BitSetPtr bitSet;
    size_t offset;
    ConvertPtr convert = getConvert();

    cout << endl;
    pvStructureRecord = pvRecord->getPVRecordStructure()->getPVStructure();
    pvField = pvStructureRecord->getSubField(valueNameRecord);
    pvValueRecord = static_pointer_cast<PVScalar>(pvField);
    convert->fromDouble(pvValueRecord,.04);
    StructureConstPtr structure = pvCopy->getStructure();
    cout << "structure from copy" << endl << *structure << endl;
    pvStructureCopy = pvCopy->createPVStructure();
    pvField = pvStructureCopy->getSubField(valueNameCopy);
    pvValueCopy = static_pointer_cast<PVScalar>(pvField);
    bitSet = BitSetPtr(new BitSet(pvStructureCopy->getNumberFields()));
    pvCopy->initCopy(pvStructureCopy, bitSet);
    cout << "after initCopy pvValueCopy " << convert->toDouble(pvValueCopy);
    cout << endl;
    convert->fromDouble(pvValueRecord,.06);
    pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
    cout << "after put(.06) pvValueCopy " << convert->toDouble(pvValueCopy);
    cout << " bitSet " << *bitSet;
    cout << endl;
    offset = pvCopy->getCopyOffset(pvValueRecord);
    cout << "getCopyOffset() " << offset;
    cout << " pvValueCopy->getOffset() " << pvValueCopy->getFieldOffset();
    cout << " pvValueRecord->getOffset() " << pvValueRecord->getFieldOffset();
    cout << " bitSet " << *bitSet;
    cout << endl;
    bitSet->clear();
    convert->fromDouble(pvValueRecord,1.0);
    cout << "before updateCopyFromBitSet";
    cout << " recordValue " << convert->toDouble(pvValueRecord);
    cout << " copyValue " << convert->toDouble(pvValueCopy);
    cout << " bitSet " << *bitSet;
    cout << endl;
    bitSet->set(0);
    pvCopy->updateCopyFromBitSet(pvStructureCopy,bitSet);
    cout << "after updateCopyFromBitSet";
    cout << " recordValue " << convert->toDouble(pvValueRecord);
    cout << " copyValue " << convert->toDouble(pvValueCopy);
    cout << " bitSet " << *bitSet;
    cout << endl;
    convert->fromDouble(pvValueCopy,2.0);
    bitSet->set(0);
    cout << "before updateMaster";
    cout << " recordValue " << convert->toDouble(pvValueRecord);
    cout << " copyValue " << convert->toDouble(pvValueCopy);
    cout << " bitSet " << *bitSet;
    cout << endl;
    pvCopy->updateMaster(pvStructureCopy,bitSet);
    cout << "after updateMaster";
    cout << " recordValue " << convert->toDouble(pvValueRecord);
    cout << " copyValue " << convert->toDouble(pvValueCopy);
    cout << " bitSet " << *bitSet;
    cout << endl;
}
Beispiel #6
0
void MonitorRequesterImpl::ParseScalar(QString fieldName, PVScalarPtr const & pvs, knobData* kPtr)
{
    QString thisFieldName  = QString::fromStdString(pvs->getFieldName());
    //qDebug() << "ParseScalar -- field/subfield" << fieldName << thisFieldName;
    ScalarConstPtr scalar = pvs->getScalar();
    ScalarType scalarType = scalar->getScalarType();

    switch(scalarType) {
    case pvBoolean: {
        PVBooleanPtr data = static_pointer_cast<PVBoolean>(pvs);

        if(thisFieldName.contains("value")) {
            kPtr->edata.fieldtype = caINT;
            kPtr->edata.ivalue = (int)data->get();
        }
    }
        break;
    case pvByte: {
        PVBytePtr data = static_pointer_cast<PVByte>(pvs);

        if(thisFieldName.contains("value")) {
            kPtr->edata.fieldtype = caCHAR;
            kPtr->edata.ivalue = (int)data->get();
        }
    }
        break;
    case pvShort: {
        PVShortPtr data = static_pointer_cast<PVShort>(pvs);

        if(thisFieldName.contains("value")) {
            kPtr->edata.fieldtype = caINT;
            kPtr->edata.rvalue = data->get();
            kPtr->edata.ivalue = (int)data->get();
        }
    }
        break;
    case pvInt: {
        PVIntPtr data = static_pointer_cast<PVInt>(pvs);

        if(fieldName.contains("alarm") && thisFieldName.contains("severity")) {
            kPtr->edata.severity =(int) data->get();
        } else if(fieldName.contains("alarm") && thisFieldName.contains("status")) {
            kPtr->edata.status =  (int) data->get();


        } if(thisFieldName.contains("value")) {
            kPtr->edata.fieldtype = caINT;
            kPtr->edata.rvalue = data->get();
            kPtr->edata.ivalue = (int)data->get();
        }
    }
        break;
    case pvLong: {
        PVLongPtr data = static_pointer_cast<PVLong>(pvs);

        if(thisFieldName.contains("value")) {
            kPtr->edata.fieldtype = caLONG;
            kPtr->edata.rvalue = data->get();
            kPtr->edata.ivalue = (int64)data->get();
        }
    }
        break;
    case pvFloat: {
        PVFloatPtr data = static_pointer_cast<PVFloat>(pvs);

        if(thisFieldName.contains("value")) {
            kPtr->edata.fieldtype = caFLOAT;
            kPtr->edata.rvalue = data->get();
        }
    }
        break;
    case pvDouble: {
        PVDoublePtr data = static_pointer_cast<PVDouble>(pvs);

        if(fieldName.contains("display") && thisFieldName.contains("limitLow")) {
            kPtr->edata.lower_disp_limit = data->get();
        } else if(fieldName.contains("display") && thisFieldName.contains("limitHigh")) {
            kPtr->edata.upper_disp_limit = data->get();

        } else if(fieldName.contains("control") && thisFieldName.contains("limitLow")) {
            kPtr->edata.lower_ctrl_limit = data->get();
        } else if(fieldName.contains("control") && thisFieldName.contains("limitHigh")) {
            kPtr->edata.upper_ctrl_limit = data->get();

        } else if(fieldName.contains("valueAlarm") && thisFieldName.contains("lowAlarmLimit")) {
            kPtr->edata.lower_alarm_limit = data->get();
        } else if(fieldName.contains("valueAlarm") && thisFieldName.contains("highAlarmLimit")) {
            kPtr->edata.upper_alarm_limit = data->get();

        } else if(fieldName.contains("valueAlarm") && thisFieldName.contains("lowWarningLimit")) {
            kPtr->edata.lower_warning_limit = data->get();
        } else if(fieldName.contains("valueAlarm") && thisFieldName.contains("highWarningLimit")) {
            kPtr->edata.upper_warning_limit = data->get();

            // fill value and type
        } else if(thisFieldName.contains("value")) {
            kPtr->edata.precision = 3;  // for the time beeing, set to 3
            kPtr->edata.fieldtype = caDOUBLE;
            kPtr->edata.rvalue = data->get();
        }
    }
        break;
    case pvString: {
        PVStringPtr data = static_pointer_cast<PVString>(pvs);

        // fill units
        if(fieldName.contains("display") && thisFieldName.contains("units")) {
            strcpy(kPtr->edata.units, data->get().c_str());
        } else if(fieldName.contains("display") && thisFieldName.contains("description")) {
        } else if(fieldName.contains("display") && thisFieldName.contains("format")) {  // should use now precision

            // fill value and type
        } else if(thisFieldName.contains("value")) {
            qDebug() << "String :" << data->get().c_str();
        }
    }
        break;
    default:
        qDebug() << "(unknown ScalarType)" << endl;
    }


}
Beispiel #7
0
static void testPVScalarWithProperties(
    string /*fieldName*/,ScalarType stype)
{
    PVStructurePtr pvStructure;
    bool hasValueAlarm = false;
    bool hasBooleanAlarm = false;
    bool hasDisplayControl = false;
    switch(stype) {
        case pvBoolean: {
             pvStructure = standardPVField->scalar(
                 stype,alarmTimeStampValueAlarm);
             hasBooleanAlarm = true;
             PVBooleanPtr pvField = pvStructure->getSubField<PVBoolean>("value");
             pvField->put(true);
             break;
        }
        case pvByte: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVBytePtr pvField = pvStructure->getSubField<PVByte>("value");
             pvField->put(127);
             break;
        }
        case pvShort: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVShortPtr pvField = pvStructure->getSubField<PVShort>("value");
             pvField->put(32767);
             break;
        }
        case pvInt: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVIntPtr pvField = pvStructure->getSubField<PVInt>("value");
             pvField->put((int32)0x80000000);
             break;
        }
        case pvLong: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVLongPtr pvField = pvStructure->getSubField<PVLong>("value");
             int64 value = 0x80000000;
             value <<= 32;
             value |= 0xffffffff;
             pvField->put(value);
             break;
        }
        case pvUByte: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVUBytePtr pvField = pvStructure->getSubField<PVUByte>("value");
             pvField->put(255);
             break;
        }
        case pvUShort: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVUShortPtr pvField = pvStructure->getSubField<PVUShort>("value");
             pvField->put(65535);
             break;
        }
        case pvUInt: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVUIntPtr pvField = pvStructure->getSubField<PVUInt>("value");
             pvField->put((uint32)0x80000000);
             break;
        }
        case pvULong: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVULongPtr pvField = pvStructure->getSubField<PVULong>("value");
             int64 value = 0x80000000;
             value <<= 32;
             value |= 0xffffffff;
             pvField->put(value);
             break;
        }
        case pvFloat: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVFloatPtr pvField = pvStructure->getSubField<PVFloat>("value");
             pvField->put(1.123e8);
             break;
        }
        case pvDouble: {
             pvStructure = standardPVField->scalar(
                 stype,allProperties);
             hasValueAlarm = true;
             hasDisplayControl = true;
             PVDoublePtr pvField = pvStructure->getSubField<PVDouble>("value");
             pvField->put(1.123e35);
             break;
        }
        case pvString: {
             pvStructure = standardPVField->scalar(
                 stype,alarmTimeStamp);
             PVStringPtr pvField = pvStructure->getSubField<PVString>("value");
             pvField->put(string("this is a string"));
             break;
        }
    }
    PVLongPtr seconds = pvStructure->getSubField<PVLong>(
        string("timeStamp.secondsPastEpoch"));
    testOk1(seconds.get()!=0);
    seconds->put(123456789);
    PVIntPtr nano = pvStructure->getSubField<PVInt>(string("timeStamp.nanoseconds"));
    testOk1(nano.get()!=0);
    nano->put(1000000);
    PVIntPtr severity = pvStructure->getSubField<PVInt>(string("alarm.severity"));
    testOk1(severity.get()!=0);
    severity->put(2);
    PVStringPtr message = pvStructure->getSubField<PVString>(string("alarm.message"));
    testOk1(message.get()!=0);
    message->put(string("messageForAlarm"));
    if(hasDisplayControl) {
        PVStringPtr desc = pvStructure->getSubField<PVString>(
            string("display.description"));
        testOk1(desc.get()!=0);
        desc->put(string("this is a description"));
        PVStringPtr format = pvStructure->getSubField<PVString>(
            string("display.format"));
        testOk1(format.get()!=0);
        format->put(string("f10.2"));
        PVStringPtr units = pvStructure->getSubField<PVString>(
            string("display.units"));
        testOk1(units.get()!=0);
        units->put(string("SomeUnits"));
        PVDoublePtr limit = pvStructure->getSubField<PVDouble>(
            string("display.limitLow"));
        testOk1(limit.get()!=0);
        limit->put(0.0);
        limit = pvStructure->getSubField<PVDouble>(
            string("display.limitHigh"));
        testOk1(limit.get()!=0);
        limit->put(10.0);
        limit = pvStructure->getSubField<PVDouble>(
            string("control.limitLow"));
        testOk1(limit.get()!=0);
        limit->put(1.0);
        limit = pvStructure->getSubField<PVDouble>(
            string("control.limitHigh"));
        testOk1(limit.get()!=0);
        limit->put(9.0);
    }
    if(hasValueAlarm) {
        PVBooleanPtr pvBoolean = pvStructure->getSubField<PVBoolean>("valueAlarm.active");
        pvBoolean->put(true);
        PVScalarPtr pvtemp = pvStructure->getSubField<PVScalar>("valueAlarm.lowAlarmLimit");
        testOk1(pvtemp.get()!=0);
        convert->fromDouble(pvtemp,1.0);
        pvtemp = pvStructure->getSubField<PVScalar>("valueAlarm.highAlarmLimit");
        testOk1(pvtemp.get()!=0);
        convert->fromDouble(pvtemp,9.0);
        severity = pvStructure->getSubField<PVInt>(
            string("valueAlarm.lowAlarmSeverity"));
        testOk1(severity.get()!=0);
        severity->put(2);
        severity = pvStructure->getSubField<PVInt>(
            string("valueAlarm.highAlarmSeverity"));
        testOk1(severity.get()!=0);
        severity->put(2);
        PVBooleanPtr active = pvStructure->getSubField<PVBoolean>(
            string("valueAlarm.active"));
        testOk1(active.get()!=0);
        active->put(true);
    }
    if(hasBooleanAlarm) {
        PVBooleanPtr pvBoolean = pvStructure->getSubField<PVBoolean>("valueAlarm.active");
        pvBoolean->put(true);
        severity = pvStructure->getSubField<PVInt>(
            string("valueAlarm.falseSeverity"));
        testOk1(severity.get()!=0);
        severity->put(0);
        severity = pvStructure->getSubField<PVInt>(
            string("valueAlarm.trueSeverity"));
        testOk1(severity.get()!=0);
        severity->put(2);
        severity = pvStructure->getSubField<PVInt>(
            string("valueAlarm.changeStateSeverity"));
        testOk1(severity.get()!=0);
        severity->put(1);
    }
}
Beispiel #8
0
static void testConvertScalar(FILE *fd) {
    PVScalarPtr pvBytePtr = pvDataCreate->createPVScalar(pvByte);
    PVScalarPtr pvUBytePtr = pvDataCreate->createPVScalar(pvUByte);
    PVScalarPtr pvShortPtr = pvDataCreate->createPVScalar(pvShort);
    PVScalarPtr pvUShortPtr = pvDataCreate->createPVScalar(pvUShort);
    PVScalarPtr pvIntPtr = pvDataCreate->createPVScalar(pvInt);
    PVScalarPtr pvUIntPtr = pvDataCreate->createPVScalar(pvUInt);
    PVScalarPtr pvLongPtr = pvDataCreate->createPVScalar(pvLong);
    PVScalarPtr pvULongPtr = pvDataCreate->createPVScalar(pvULong);
    PVScalarPtr pvFloatPtr = pvDataCreate->createPVScalar(pvFloat);
    PVScalarPtr pvDoublePtr = pvDataCreate->createPVScalar(pvDouble);

    fprintf(fd,"testConvertScalar\n");
    if(debug) fprintf(fd,"\nfromByte\n");
    int8 bval = 127;
    for(int i=0; i<3; i++) {
        convert->fromByte(pvBytePtr, bval);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromByte(pvUBytePtr, bval);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromByte(pvShortPtr, bval);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromByte(pvUShortPtr, bval);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromByte(pvIntPtr, bval);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromByte(pvUIntPtr, bval);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromByte(pvLongPtr, bval);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromByte(pvULongPtr, bval);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromByte(pvFloatPtr, bval);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromByte(pvDoublePtr, bval);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvUBytePtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvUBytePtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        bval++;
    }
    fprintf(fd,"fromByte PASSED\n");

    if(debug) fprintf(fd,"\nfromShort\n");
    int16 sval = 0x7fff;
    for(int i=0; i<3; i++) {
        convert->fromShort(pvBytePtr, sval);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromShort(pvUBytePtr, sval);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromShort(pvShortPtr, sval);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromShort(pvUShortPtr, sval);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromShort(pvIntPtr, sval);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromShort(pvUIntPtr, sval);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromShort(pvLongPtr, sval);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromShort(pvULongPtr, sval);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromShort(pvFloatPtr, sval);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromShort(pvDoublePtr, sval);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvUShortPtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvUShortPtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        sval++;
    }
    fprintf(fd,"fromShort PASSED\n");

    if(debug) fprintf(fd,"\nfromInt\n");
    int32 ival = 0x7fffffff;
    for(int i=0; i<3; i++) {
        convert->fromInt(pvBytePtr, ival);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromInt(pvUBytePtr, ival);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromInt(pvShortPtr, ival);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromInt(pvUShortPtr, ival);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromInt(pvIntPtr, ival);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromInt(pvUIntPtr, ival);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromInt(pvLongPtr, ival);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromInt(pvULongPtr, ival);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromInt(pvFloatPtr, ival);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromInt(pvDoublePtr, ival);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvUIntPtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvUIntPtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        ival++;
    }
    fprintf(fd,"fromInt PASSED\n");

    if(debug) fprintf(fd,"\nfromLong\n");
    int64 lval = 0x7fffffffffffffffLL;
    for(int i=0; i<3; i++) {
        convert->fromLong(pvBytePtr, lval);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromLong(pvUBytePtr, lval);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromLong(pvShortPtr, lval);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromLong(pvUShortPtr, lval);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromLong(pvIntPtr, lval);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromLong(pvUIntPtr, lval);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromLong(pvLongPtr, lval);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromLong(pvULongPtr, lval);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromLong(pvFloatPtr, lval);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromLong(pvDoublePtr, lval);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvULongPtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvULongPtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        lval++;
    }
    fprintf(fd,"fromLong PASSED\n");

    if(debug) fprintf(fd,"\nfromUByte\n");
    uint8 ubval = 127;
    for(int i=0; i<3; i++) {
        convert->fromUByte(pvBytePtr, ubval);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromUByte(pvUBytePtr, ubval);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromUByte(pvShortPtr, ubval);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromUByte(pvUShortPtr, ubval);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromUByte(pvIntPtr, ubval);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromUByte(pvUIntPtr, ubval);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromUByte(pvLongPtr, ubval);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromUByte(pvULongPtr, ubval);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromUByte(pvFloatPtr, ubval);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromUByte(pvDoublePtr, ubval);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvUBytePtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvUBytePtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        ubval++;
    }
    fprintf(fd,"fromUByte PASSED\n");

    if(debug) fprintf(fd,"\nfromUShort\n");
    uint16 usval = 0x7fff;
    for(int i=0; i<3; i++) {
        convert->fromUShort(pvBytePtr, usval);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromUShort(pvUBytePtr, usval);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromUShort(pvShortPtr, usval);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromUShort(pvUShortPtr, usval);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromUShort(pvIntPtr, usval);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromUShort(pvUIntPtr, usval);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromUShort(pvLongPtr, usval);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromUShort(pvULongPtr, usval);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromUShort(pvFloatPtr, usval);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromUShort(pvDoublePtr, usval);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvUShortPtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvUShortPtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        usval++;
    }
    fprintf(fd,"fromUShort PASSED\n");

    if(debug) fprintf(fd,"\nfromUInt\n");
    uint32 uival = 0x7fffffff;
    for(int i=0; i<3; i++) {
        convert->fromUInt(pvBytePtr, uival);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromUInt(pvUBytePtr, uival);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromUInt(pvShortPtr, uival);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromUInt(pvUShortPtr, uival);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromUInt(pvIntPtr, uival);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromUInt(pvUIntPtr, uival);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromUInt(pvLongPtr, uival);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromUInt(pvULongPtr, uival);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromUInt(pvFloatPtr, uival);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromUInt(pvDoublePtr, uival);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvUIntPtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvUIntPtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        uival++;
    }
    fprintf(fd,"fromUInt PASSED\n");

    if(debug) fprintf(fd,"\nfromULong\n");
    uint64 ulval = 0x7fffffffffffffffLL;
    for(int i=0; i<3; i++) {
        convert->fromULong(pvBytePtr, ulval);
        builder.clear(); pvBytePtr->toString(&builder);
        if(debug) fprintf(fd,"byte %s\n",builder.c_str());
        convert->fromULong(pvUBytePtr, ulval);
        builder.clear(); pvUBytePtr->toString(&builder);
        if(debug) fprintf(fd,"ubyte %s\n",builder.c_str());
        convert->fromULong(pvShortPtr, ulval);
        builder.clear(); pvShortPtr->toString(&builder);
        if(debug) fprintf(fd,"short %s\n",builder.c_str());
        convert->fromULong(pvUShortPtr, ulval);
        builder.clear(); pvUShortPtr->toString(&builder);
        if(debug) fprintf(fd,"ushort %s\n",builder.c_str());
        convert->fromULong(pvIntPtr, ulval);
        builder.clear(); pvIntPtr->toString(&builder);
        if(debug) fprintf(fd,"int %s\n",builder.c_str());
        convert->fromULong(pvUIntPtr, ulval);
        builder.clear(); pvUIntPtr->toString(&builder);
        if(debug) fprintf(fd,"uint %s\n",builder.c_str());
        convert->fromULong(pvLongPtr, ulval);
        builder.clear(); pvLongPtr->toString(&builder);
        if(debug) fprintf(fd,"long %s\n",builder.c_str());
        convert->fromULong(pvULongPtr, ulval);
        builder.clear(); pvULongPtr->toString(&builder);
        if(debug) fprintf(fd,"ulong %s\n",builder.c_str());
        convert->fromULong(pvFloatPtr, ulval);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float %s\n",builder.c_str());
        convert->fromULong(pvDoublePtr, ulval);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double %s\n",builder.c_str());
        convert->copyScalar(pvULongPtr, pvFloatPtr);
        builder.clear(); pvFloatPtr->toString(&builder);
        if(debug) fprintf(fd,"float from unsigned %s\n",builder.c_str());
        convert->copyScalar(pvULongPtr, pvDoublePtr);
        builder.clear(); pvDoublePtr->toString(&builder);
        if(debug) fprintf(fd,"double from unsigned %s\n",builder.c_str());
        ulval++;
    }
    fprintf(fd,"fromULong PASSED\n");
}