class OroGen::Gen::RTT_CPP::ImportedTypekit

Instances of this class represent a typekit that has been imported using {Project#using_typekit}

Attributes

interface_typelist[R]
main_project[R]
name[R]
opaque_registry[R]
opaques[R]
pkg[R]
registry[R]
typelist[R]

Public Class Methods

from_raw_data(main, name, pkg, registry_xml, typelist_txt) click to toggle source
# File lib/orogen/gen/imports.rb, line 40
def self.from_raw_data(main, name, pkg, registry_xml, typelist_txt)
    typekit_registry = Typelib::Registry.new
    typekit_registry.merge_xml(registry_xml)

    typekit_typelist, typekit_interface_typelist = parse_typelist(typelist_txt)
    typekit = self.new(main, name,
                  pkg, typekit_registry,
                  typekit_typelist,
                  typekit_interface_typelist)

    # Now initialize the opaque definitions
    doc = REXML::Document.new(registry_xml)
    doc.each_element('//opaque') do |opaque_entry|
        base_type_name  = opaque_entry.attributes['name']
        inter_type_name = opaque_entry.attributes['marshal_as']
        includes        = opaque_entry.attributes['includes']
        needs_copy      = opaque_entry.attributes['needs_copy']
        spec = OpaqueDefinition.new(
            typekit_registry.get(base_type_name),
            inter_type_name,
            { :include => includes.split(':'), :needs_copy => (needs_copy == '1') },
            nil)

        typekit.opaque_registry.merge(typekit_registry.minimal(base_type_name))
        typekit.opaques << spec
    end

    typekit
end
new(main_project, name, pkg, registry, typelist, interface_typelist) click to toggle source
# File lib/orogen/gen/imports.rb, line 81
def initialize(main_project, name, pkg, registry, typelist, interface_typelist)
    @main_project, @name, @pkg, @registry = main_project, name, pkg, registry
    @typelist = typelist.to_set
    @interface_typelist = interface_typelist.to_set
    @opaques = Array.new
    @opaque_registry = Typelib::Registry.new
end
parse_typelist(typelist_txt) click to toggle source
# File lib/orogen/gen/imports.rb, line 17
def self.parse_typelist(typelist_txt)
    raw_typelist = typelist_txt.split("\n").map(&:strip)
    typekit_typelist, typekit_interface_typelist = [], []
    raw_typelist.each do |decl|
        # using non greedy kleene star to match first expression: .*?
        # to handle following patterns:
        # /string
        # /unsigned char[8]
        # /unsigned char[8] 0 
        if decl =~ /^(.*) (\d)$/
            type, is_interface = $1, ($2 == '1')
        else
            type, is_interface = decl, true
        end

        typekit_typelist << type
        if is_interface
            typekit_interface_typelist << type
        end
    end
    return typekit_typelist, typekit_interface_typelist
end

Public Instance Methods

defines_array_of?(type) click to toggle source
# File lib/orogen/gen/imports.rb, line 134
def defines_array_of?(type)
    typename = if type.respond_to?(:name) then type.name
               else type.to_str
               end

    typelist.any? { |str| str =~ /#{Regexp.quote(typename)}(\[\d+\])+/ }
end
export_types(*args) click to toggle source
# File lib/orogen/gen/imports.rb, line 70
def export_types(*args); end
find_type(type) click to toggle source
# File lib/orogen/gen/imports.rb, line 145
def find_type(type)
    if type.respond_to?(:name)
        registry.get(type.name)
    else
        registry.get(type)
    end
end
has_opaques?() click to toggle source
# File lib/orogen/gen/imports.rb, line 72
def has_opaques?
    registry.any? { |t| includes?(t) && t.contains_opaques? }
end
include_dirs() click to toggle source
# File lib/orogen/gen/imports.rb, line 109
def include_dirs
    pkg.include_dirs.to_set
end
includes?(type) click to toggle source
# File lib/orogen/gen/imports.rb, line 153
def includes?(type)
    typename = if type.respond_to?(:name) then type.name
               else type.to_str
               end
    typelist.include?(typename)
end
interface_type?(typename) click to toggle source
# File lib/orogen/gen/imports.rb, line 76
def interface_type?(typename)
    typename = typename.name if typename.respond_to?(:name)
    interface_typelist.include?(typename)
end
intermediate_type?(*args) click to toggle source
# File lib/orogen/gen/imports.rb, line 126
def intermediate_type?(*args)
    main_project.intermediate_type?(*args)
end
intermediate_type_for(*args) click to toggle source
# File lib/orogen/gen/imports.rb, line 122
def intermediate_type_for(*args)
    main_project.intermediate_type_for(*args)
end
m_type?(*args) click to toggle source
# File lib/orogen/gen/imports.rb, line 130
def m_type?(*args)
    main_project.m_type?(*args)
end
opaque_type(*args) click to toggle source

Simply ignore, we load the whole typekit anyway

# File lib/orogen/gen/imports.rb, line 97
def opaque_type(*args); end
perform_pending_loads() click to toggle source
# File lib/orogen/gen/imports.rb, line 102
def perform_pending_loads; end
pkg_corba_name() click to toggle source
# File lib/orogen/gen/imports.rb, line 106
def pkg_corba_name
    pkg_transport_name('corba')
end
pkg_name() click to toggle source
# File lib/orogen/gen/imports.rb, line 99
def pkg_name
    pkg.name
end
pkg_transport_name(transport_name) click to toggle source
# File lib/orogen/gen/imports.rb, line 103
def pkg_transport_name(transport_name)
    Utilrb::PkgConfig.new(pkg.name.gsub('typekit', "transport-#{transport_name}")).name
end
self_types() click to toggle source
# File lib/orogen/gen/imports.rb, line 118
def self_types
    typelist.map { |name| registry.get(name) }
end
types_dir() click to toggle source

Returns the full path to the types/ subdir in the include directory

# File lib/orogen/gen/imports.rb, line 114
def types_dir
    File.join(pkg.includedir, name, 'types')
end
using_library(*args) click to toggle source
# File lib/orogen/gen/imports.rb, line 142
def using_library(*args); end
using_typekit(*args) click to toggle source
# File lib/orogen/gen/imports.rb, line 143
def using_typekit(*args); end
virtual?() click to toggle source
# File lib/orogen/gen/imports.rb, line 159
def virtual?; false end