From 54688693e01d0d9b1d684f8d465f411e075c6b82 Mon Sep 17 00:00:00 2001 From: Miguel Company Date: Tue, 25 Feb 2025 12:08:08 +0100 Subject: [PATCH] Fix python code generation for bounded strings (#440) * Refs #22835. SWIG extend to set fixed_string from std::string. Signed-off-by: Miguel Company * Refs #22835. SWIG export template for fixed_string members. Signed-off-by: Miguel Company * Refs #22835. Fix access to typecode. Signed-off-by: Miguel Company * Refs #22835. Fix max size typo. Signed-off-by: Miguel Company * Refs #22835. Fix exported template name. Signed-off-by: Miguel Company * Refs #22835. Fix extend code. Signed-off-by: Miguel Company * Refs #22850. Apply suggestions from review. Signed-off-by: Miguel Company --------- Signed-off-by: Miguel Company (cherry picked from commit 8eaca9ae9c6d352bf58c5f71b5b92fa8718b1fd2) --- .../idl/templates/TypesSwigInterface.stg | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/com/eprosima/fastcdr/idl/templates/TypesSwigInterface.stg b/src/main/java/com/eprosima/fastcdr/idl/templates/TypesSwigInterface.stg index e7e53306..49fd4092 100644 --- a/src/main/java/com/eprosima/fastcdr/idl/templates/TypesSwigInterface.stg +++ b/src/main/java/com/eprosima/fastcdr/idl/templates/TypesSwigInterface.stg @@ -52,7 +52,12 @@ $ctx.directIncludeDependencies : {include | %include "$include$.i"}; separator=" %} %include +$if(ctx.thereIsOptionalAnnotation)$ %import(module="fastdds") "fastcdr/xcdr/optional.hpp" +$endif$ +$if(ctx.thereIsString)$ +%import(module="fastdds") "fastcdr/cdr/fixed_size_string.hpp" +$endif$ %import(module="fastdds") "fastdds/dds/core/LoanableCollection.hpp" %import(module="fastdds") "fastdds/dds/core/LoanableTypedCollection.hpp" %import(module="fastdds") "fastdds/dds/core/LoanableSequence.hpp" @@ -188,6 +193,18 @@ $else$ %ignore $struct_name$::$member.name$(); %rename("%s") $struct_name$::$member.name$() const; +$if(member.typecode.isStringType && member.typecode.isBounded)$ +%template(fixed_string_$member.typecode.maxsize$) eprosima::fastcdr::fixed_string<$member.typecode.maxsize$>; +%extend $struct_name$ +{ + void $member.name$(const std::string& value) + { + eprosima::fastcdr::fixed_string<$member.typecode.maxsize$> tmp(value); + \$self->$member.name$(tmp); + } +} +$endif$ + $endif$ >>