class LogTools::TypeConverter

Constants

SubConverter

Attributes

name[R]
new_registry[R]
time_to[R]

Public Class Methods

new(name,time_to,new_registry=Orocos.registry,&block) click to toggle source

#time_to is the time after which the conversion is no longer needed

# File lib/log_tools/converter.rb, line 45
def initialize(name,time_to,new_registry=Orocos.registry,&block)
    return time_to if time_to.is_a? TypeConverter

    #check parameter
    raise 'Parameter time_to must be of type Time' unless time_to.is_a? Time
    raise 'Parameter new_registry must be of type Typelib::Registry' unless new_registry.is_a? Typelib::Registry

    @name_hash = Hash.new
    @name = name
    @time_to = time_to
    @new_registry = new_registry

    instance_eval(&block)
end

Public Instance Methods

conversion(old_type_name,new_type_name=nil,&block) click to toggle source
# File lib/log_tools/converter.rb, line 98
def conversion(old_type_name,new_type_name=nil,&block) 
    new_type_name = if new_type_name
                        new_type_name
                    else
                        old_type_name
                    end

    if !new_registry.include?(new_type_name) && new_registry == Orocos.registry
        Converter.info "load typekit for  #{new_type_name}"
        Orocos.load_typekit_for new_type_name
    end

    old_type_name = normalize_name(old_type_name)
    new_type_name = normalize_name(new_type_name)
    raise 'Parameter old_type_name must be of type String' unless old_type_name.is_a? String
    raise 'Parameter new_type_name must be of type String' unless new_type_name.is_a? String
    @name_hash[old_type_name] = SubConverter.new(old_type_name,new_type_name,block)
end
convert(dest,src,src_type_name,caller_obj) click to toggle source
# File lib/log_tools/converter.rb, line 91
def convert(dest,src,src_type_name,caller_obj)
    src_type_name = src.class.name unless src_type_name
    c = @name_hash[src_type_name]
    raise "Cannot convert #{src_type_name}!!!" unless c
    caller_obj.instance_exec(dest,src,&c.block)
end
convert?(type_name) click to toggle source
# File lib/log_tools/converter.rb, line 86
def convert? type_name
    type_name = type_name.class.name unless type_name.is_a? String
    return @name_hash.has_key? type_name
end
convert_field_from?(sample) click to toggle source
# File lib/log_tools/converter.rb, line 75
def convert_field_from?(sample)
    @name_hash.each_key do |key|
        begin 
            sample2 = sample.class.registry.get(key)
            return true if sample.class.contains?(sample2) 
        rescue Typelib::NotFound => e
        end
    end
    false
end
new_name_for(type_name) click to toggle source
# File lib/log_tools/converter.rb, line 60
def new_name_for type_name
    type_name = type_name.class.name unless type_name.is_a? String
    c = @name_hash[type_name]
    c.new_type_name if c
end
new_sample_for(type_name) click to toggle source
# File lib/log_tools/converter.rb, line 66
def new_sample_for type_name
    name = new_name_for type_name
    @new_registry.get(name).new
end
normalize_name(name) click to toggle source
# File lib/log_tools/converter.rb, line 117
def normalize_name(name)
    if(Orocos.default_loader.resolve_type(name) && name_m = Orocos.default_loader.intermediate_type_for(name))
       Converter.info "#{name} is an intermedia type called #{name_m}"
       name_m.name
    else
        name
    end
    rescue Typelib::NotFound
        name
end
old_type_names() click to toggle source
# File lib/log_tools/converter.rb, line 71
def old_type_names
    @name_hash.keys
end