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"] |
| 7 | end.flatten + ['bool', 'float', 'char', 'double'] |
| 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 | |
| 17 | namespace aos { |
| 18 | |
| 19 | enum class QueuePrimitiveTypes : uint32_t { |
| 20 | #{TypeNames.collect do |name| |
| 21 | message_element = Target::MessageElement.new(name, 'value') |
| 22 | statement = MessageElementStmt.new(name, 'value') |
| 23 | message_element.size = statement.size |
| 24 | next <<END2 |
| 25 | #{name}_p = #{message_element.getTypeID()}, |
| 26 | END2 |
| 27 | end.join('')} |
| 28 | }; |
| 29 | |
| 30 | // A class for mapping an actual type to a type ID. |
| 31 | // There are specializations for all of the actual primitive types. |
| 32 | template<typename T> |
| 33 | class TypeID { |
| 34 | public: |
| 35 | static const uint32_t id; |
| 36 | }; |
| 37 | |
| 38 | #{TypeNames.collect do |name| |
| 39 | message_element = Target::MessageElement.new(name, 'value') |
| 40 | statement = MessageElementStmt.new(name, 'value') |
| 41 | message_element.size = statement.size |
| 42 | next <<END2 |
| 43 | template<> |
| 44 | class TypeID<#{name}> { |
| 45 | public: |
| 46 | static const uint32_t id = #{message_element.getTypeID()}; |
| 47 | }; |
| 48 | END2 |
| 49 | end.join('')} |
| 50 | } // namespace aos |
| 51 | END |
| 52 | end |