Skip to content

Commit

Permalink
Use index in VarValue (not type)
Browse files Browse the repository at this point in the history
  • Loading branch information
beckdave committed Jan 16, 2024
1 parent 4de808b commit 5071136
Show file tree
Hide file tree
Showing 13 changed files with 416 additions and 307 deletions.
2 changes: 2 additions & 0 deletions inc/finalmq/metadata/MetaField.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ enum MetaFieldFlags : std::int32_t
METAFLAG_PROTO_ZIGZAG = 2,
METAFLAG_NULLABLE = 4, // only for struct
METAFLAG_ONE_REQUIRED = 8, // only for array of struct
METAFLAG_TYPE = 16, //
METAFLAG_INDEX = 32,
};


Expand Down
38 changes: 5 additions & 33 deletions inc/finalmq/metadataserialize/variant.fmq
Original file line number Diff line number Diff line change
@@ -1,43 +1,14 @@
{
"namespace":"finalmq.variant",
"enums": [
{"type":"VarTypeId","desc":"desc","entries":[
{"name":"T_NONE", "id":0, "desc":"desc", "alias":"none"},
{"name":"T_BOOL", "id":1, "desc":"desc", "alias":"bool"},
{"name":"T_INT8", "id":2, "desc":"desc", "alias":"int8"},
{"name":"T_UINT8", "id":3, "desc":"desc", "alias":"uint8"},
{"name":"T_INT16", "id":4, "desc":"desc", "alias":"int16"},
{"name":"T_UINT16", "id":5, "desc":"desc", "alias":"uint16"},
{"name":"T_INT32", "id":6, "desc":"desc", "alias":"int32"},
{"name":"T_UINT32", "id":7, "desc":"desc", "alias":"uint32"},
{"name":"T_INT64", "id":8, "desc":"desc", "alias":"int64"},
{"name":"T_UINT64", "id":9, "desc":"desc", "alias":"uint64"},
{"name":"T_FLOAT", "id":10, "desc":"desc", "alias":"float"},
{"name":"T_DOUBLE", "id":11, "desc":"desc", "alias":"double"},
{"name":"T_STRING", "id":12, "desc":"desc", "alias":"string"},
{"name":"T_BYTES", "id":13, "desc":"desc", "alias":"bytes"},
{"name":"T_STRUCT", "id":14, "desc":"desc", "alias":"struct"},
{"name":"T_ARRAY_BOOL", "id":1025, "desc":"desc", "alias":"bool[]"},
{"name":"T_ARRAY_INT8", "id":1026, "desc":"desc", "alias":"int8[]"},
{"name":"T_ARRAY_INT16", "id":1028, "desc":"desc", "alias":"int16[]"},
{"name":"T_ARRAY_UINT16", "id":1029, "desc":"desc", "alias":"uint16[]"},
{"name":"T_ARRAY_INT32", "id":1030, "desc":"desc", "alias":"int32[]"},
{"name":"T_ARRAY_UINT32", "id":1031, "desc":"desc", "alias":"uint32[]"},
{"name":"T_ARRAY_INT64", "id":1032, "desc":"desc", "alias":"int64[]"},
{"name":"T_ARRAY_UINT64", "id":1033, "desc":"desc", "alias":"uint64[]"},
{"name":"T_ARRAY_FLOAT", "id":1034, "desc":"desc", "alias":"float[]"},
{"name":"T_ARRAY_DOUBLE", "id":1035, "desc":"desc", "alias":"double[]"},
{"name":"T_ARRAY_STRING", "id":1036, "desc":"desc", "alias":"string[]"},
{"name":"T_ARRAY_BYTES", "id":1037, "desc":"desc", "alias":"bytes[]"},
{"name":"T_LIST", "id":1038, "desc":"desc", "alias":"list"}
]}
],

"structs":[
{"type":"VarValue","desc":"desc","fields":[
{"tid":"TYPE_STRING", "type":"", "name":"name", "desc":"name is only used for elements in valstruct","flags":[]},
{"tid":"TYPE_ENUM", "type":"VarTypeId", "name":"type", "desc":"","flags":[]},
{"tid":"TYPE_INT32", "name":"index", "desc":"","flags":[]},

{"tid":"TYPE_BOOL", "type":"", "name":"none", "desc":"","flags":[]},
{"tid":"TYPE_BOOL", "type":"", "name":"valbool", "desc":"","flags":[]},
{"tid":"TYPE_INT8", "type":"", "name":"valint8", "desc":"","flags":[]},
{"tid":"TYPE_UINT8", "type":"", "name":"valuint8", "desc":"","flags":[]},
Expand All @@ -51,7 +22,7 @@
{"tid":"TYPE_DOUBLE", "type":"", "name":"valdouble", "desc":"","flags":[]},
{"tid":"TYPE_STRING", "type":"", "name":"valstring", "desc":"","flags":[]},
{"tid":"TYPE_BYTES", "type":"", "name":"valbytes", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_STRUCT", "type":"VarValue", "name":"vallist", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_STRUCT", "type":"VarValue", "name":"valstruct", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_BOOL", "type":"", "name":"valarrbool", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_INT8", "type":"", "name":"valarrint8", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_INT16", "type":"", "name":"valarrint16", "desc":"","flags":[]},
Expand All @@ -63,7 +34,8 @@
{"tid":"TYPE_ARRAY_FLOAT", "type":"", "name":"valarrfloat", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_DOUBLE", "type":"", "name":"valarrdouble", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_STRING", "type":"", "name":"valarrstring", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_BYTES", "type":"", "name":"valarrbytes", "desc":"","flags":[]}
{"tid":"TYPE_ARRAY_BYTES", "type":"", "name":"valarrbytes", "desc":"","flags":[]},
{"tid":"TYPE_ARRAY_STRUCT", "type":"VarValue", "name":"vallist", "desc":"","flags":[]}
]}
]
}
Expand Down
33 changes: 33 additions & 0 deletions inc/finalmq/serializevariant/VarValueToVariant.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,39 @@

namespace finalmq {

enum VarValueType2Index
{
VARVALUETYPE_NONE = 0,
VARVALUETYPE_BOOL = 1,
VARVALUETYPE_INT8 = 2,
VARVALUETYPE_UINT8 = 3,
VARVALUETYPE_INT16 = 4,
VARVALUETYPE_UINT16 = 5,
VARVALUETYPE_INT32 = 6,
VARVALUETYPE_UINT32 = 7,
VARVALUETYPE_INT64 = 8,
VARVALUETYPE_UINT64 = 9,
VARVALUETYPE_FLOAT = 10,
VARVALUETYPE_DOUBLE = 11,
VARVALUETYPE_STRING = 12,
VARVALUETYPE_BYTES = 13,
VARVALUETYPE_VARIANTSTRUCT = 14,
VARVALUETYPE_ARRAY_BOOL = 15,
VARVALUETYPE_ARRAY_INT8 = 16,
VARVALUETYPE_ARRAY_INT16 = 17,
VARVALUETYPE_ARRAY_UINT16 = 18,
VARVALUETYPE_ARRAY_UINT32 = 19,
VARVALUETYPE_ARRAY_INT32 = 20,
VARVALUETYPE_ARRAY_INT64 = 21,
VARVALUETYPE_ARRAY_UINT64 = 22,
VARVALUETYPE_ARRAY_FLOAT = 23,
VARVALUETYPE_ARRAY_DOUBLE = 24,
VARVALUETYPE_ARRAY_STRING = 25,
VARVALUETYPE_ARRAY_BYTES = 26,
VARVALUETYPE_VARIANTLIST = 27,
};



namespace variant {
class VarValue;
Expand Down
1 change: 1 addition & 0 deletions inc/finalmq/serializevariant/VariantToVarValue.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "finalmq/helpers/FmqDefines.h"
#include "finalmq/variant/Variant.h"
#include "finalmq/serialize/IParserVisitor.h"
#include "finalmq/serializevariant/VarValueToVariant.h"


namespace finalmq {
Expand Down
62 changes: 31 additions & 31 deletions src/serializevariant/VarValueToVariant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,100 +64,100 @@ void VarValueToVariant::convert()

void VarValueToVariant::processVarValue(const variant::VarValue& varValue, Variant& variant)
{
switch (varValue.type)
switch (varValue.index)
{
case variant::VarTypeId::T_NONE:
case VarValueType2Index::VARVALUETYPE_NONE:
break;
case variant::VarTypeId::T_BOOL:
case VarValueType2Index::VARVALUETYPE_BOOL:
variant = varValue.valbool;
break;
case variant::VarTypeId::T_INT8:
case VarValueType2Index::VARVALUETYPE_INT8:
variant = varValue.valint8;
break;
case variant::VarTypeId::T_UINT8:
case VarValueType2Index::VARVALUETYPE_UINT8:
variant = varValue.valuint8;
break;
case variant::VarTypeId::T_INT16:
case VarValueType2Index::VARVALUETYPE_INT16:
variant = varValue.valint16;
break;
case variant::VarTypeId::T_UINT16:
case VarValueType2Index::VARVALUETYPE_UINT16:
variant = varValue.valuint16;
break;
case variant::VarTypeId::T_INT32:
case VarValueType2Index::VARVALUETYPE_INT32:
variant = varValue.valint32;
break;
case variant::VarTypeId::T_UINT32:
case VarValueType2Index::VARVALUETYPE_UINT32:
variant = varValue.valuint32;
break;
case variant::VarTypeId::T_INT64:
case VarValueType2Index::VARVALUETYPE_INT64:
variant = varValue.valint64;
break;
case variant::VarTypeId::T_UINT64:
case VarValueType2Index::VARVALUETYPE_UINT64:
variant = varValue.valuint64;
break;
case variant::VarTypeId::T_FLOAT:
case VarValueType2Index::VARVALUETYPE_FLOAT:
variant = varValue.valfloat;
break;
case variant::VarTypeId::T_DOUBLE:
case VarValueType2Index::VARVALUETYPE_DOUBLE:
variant = varValue.valdouble;
break;
case variant::VarTypeId::T_STRING:
case VarValueType2Index::VARVALUETYPE_STRING:
variant = std::move(varValue.valstring);
break;
case variant::VarTypeId::T_BYTES:
case VarValueType2Index::VARVALUETYPE_BYTES:
variant = std::move(varValue.valbytes);
break;
case variant::VarTypeId::T_STRUCT:
case VarValueType2Index::VARVALUETYPE_VARIANTSTRUCT:
{
variant = VariantStruct();
VariantStruct* variantStruct = variant;
assert(variantStruct);
for (size_t i = 0; i < varValue.vallist.size(); ++i)
for (size_t i = 0; i < varValue.valstruct.size(); ++i)
{
const variant::VarValue& varValueElement = varValue.vallist[i];
const variant::VarValue& varValueElement = varValue.valstruct[i];
variantStruct->emplace_back(varValueElement.name, Variant());
processVarValue(varValueElement, variantStruct->back().second);
}
}
break;

case variant::VarTypeId::T_ARRAY_BOOL:
case VarValueType2Index::VARVALUETYPE_ARRAY_BOOL:
variant = std::move(varValue.valarrbool);
break;
case variant::VarTypeId::T_ARRAY_INT8:
case VarValueType2Index::VARVALUETYPE_ARRAY_INT8:
variant = std::move(varValue.valarrint8);
break;
case variant::VarTypeId::T_ARRAY_INT16:
case VarValueType2Index::VARVALUETYPE_ARRAY_INT16:
variant = std::move(varValue.valarrint16);
break;
case variant::VarTypeId::T_ARRAY_UINT16:
case VarValueType2Index::VARVALUETYPE_ARRAY_UINT16:
variant = std::move(varValue.valarruint16);
break;
case variant::VarTypeId::T_ARRAY_INT32:
case VarValueType2Index::VARVALUETYPE_ARRAY_INT32:
variant = std::move(varValue.valarrint32);
break;
case variant::VarTypeId::T_ARRAY_UINT32:
case VarValueType2Index::VARVALUETYPE_ARRAY_UINT32:
variant = std::move(varValue.valarruint32);
break;
case variant::VarTypeId::T_ARRAY_INT64:
case VarValueType2Index::VARVALUETYPE_ARRAY_INT64:
variant = std::move(varValue.valarrint64);
break;
case variant::VarTypeId::T_ARRAY_UINT64:
case VarValueType2Index::VARVALUETYPE_ARRAY_UINT64:
variant = std::move(varValue.valarruint64);
break;
case variant::VarTypeId::T_ARRAY_FLOAT:
case VarValueType2Index::VARVALUETYPE_ARRAY_FLOAT:
variant = std::move(varValue.valarrfloat);
break;
case variant::VarTypeId::T_ARRAY_DOUBLE:
case VarValueType2Index::VARVALUETYPE_ARRAY_DOUBLE:
variant = std::move(varValue.valarrdouble);
break;
case variant::VarTypeId::T_ARRAY_STRING:
case VarValueType2Index::VARVALUETYPE_ARRAY_STRING:
variant = std::move(varValue.valarrstring);
break;
case variant::VarTypeId::T_ARRAY_BYTES:
case VarValueType2Index::VARVALUETYPE_ARRAY_BYTES:
variant = std::move(varValue.valarrbytes);
break;
case variant::VarTypeId::T_LIST:
case VarValueType2Index::VARVALUETYPE_VARIANTLIST:
{
variant = VariantList();
VariantList* variantList = variant;
Expand Down
Loading

0 comments on commit 5071136

Please sign in to comment.