@@ -5,6 +5,8 @@ from rosidl_generator_cpp import escape_string
55from rosidl_generator_cpp import escape_wstring
66from rosidl_generator_cpp import msg_type_to_cpp
77from rosidl_generator_cpp import MSG_TYPE_TO_CPP
8+ from rosidl_generator_cpp import generate_zero_string
9+ from rosidl_generator_cpp import generate_default_string
810from rosidl_parser .definition import AbstractNestedType
911from rosidl_parser .definition import AbstractString
1012from rosidl_parser .definition import AbstractWString
@@ -108,48 +110,6 @@ struct @(message.structure.namespaced_type.name)_
108110# http://design.ros2.org/articles/generated_interfaces_cpp.html#constructors
109111# for a detailed explanation of the different _init parameters.
110112init_list, alloc_list, member_list = create_init_alloc_and_member_lists (message)
111-
112- def generate_default_string (membset):
113- from rosidl_generator_cpp import msg_type_only_to_cpp
114- from rosidl_generator_cpp import msg_type_to_cpp
115- strlist = []
116- for member in membset .members :
117- if member .default_value is not None :
118- if member .num_prealloc > 0 :
119- strlist .append (' this->%s.resize(%d);' % (member .name , member .num_prealloc ))
120- if isinstance (member .default_value , list):
121- if all (v == member .default_value [0 ] for v in member .default_value ):
122- # Specifying type for std::fill because of MSVC 14.12 warning about casting 'const int' to smaller types (C4244)
123- # For more info, see https://github.com/ros2/rosidl/issues/309
124- # TODO(jacobperron): Investigate reason for build warnings on Windows
125- # TODO(jacobperron): Write test case for this path of execution
126- strlist .append (' std::fill<typename %s::iterator, %s>(this->%s.begin(), this->%s.end(), %s);' % (msg_type_to_cpp (member .type ), msg_type_only_to_cpp (member .type ), member .name , member .name , member .default_value [0 ]))
127- else :
128- for index, val in enumerate (member .default_value ):
129- strlist .append (' this->%s[%d] = %s;' % (member .name , index, val))
130- else :
131- strlist .append (' this->%s = %s;' % (member .name , member .default_value ))
132-
133- return strlist
134-
135- def generate_zero_string (membset, fill_args):
136- from rosidl_generator_cpp import msg_type_only_to_cpp
137- from rosidl_generator_cpp import msg_type_to_cpp
138- strlist = []
139- for member in membset .members :
140- if isinstance (member .zero_value , list):
141- if member .num_prealloc > 0 :
142- strlist .append (' this->%s.resize(%d);' % (member .name , member .num_prealloc ))
143- if member .zero_need_array_override :
144- strlist .append (' this->%s.fill(%s{%s});' % (member .name , msg_type_only_to_cpp (member .type ), fill_args))
145- else :
146- # Specifying type for std::fill because of MSVC 14.12 warning about casting 'const int' to smaller types (C4244)
147- # For more info, see https://github.com/ros2/rosidl/issues/309
148- # TODO(jacobperron): Investigate reason for build warnings on Windows
149- strlist .append (' std::fill<typename %s::iterator, %s>(this->%s.begin(), this->%s.end(), %s);' % (msg_type_to_cpp (member .type ), msg_type_only_to_cpp (member .type ), member .name , member .name , member .zero_value [0 ]))
150- else :
151- strlist .append (' this->%s = %s;' % (member .name , member .zero_value ))
152- return strlist
153113}@
154114 explicit @ (message .structure .namespaced_type .name )_ (rosidl_runtime_cpp :: MessageInitialization _init = rosidl_runtime_cpp :: MessageInitialization :: ALL )
155115@ [if init_list]@
0 commit comments