Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 1 | require File.dirname(__FILE__) + '/load.rb' |
| 2 | |
| 3 | require 'fileutils' |
| 4 | |
| 5 | TypeNames = [8, 16, 32, 64].collect do |size| |
| 6 | ["uint#{size}_t", "int#{size}_t"] |
Brian Silverman | 96e6d5a | 2014-03-24 15:55:40 -0700 | [diff] [blame^] | 7 | end.flatten + ['bool', 'float', 'char', 'double', '::aos::time::Time'] |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 8 | |
| 9 | FileUtils.mkdir_p(File.dirname(ARGV[0])) |
| 10 | WriteIffChanged.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 Silverman | 96e6d5a | 2014-03-24 15:55:40 -0700 | [diff] [blame^] | 17 | #include "aos/common/time.h" |
| 18 | |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 19 | namespace aos { |
Brian Silverman | ff12c9f | 2014-03-19 17:53:29 -0700 | [diff] [blame] | 20 | namespace queue_primitive_types { |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 21 | #{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 Silverman | 96e6d5a | 2014-03-24 15:55:40 -0700 | [diff] [blame^] | 25 | name = 'Time' if name == '::aos::time::Time' |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 26 | next <<END2 |
Brian Silverman | ff12c9f | 2014-03-19 17:53:29 -0700 | [diff] [blame] | 27 | static const uint32_t #{name}_p = #{message_element.getTypeID()}; |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 28 | END2 |
| 29 | end.join('')} |
Brian Silverman | ff12c9f | 2014-03-19 17:53:29 -0700 | [diff] [blame] | 30 | } // namespace queue_primitive_types |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 31 | |
| 32 | // A class for mapping an actual type to a type ID. |
| 33 | // There are specializations for all of the actual primitive types. |
| 34 | template<typename T> |
| 35 | class 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 |
| 45 | template<> |
Brian Silverman | 96e6d5a | 2014-03-24 15:55:40 -0700 | [diff] [blame^] | 46 | class TypeID< #{name}> { |
Brian Silverman | 76156ca | 2014-02-22 13:10:42 -0800 | [diff] [blame] | 47 | public: |
| 48 | static const uint32_t id = #{message_element.getTypeID()}; |
| 49 | }; |
| 50 | END2 |
| 51 | end.join('')} |
| 52 | } // namespace aos |
| 53 | END |
| 54 | end |