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