fixes data type numbering

This commit is contained in:
Eyck Jentzsch 2023-02-24 07:59:17 +01:00
parent ceaf52bfa1
commit 23a2f8d6c8
3 changed files with 53 additions and 52 deletions

View File

@ -243,29 +243,31 @@ public class FtrDbLoader implements IWaveformDbLoader {
assert(sz==3); assert(sz==3);
long name_id = cborDecoder.readInt(); long name_id = cborDecoder.readInt();
long type_id = cborDecoder.readInt(); long type_id = cborDecoder.readInt();
DataType type = DataType.values()[(int)type_id];
String attrName = strDict.get((int)name_id); String attrName = strDict.get((int)name_id);
TxAttributeType attrType = getOrAddAttributeType(tag, type_id, attrName); TxAttributeType attrType = getOrAddAttributeType(tag, type, attrName);
switch((int)type_id) { switch(type) {
case 0: // BOOLEAN case BOOLEAN:
ITxAttribute b = new TxAttribute(attrType, cborDecoder.readBoolean()?"True":"False"); ITxAttribute b = new TxAttribute(attrType, cborDecoder.readBoolean()?"True":"False");
ret.add(b); ret.add(b);
break; break;
case 2: // INTEGER case INTEGER:
case 3: // UNSIGNED case UNSIGNED:
case 10: // POINTER case POINTER:
case TIME:
ITxAttribute a = new TxAttribute(attrType, String.valueOf(cborDecoder.readInt())); ITxAttribute a = new TxAttribute(attrType, String.valueOf(cborDecoder.readInt()));
ret.add(a); ret.add(a);
break; break;
case 4: // FLOATING_POINT_NUMBER case FLOATING_POINT_NUMBER:
case 7: // FIXED_POINT_INTEGER case FIXED_POINT_INTEGER:
case 8: // UNSIGNED_FIXED_POINT_INTEGER case UNSIGNED_FIXED_POINT_INTEGER:
ITxAttribute v = new TxAttribute(attrType, String.valueOf(cborDecoder.readFloat())); ITxAttribute v = new TxAttribute(attrType, String.valueOf(cborDecoder.readFloat()));
ret.add(v); ret.add(v);
break; break;
case 1: // ENUMERATION case ENUMERATION:
case 5: // BIT_VECTOR case BIT_VECTOR:
case 6: // LOGIC_VECTOR case LOGIC_VECTOR:
case 12: // STRING case STRING:
ITxAttribute s = new TxAttribute(attrType, strDict.get((int)cborDecoder.readInt())); ITxAttribute s = new TxAttribute(attrType, strDict.get((int)cborDecoder.readInt()));
ret.add(s); ret.add(s);
break; break;
@ -281,9 +283,9 @@ public class FtrDbLoader implements IWaveformDbLoader {
return ret; return ret;
} }
private synchronized TxAttributeType getOrAddAttributeType(long tag, long type_id, String attrName) { private synchronized TxAttributeType getOrAddAttributeType(long tag, DataType type, String attrName) {
if(!attributeTypes.containsKey(attrName)) { if(!attributeTypes.containsKey(attrName)) {
attributeTypes.put(attrName, new TxAttributeType(attrName, DataType.values()[(int)type_id], AssociationType.values()[(int)tag-7])); attributeTypes.put(attrName, new TxAttributeType(attrName, type, AssociationType.values()[(int)tag-7]));
} }
TxAttributeType attrType = attributeTypes.get(attrName); TxAttributeType attrType = attributeTypes.get(attrName);
return attrType; return attrType;
@ -495,15 +497,19 @@ public class FtrDbLoader implements IWaveformDbLoader {
long sz = cborDecoder.readArrayLength(); long sz = cborDecoder.readArrayLength();
assert(sz==3); assert(sz==3);
cborDecoder.readInt(); cborDecoder.readInt();
switch((int)cborDecoder.readInt()) { long type_id = cborDecoder.readInt();
case 0: // BOOLEAN switch(DataType.values()[(int)type_id]) {
case BOOLEAN:
cborDecoder.readBoolean(); cborDecoder.readBoolean();
break; break;
case 4: // FLOATING_POINT_NUMBER case FLOATING_POINT_NUMBER: // FLOATING_POINT_NUMBER
case 7: // FIXED_POINT_INTEGER case FIXED_POINT_INTEGER: // FIXED_POINT_INTEGER
case 8: // UNSIGNED_FIXED_POINT_INTEGER case UNSIGNED_FIXED_POINT_INTEGER: // UNSIGNED_FIXED_POINT_INTEGER
cborDecoder.readFloat(); cborDecoder.readFloat();
break; break;
case NONE: // UNSIGNED_FIXED_POINT_INTEGER
LOG.warn("Unsupported data type: "+type_id);
break;
default: default:
cborDecoder.readInt(); cborDecoder.readInt();
} }

View File

@ -32,7 +32,18 @@ public class TxAttribute implements ITxAttribute{
@Override @Override
public DataType getDataType() { public DataType getDataType() {
return DataType.values()[scvAttribute.getData_type()]; int dt = scvAttribute.getData_type();
switch(dt) {
case 12:
return DataType.STRING;
case 10:
return DataType.POINTER;
default:
if(dt<9)
return DataType.values()[dt];
else
return DataType.NONE;
}
} }
@Override @Override

View File

@ -14,46 +14,30 @@ package com.minres.scviewer.database;
* The Enum DataType. * The Enum DataType.
*/ */
public enum DataType { public enum DataType {
/** The boolean. */ /** The boolean. */
BOOLEAN, BOOLEAN, // bool
/** The enumeration. */ /** The enumeration. */
// bool ENUMERATION, // enum
ENUMERATION,
/** The integer. */ /** The integer. */
// enum INTEGER, // char, short, int, long, long long, sc_int, sc_bigint
INTEGER,
/** The unsigned. */ /** The unsigned. */
// char, short, int, long, long long, sc_int, sc_bigint UNSIGNED, // unsigned { char, short, int, long, long long }, sc_uint, sc_biguint
UNSIGNED, // unsigned { char, short, int, long, long long }, sc_uint,
/** The floating point number. */ /** The floating point number. */
// sc_biguint FLOATING_POINT_NUMBER, // float, double
FLOATING_POINT_NUMBER,
/** The bit vector. */ /** The bit vector. */
// float, double BIT_VECTOR, // sc_bit, sc_bv
BIT_VECTOR,
/** The logic vector. */ /** The logic vector. */
// sc_bit, sc_bv LOGIC_VECTOR, // sc_logic, sc_lv
LOGIC_VECTOR,
/** The fixed point integer. */ /** The fixed point integer. */
// sc_logic, sc_lv FIXED_POINT_INTEGER, // sc_fixed
FIXED_POINT_INTEGER,
/** The unsigned fixed point integer. */ /** The unsigned fixed point integer. */
// sc_fixed UNSIGNED_FIXED_POINT_INTEGER, // sc_ufixed
UNSIGNED_FIXED_POINT_INTEGER,
/** The record. */
// sc_ufixed
RECORD,
/** The pointer. */ /** The pointer. */
// struct/class POINTER, // T*
POINTER,
/** The array. */
// T*
ARRAY,
/** The string. */ /** The string. */
// string, std::string STRING, // string, std::string
STRING,
/** The time. */ /** The time. */
// sc_time TIME, // sc_time
TIME /** The void type. */
NONE
} }