Class: Px4LogReader::MessageDescriptorCache

Inherits:
Object
  • Object
show all
Defined in:
lib/px4_log_reader/message_descriptor_cache.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ MessageDescriptorCache

Returns a new instance of MessageDescriptorCache.



39
40
41
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 39

def initialize( filename )
	@cache_filename = filename
end

Instance Attribute Details

#cache_filenameObject (readonly)

Returns the value of attribute cache_filename.



37
38
39
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 37

def cache_filename
  @cache_filename
end

Instance Method Details

#exist?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 43

def exist?
	return File.exist?( @cache_filename )
end

#read_descriptorsObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 47

def read_descriptors

	message_descriptors = {}

	if File.exist?( cache_filename )
		File.open( cache_filename, 'r' ) do |input|
			begin
				while ( ( data = input.read(4) ) && ( data.length == 4 ) ) do
					descriptor_size = data.unpack('L').first
					descriptor = Marshal.load( input.read( descriptor_size ) )

					message_descriptors[ descriptor.type ] = descriptor
					end
			rescue EOFError => error
				puts "Parsed #{@message_descriptions.size} cached message descriptions"
			rescue StandardError => error
				puts "#{error.class}: #{error.message}"
				puts error.backtrace.join("\n")
			end
		end
	else
		puts "Cache file '#{cache_filename}' not found"
	end

	return message_descriptors
end

#write_descriptors(message_descriptors) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 74

def write_descriptors( message_descriptors )
	if !@cache_filename.empty? && File.exist?( File.dirname( @cache_filename ) )
		File.open( @cache_filename, 'w+' ) do |output|
			message_descriptors.each do |message_type,descriptor|
				descriptor_data = Marshal.dump( descriptor )
				output.write( [ descriptor_data.size ].pack('L') )
				output.write( descriptor_data )
			end
		end
	end
end