blob: 45687ea55159d80d83508c57d6de8963d727ea72 [file] [log] [blame]
Brian Silverman43216322015-09-13 02:23:09 -04001require_relative 'load.rb'
Brian Silverman76156ca2014-02-22 13:10:42 -08002
3require 'fileutils'
4
5TypeNames = [8, 16, 32, 64].collect do |size|
6 ["uint#{size}_t", "int#{size}_t"]
Austin Schuhbccac532016-12-10 13:51:35 -08007end.flatten + ['bool', 'float', 'char', 'double', '::aos::monotonic_clock::time_point']
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
Austin Schuhbccac532016-12-10 13:51:35 -080025 name = 'Time' if name == '::aos::monotonic_clock::time_point'
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