stevedlawrence commented on code in PR #901:
URL: https://github.com/apache/daffodil/pull/901#discussion_r1067181729
##########
daffodil-runtime2/src/main/scala/org/apache/daffodil/runtime2/generators/HexBinaryCodeGenerator.scala:
##########
@@ -60,76 +62,70 @@ trait HexBinaryCodeGenerator extends
BinaryValueCodeGenerator {
val primType = s"$intType$intLen"
val conv = if (e.prefixedLengthElementDecl.byteOrderEv.constValue ==
ByteOrder.BigEndian) "be" else "le"
val function = s"${conv}_$primType"
- val i = if (deref.length > 2) deref.substring(1, deref.length - 1) else ""
- val lenVar = s"_l_$localName$i"
+ val lenVar = s"_l_$localName"
val initERDStatement =
- s""" $field.array = NULL;
- | $field.lengthInBytes = 0;
- | $field.dynamic = true;""".stripMargin
- val initSelfStatement = ""
+ s"""$indent1$indent2 $field.dynamic = true;""".stripMargin
val parseStatement =
- s""" ${primType}_t $lenVar;
- | parse_$function(&$lenVar, $intLen, pstate);
- | if (pstate->error) return;
- | alloc_hexBinary(&$field, $lenVar, pstate);
- | if (pstate->error) return;
- | parse_hexBinary(&$field, pstate);
- | if (pstate->error) return;""".stripMargin
+ s"""$indent1$indent2 ${primType}_t $lenVar;
+ |$indent1$indent2 parse_$function(&$lenVar, $intLen, pstate);
+ |$indent1$indent2 if (pstate->error) return;
+ |$indent1$indent2 alloc_hexBinary(&$field, $lenVar, pstate);
+ |$indent1$indent2 if (pstate->error) return;
+ |$indent1$indent2 parse_hexBinary(&$field, pstate);
+ |$indent1$indent2 if (pstate->error) return;""".stripMargin
val unparseStatement =
- s""" unparse_$function($field.lengthInBytes, $intLen, ustate);
- | if (ustate->error) return;
- | unparse_hexBinary($field, ustate);
- | if (ustate->error) return;""".stripMargin
- cgState.addSimpleTypeStatements(initERDStatement, initSelfStatement,
parseStatement, unparseStatement)
+ s"""$indent1$indent2 unparse_$function($field.lengthInBytes, $intLen,
ustate);
+ |$indent1$indent2 if (ustate->error) return;
+ |$indent1$indent2 unparse_hexBinary($field, ustate);
+ |$indent1$indent2 if (ustate->error) return;""".stripMargin
+ cgState.addSimpleTypeStatements(initERDStatement, parseStatement,
unparseStatement)
}
// Generate C code to initialize, parse, and unparse a hexBinary specified
length element
private def hexBinarySpecifiedLengthAddField(e: ElementBase, deref: String,
cgState: CodeGeneratorState): Unit = {
+ val indent1 = if (cgState.hasChoice) " " else ""
+ val indent2 = if (deref.nonEmpty) " " else ""
val localName = e.namedQName.local
val field = s"instance->$localName$deref"
val fieldArray = s"instance->_a_$localName$deref"
val specifiedLength = e.elementLengthInBitsEv.constValue.get
val initERDStatement = if (specifiedLength > 0)
- s""" $field.array = $fieldArray;
- | $field.lengthInBytes = sizeof($fieldArray);
- | $field.dynamic = false;""".stripMargin
+ s"""$indent1$indent2 $field.array = $fieldArray;
+ |$indent1$indent2 $field.lengthInBytes = sizeof($fieldArray);
+ |$indent1$indent2 $field.dynamic = false;""".stripMargin
else
- s""" $field.array = NULL;
- | $field.lengthInBytes = 0;
- | $field.dynamic = false;""".stripMargin
- val initSelfStatement = if (specifiedLength > 0)
- s" memset($fieldArray, 0x77, sizeof($fieldArray));"
- else
- ""
+ s"""$indent1$indent2 $field.array = NULL;
+ |$indent1$indent2 $field.lengthInBytes = 0;
+ |$indent1$indent2 $field.dynamic = false;""".stripMargin
val parseStatement =
- s""" parse_hexBinary(&$field, pstate);
- | if (pstate->error) return;""".stripMargin
+ s"""$indent1$indent2 parse_hexBinary(&$field, pstate);
+ |$indent1$indent2 if (pstate->error) return;""".stripMargin
val unparseStatement =
- s""" unparse_hexBinary($field, ustate);
- | if (ustate->error) return;""".stripMargin
- cgState.addSimpleTypeStatements(initERDStatement, initSelfStatement,
parseStatement, unparseStatement)
+ s"""$indent1$indent2 unparse_hexBinary($field, ustate);
+ |$indent1$indent2 if (ustate->error) return;""".stripMargin
+ cgState.addSimpleTypeStatements(initERDStatement, parseStatement,
unparseStatement)
}
// Generate C code to validate a hexBinary element against its fixed value
private def hexBinaryValidateFixed(e: ElementBase, deref: String, cgState:
CodeGeneratorState): Unit = {
+ val indent1 = if (cgState.hasChoice) " " else ""
+ val indent2 = if (deref.nonEmpty) " " else ""
val localName = e.namedQName.local
val field = s"instance->$localName$deref"
- val i = if (deref.length > 2) deref.substring(1, deref.length - 1) else ""
- val fixed = s"${localName}_fixed$i"
+ val fixed = s"${localName}_fixed"
val array = e.fixedValueAsString.grouped(2).mkString("0x", ", 0x", "")
val initERDStatement = ""
- val initSelfStatement = ""
val parseStatement =
- s""" uint8_t $fixed[] = {$array};
- | parse_validate_fixed(memcmp($field.array, $fixed,
sizeof($fixed)) == 0, "$localName", pstate);
- | if (pstate->error) return;""".stripMargin
+ s"""$indent1$indent2 uint8_t $fixed[] = {$array};
+ |$indent1$indent2 parse_validate_fixed(memcmp($field.array,
$fixed, sizeof($fixed)) == 0, "$localName", pstate);
+ |$indent1$indent2 if (pstate->error) return;""".stripMargin
val unparseStatement =
- s""" uint8_t $fixed[] = {$array};
- | unparse_validate_fixed(memcmp($field.array, $fixed,
sizeof($fixed)) == 0, "$localName", ustate);
- | if (ustate->error) return;""".stripMargin
- cgState.addSimpleTypeStatements(initERDStatement, initSelfStatement,
parseStatement, unparseStatement)
+ s"""$indent1$indent2 uint8_t $fixed[] = {$array};
+ |$indent1$indent2 unparse_validate_fixed(memcmp($field.array,
$fixed, sizeof($fixed)) == 0, "$localName", ustate);
+ |$indent1$indent2 if (ustate->error) return;""".stripMargin
Review Comment:
Sees reasonable to me if Scala has no problem with it. stripMargin does have
an overload with a Char parameter. I assume Scala can figure out the
differences between an int and a char, but if not a variable on stripMargin
seems reasonable.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]