@@ -489,6 +489,29 @@ private CharSequence generateVarData(final String className, final List<Token> t
489489 lengthByteOrderStr ,
490490 lengthCppType ));
491491
492+ sb .append (String .format ("\n " +
493+ indent + " #if __cplusplus >= 201703L\n " +
494+ indent + " const std::string_view get%1$sAsStringView()\n " +
495+ indent + " {\n " +
496+ "%2$s" +
497+ indent + " std::uint64_t lengthOfLengthField = %3$d;\n " +
498+ indent + " std::uint64_t lengthPosition = sbePosition();\n " +
499+ indent + " sbePosition(lengthPosition + lengthOfLengthField);\n " +
500+ indent + " %5$s lengthFieldValue;\n " +
501+ indent + " std::memcpy(&lengthFieldValue, m_buffer + lengthPosition, sizeof(%5$s));\n " +
502+ indent + " std::uint64_t dataLength = %4$s(lengthFieldValue);\n " +
503+ indent + " std::uint64_t pos = sbePosition();\n " +
504+ indent + " const std::string_view result(m_buffer + pos, dataLength);\n " +
505+ indent + " sbePosition(pos + dataLength);\n " +
506+ indent + " return result;\n " +
507+ indent + " }\n " +
508+ indent + " #endif\n " ,
509+ propertyName ,
510+ generateStringViewNotPresentCondition (token .version (), BASE_INDENT ),
511+ lengthOfLengthField ,
512+ lengthByteOrderStr ,
513+ lengthCppType ));
514+
492515 sb .append (String .format ("\n " +
493516 indent + " %1$s &put%2$s(const std::string& str)\n " +
494517 indent + " {\n " +
@@ -844,6 +867,21 @@ private static CharSequence generateStringNotPresentCondition(final int sinceVer
844867 sinceVersion );
845868 }
846869
870+ private static CharSequence generateStringViewNotPresentCondition (final int sinceVersion , final String indent )
871+ {
872+ if (0 == sinceVersion )
873+ {
874+ return "" ;
875+ }
876+
877+ return String .format (
878+ indent + " if (m_actingVersion < %1$d)\n " +
879+ indent + " {\n " +
880+ indent + " return std::string_view(\" \" );\n " +
881+ indent + " }\n \n " ,
882+ sinceVersion );
883+ }
884+
847885 private static CharSequence generateTypeFieldNotPresentCondition (final int sinceVersion , final String indent )
848886 {
849887 if (0 == sinceVersion )
0 commit comments