MCPcopy Create free account
hub / github.com/EmbeddedRPC/erpc / getEncodeDecodeCall

Method getEncodeDecodeCall

erpcgen/src/CGenerator.cpp:2403–2900  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2401}
2402
2403data_map CGenerator::getEncodeDecodeCall(const string &name, Group *group, DataType *t, StructType *structType,
2404 bool inDataContainer, StructMember *structMember, bool &needTempVariableI32,
2405 bool isFunctionParam)
2406{
2407 // prepare data for template
2408 data_map templateData;
2409 string_vector params = string_vector(1, "");
2410 templateData["freeingCall"] = make_template("", &params);
2411 templateData["inDataContainer"] = inDataContainer;
2412 templateData["isElementArrayType"] = false;
2413 data_map defMemberAllocation;
2414 templateData["memberAllocation"] = defMemberAllocation;
2415 // name used for serializing/deserializing current data type.
2416 string localName;
2417
2418 int pos = name.rfind("*");
2419 if ((pos == 0 || pos == 1) && (t->getTrueDataType()->isStruct() || t->getTrueDataType()->isUnion()) &&
2420 inDataContainer == false)
2421 {
2422 localName = name.substr(1, name.length());
2423 }
2424 else
2425 {
2426 localName = name;
2427 }
2428
2429 templateData["freeName"] = localName;
2430
2431 /* Check if member should be serialized as shared. */
2432 if ((structMember && findAnnotation(structMember, SHARED_ANNOTATION)) ||
2433 (structType && findAnnotation(structType, SHARED_ANNOTATION)))
2434 {
2435 templateData["funcParam"] = (structType) ? true : false;
2436 templateData["InoutOutDirection"] =
2437 (structMember && (structMember->getDirection() == param_direction_t::kOutDirection ||
2438 structMember->getDirection() == param_direction_t::kInoutDirection)) ?
2439 true :
2440 false;
2441 templateData["encode"] = m_templateData["encodeSharedType"];
2442 templateData["decode"] = m_templateData["decodeSharedType"];
2443 templateData["name"] = name;
2444 templateData["sharedTypeName"] = t->getName();
2445
2446 /* If shared member contains non-shared member, it has to be serialized. */
2447 templateData["sharedType"] = "";
2448 if (t->isStruct() || t->isUnion())
2449 {
2450 StructType *s = dynamic_cast<StructType *>(t);
2451 if (s)
2452 {
2453 for (StructMember *m : s->getMembers())
2454 {
2455 if (findAnnotation(m, NO_SHARED_ANNOTATION))
2456 {
2457 templateData["sharedType"] = "struct";
2458 templateData["dataLiteral"] = (inDataContainer) ? "data->" : "";
2459 break;
2460 }

Callers

nothing calls this directly

Calls 15

make_templateFunction · 0.85
format_stringFunction · 0.85
semantic_errorClass · 0.85
internal_errorClass · 0.85
isStructMethod · 0.80
getTrueDataTypeMethod · 0.80
isUnionMethod · 0.80
isByrefMethod · 0.80
isEnumMethod · 0.80
isFunctionMethod · 0.80
getCodecTypeMethod · 0.80
isArrayMethod · 0.80

Tested by

no test coverage detected