Skip to content

Commit

Permalink
try to fix Windows warning
Browse files Browse the repository at this point in the history
  • Loading branch information
dirk-thomas committed Feb 22, 2019
1 parent 355af2e commit ab1b43a
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions rosidl_generator_cpp/resource/msg__struct.hpp.em
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,20 @@ struct @(message.structure.type.name)_
init_list, alloc_list, member_list = create_init_alloc_and_member_lists(message)

def generate_default_string(membset):
from rosidl_generator_cpp import msg_type_only_to_cpp
from rosidl_generator_cpp import msg_type_to_cpp
strlist = []
for member in membset.members:
if member.default_value is not None:
if member.num_prealloc > 0:
strlist.append('this->%s.resize(%d);' % (member.name, member.num_prealloc))
if isinstance(member.default_value, list):
if all(v == member.default_value[0] for v in member.default_value):
strlist.append('std::fill(this->%s.begin(), this->%s.end(), %s);' % (member.name, member.name, member.default_value[0]))
# Specifying type for std::fill because of MSVC 14.12 warning about casting 'const int' to smaller types (C4244)
# For more info, see https://github.com/ros2/rosidl/issues/309
# TODO(jacobperron): Investigate reason for build warnings on Windows
# TODO(jacobperron): Write test case for this path of execution
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]))
else:
for index, val in enumerate(member.default_value):
strlist.append('this->%s[%d] = %s;' % (member.name, index, val))
Expand All @@ -118,6 +124,7 @@ def generate_default_string(membset):

def generate_zero_string(membset, fill_args):
from rosidl_generator_cpp import msg_type_only_to_cpp
from rosidl_generator_cpp import msg_type_to_cpp
strlist = []
for member in membset.members:
if isinstance(member.zero_value, list):
Expand All @@ -126,7 +133,10 @@ def generate_zero_string(membset, fill_args):
if member.zero_need_array_override:
strlist.append('this->%s.fill(%s{%s});' % (member.name, msg_type_only_to_cpp(member.type), fill_args))
else:
strlist.append('std::fill(this->%s.begin(), this->%s.end(), %s);' % (member.name, member.name, member.zero_value[0]))
# Specifying type for std::fill because of MSVC 14.12 warning about casting 'const int' to smaller types (C4244)
# For more info, see https://github.com/ros2/rosidl/issues/309
# TODO(jacobperron): Investigate reason for build warnings on Windows
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]))
else:
strlist.append('this->%s = %s;' % (member.name, member.zero_value))
return strlist
Expand Down

0 comments on commit ab1b43a

Please sign in to comment.