class Typelib::ContainerType
Public Class Methods
code_copy(typekit, result, indent, dest, src, method, src_type, dest_type) { |element_type| ... }
click to toggle source
# File lib/orogen/gen/typekit.rb, line 143 def self.code_copy(typekit, result, indent, dest, src, method, src_type, dest_type) collection_name, element_type = container_kind, deference.name element_type = registry.build(element_type) result << "#{indent}#{dest}.clear();\n" if (container_kind == "vector") result << "#{indent}#{dest}.reserve(#{src}.size());\n" end result << <<-EOT #{indent}for(#{src_type.cxx_name}::const_iterator it = #{src}.begin(); it != #{src}.end(); ++it) #{indent}{ EOT if yield(element_type) result << "#{indent} #{dest}.push_back(*it);\n" else result << "#{indent} #{dest}.push_back(#{dest_type.deference.cxx_name}());\n" result << "#{indent} #{method}(*#{dest}.rbegin(), *it);\n"; end result << "#{indent}}\n"; end
container_cxx_kind()
click to toggle source
# File lib/orogen/gen/typekit.rb, line 138 def self.container_cxx_kind normalize_cxxname(container_kind) end
cxx_name()
click to toggle source
# File lib/orogen/typenames.rb, line 110 def self.cxx_name if name =~ /</ normalize_cxxname(container_kind) + "< " + deference.cxx_name + " >" else normalize_cxxname(container_kind) end end
from_intermediate(typekit, result, indent)
click to toggle source
# File lib/orogen/gen/typekit.rb, line 172 def self.from_intermediate(typekit, result, indent) code_copy(typekit, result, indent, "value", "intermediate", "fromIntermediate", typekit.intermediate_type_for(self), self) do |type| !type.contains_opaques? end end
to_intermediate(typekit, result, indent)
click to toggle source
# File lib/orogen/gen/typekit.rb, line 167 def self.to_intermediate(typekit, result, indent) code_copy(typekit, result, indent, "intermediate", "value", "toIntermediate", self, typekit.intermediate_type_for(self)) do |type| !type.contains_opaques? end end
to_m_type(target_basename, typekit)
click to toggle source
# File lib/orogen/gen/typekit.rb, line 132 def self.to_m_type(target_basename, typekit) target_cxxname = typekit.intermediate_cxxname_for(deference) "struct __gccxml_workaround_#{method_name(true)} {\n #{container_cxx_kind}< #{target_cxxname[0]}#{target_cxxname[1]} > instanciate;\n};\n" + "typedef #{container_cxx_kind}< #{target_cxxname[0]}#{target_cxxname[1]} > orogen_typekits_mtype_#{method_name(true)};" end
to_stream(typekit, result, indent)
click to toggle source
# File lib/orogen/marshallers/iostream.rb, line 10 def self.to_stream(typekit, result, indent) collection_name, element_type = container_kind, deference.name element_type = registry.build(element_type) result << indent << "io << \"[ \";\n" first_field = true allocate_index do |element_idx| result << <<-EOT #{indent}bool first_field = true; #{indent}for(#{cxx_name}::const_iterator it = value.begin(); it != value.end(); ++it) #{indent}{ #{indent} if (!first_field) #{indent} io << ", "; #{indent} first_field = false; EOT if element_type.inlines_code? result << "#{indent} io << *it;\n" elsif element_type < ArrayType result << "#{indent} toStream(\"\", reinterpret_cast<#{element_type.deference.cxx_name} const*>(*it), #{element_size.length}, io);\n" else result << "#{indent} toStream(\"\", *it, io);\n" end result << "#{indent}}\n" end result << indent << "io << \" ]\";\n" end