Skip to content

Commit

Permalink
[C++] Add ability to get a var data as a string_view. Issue #550.
Browse files Browse the repository at this point in the history
  • Loading branch information
mjpt777 committed Feb 4, 2019
1 parent 770c2b8 commit c60ac3f
Showing 1 changed file with 38 additions and 0 deletions.
Expand Up @@ -489,6 +489,29 @@ private CharSequence generateVarData(final String className, final List<Token> t
lengthByteOrderStr,
lengthCppType));

sb.append(String.format("\n" +
indent + " #if __cplusplus >= 201703L\n" +
indent + " const std::string_view get%1$sAsStringView()\n" +
indent + " {\n" +
"%2$s" +
indent + " std::uint64_t lengthOfLengthField = %3$d;\n" +
indent + " std::uint64_t lengthPosition = sbePosition();\n" +
indent + " sbePosition(lengthPosition + lengthOfLengthField);\n" +
indent + " %5$s lengthFieldValue;\n" +
indent + " std::memcpy(&lengthFieldValue, m_buffer + lengthPosition, sizeof(%5$s));\n" +
indent + " std::uint64_t dataLength = %4$s(lengthFieldValue);\n" +
indent + " std::uint64_t pos = sbePosition();\n" +
indent + " const std::string_view result(m_buffer + pos, dataLength);\n" +
indent + " sbePosition(pos + dataLength);\n" +
indent + " return result;\n" +
indent + " }\n" +
indent + " #endif\n",
propertyName,
generateStringViewNotPresentCondition(token.version(), BASE_INDENT),
lengthOfLengthField,
lengthByteOrderStr,
lengthCppType));

sb.append(String.format("\n" +
indent + " %1$s &put%2$s(const std::string& str)\n" +
indent + " {\n" +
Expand Down Expand Up @@ -844,6 +867,21 @@ private static CharSequence generateStringNotPresentCondition(final int sinceVer
sinceVersion);
}

private static CharSequence generateStringViewNotPresentCondition(final int sinceVersion, final String indent)
{
if (0 == sinceVersion)
{
return "";
}

return String.format(
indent + " if (m_actingVersion < %1$d)\n" +
indent + " {\n" +
indent + " return std::string_view(\"\");\n" +
indent + " }\n\n",
sinceVersion);
}

private static CharSequence generateTypeFieldNotPresentCondition(final int sinceVersion, final String indent)
{
if (0 == sinceVersion)
Expand Down

0 comments on commit c60ac3f

Please sign in to comment.