class Typelib::CompoundType

Public Class Methods

code_copy(typekit, result, indent, dest, src, method, error_handling) { |field_name, field_type| ... } click to toggle source
# File lib/orogen/gen/typekit.rb, line 224
def self.code_copy(typekit, result, indent, dest, src, method, error_handling)
    each_field do |field_name, field_type|
        if string = yield(field_name, field_type)
            if !string.respond_to?(:to_str)
                result << "#{indent}#{dest}.#{field_name} = #{src}.#{field_name};\n"
            else
                result << string
            end
        else
            s_src  = "#{src}.#{field_name}"
            s_dest = "#{dest}.#{field_name}"
            if field_type < ArrayType
                if src == "value"
                    s_src = "reinterpret_cast< #{field_type.deference.cxx_name} const*>(#{s_src}), #{field_type.length}"
                else
                    s_dest = "reinterpret_cast< #{field_type.deference.cxx_name}*>(#{s_dest}), #{field_type.length}"
                end
            end

            if error_handling
                result << "#{indent}if (!#{method}(#{s_dest}, #{s_src})) return false;\n";
            else
                result << "#{indent}#{method}(#{s_dest}, #{s_src});\n"
            end
        end
    end
    result
end
from_intermediate(typekit, result, indent) click to toggle source
# File lib/orogen/gen/typekit.rb, line 260
def self.from_intermediate(typekit, result, indent)
    code_copy(typekit, result, indent, "value", "intermediate", "fromIntermediate", false) do |field_name, field_type|
        if !field_type.contains_opaques?
            field_type.code_assign([], indent + "    ", "value.#{field_name}", "intermediate.#{field_name}").join
        end
    end
end
to_intermediate(typekit, result, indent) click to toggle source
# File lib/orogen/gen/typekit.rb, line 253
def self.to_intermediate(typekit, result, indent)
    code_copy(typekit, result, indent, "intermediate", "value", "toIntermediate", false) do |field_name, field_type|
        if !field_type.contains_opaques?
            field_type.code_assign([], indent + "    ", "intermediate.#{field_name}", "value.#{field_name}").join
        end
    end
end
to_m_type(target_basename, typekit) click to toggle source
# File lib/orogen/gen/typekit.rb, line 205
        def self.to_m_type(target_basename, typekit)
            result = <<-EOCODE
struct #{target_basename}
{
            EOCODE
            each_field do |field_name, field_type|
                field_cxxname =
                    if field_type.contains_opaques?
                        typekit.intermediate_cxxname_for(field_type.name)
                    elsif field_type <= ArrayType
                        [field_type.deference.cxx_name, "[#{field_type.length}]"]
                    else
                        [field_type.cxx_name]
                    end
                result << "   #{field_cxxname[0]} #{field_name} #{field_cxxname[1]};\n"
            end
            result << "};"
        end
to_stream(typekit, result, indent) click to toggle source
# File lib/orogen/marshallers/iostream.rb, line 50
def self.to_stream(typekit, result, indent)
    result << indent << "io << \"{ \";\n"

    first_field = true
    each_field do |field_name, field_type|
        unless first_field
            result << "#{indent}  io << \", \";\n";
        end

        first_field = false
        result << "#{indent}  io << basename << \".#{field_name} = \";\n";
        if field_type.inlines_code?
            result << "#{indent}  io << value.#{field_name};\n"
        elsif field_type < ArrayType
            result << "#{indent}  toStream(basename + \".#{field_name}\", reinterpret_cast<#{field_type.deference.cxx_name} const*>(value.#{field_name}), #{field_type.length}, io);\n"
        else
            result << "#{indent}  toStream(basename + \".#{field_name}\", value.#{field_name}, io);\n"
        end
    end
    result << indent << "io << \" }\";\n"
end