blob: 421c3b414775e31b74911f2e3acea18456de852b [file] [log] [blame]
Brian Silverman76156ca2014-02-22 13:10:42 -08001require File.dirname(__FILE__) + '/load.rb'
2
3require 'fileutils'
4
5TypeNames = [8, 16, 32, 64].collect do |size|
6 ["uint#{size}_t", "int#{size}_t"]
Brian Silverman96e6d5a2014-03-24 15:55:40 -07007end.flatten + ['bool', 'float', 'char', 'double', '::aos::time::Time']
Brian Silverman76156ca2014-02-22 13:10:42 -08008
9FileUtils.mkdir_p(File.dirname(ARGV[0]))
10WriteIffChanged.open(ARGV[0]) do |output|
11 output.puts <<END
12// This file is generated by #{File.expand_path(__FILE__)}.
13// DO NOT EDIT BY HAND!
14
15#include <stdint.h>
16
Brian Silverman96e6d5a2014-03-24 15:55:40 -070017#include "aos/common/time.h"
18
Brian Silverman76156ca2014-02-22 13:10:42 -080019namespace aos {
Brian Silvermanff12c9f2014-03-19 17:53:29 -070020namespace queue_primitive_types {
Brian Silverman76156ca2014-02-22 13:10:42 -080021#{TypeNames.collect do |name|
22 message_element = Target::MessageElement.new(name, 'value')
23 statement = MessageElementStmt.new(name, 'value')
24 message_element.size = statement.size
Brian Silverman96e6d5a2014-03-24 15:55:40 -070025 name = 'Time' if name == '::aos::time::Time'
Brian Silverman76156ca2014-02-22 13:10:42 -080026 next <<END2
Brian Silvermanff12c9f2014-03-19 17:53:29 -070027 static const uint32_t #{name}_p = #{message_element.getTypeID()};
Brian Silverman76156ca2014-02-22 13:10:42 -080028END2
29end.join('')}
Brian Silvermanff12c9f2014-03-19 17:53:29 -070030} // namespace queue_primitive_types
Brian Silverman76156ca2014-02-22 13:10:42 -080031
32// A class for mapping an actual type to a type ID.
33// There are specializations for all of the actual primitive types.
34template<typename T>
35class TypeID {
36 public:
37 static const uint32_t id;
38};
39
40#{TypeNames.collect do |name|
41 message_element = Target::MessageElement.new(name, 'value')
42 statement = MessageElementStmt.new(name, 'value')
43 message_element.size = statement.size
44 next <<END2
45template<>
Brian Silverman96e6d5a2014-03-24 15:55:40 -070046class TypeID< #{name}> {
Brian Silverman76156ca2014-02-22 13:10:42 -080047 public:
48 static const uint32_t id = #{message_element.getTypeID()};
49};
50END2
51end.join('')}
52} // namespace aos
53END
54end