added mappings from C types to their queue type IDs
diff --git a/aos/build/queues/queue_primitives.rb b/aos/build/queues/queue_primitives.rb
new file mode 100644
index 0000000..bd91191
--- /dev/null
+++ b/aos/build/queues/queue_primitives.rb
@@ -0,0 +1,52 @@
+require File.dirname(__FILE__) + '/load.rb'
+
+require 'fileutils'
+
+TypeNames = [8, 16, 32, 64].collect do |size|
+ ["uint#{size}_t", "int#{size}_t"]
+end.flatten + ['bool', 'float', 'char', 'double']
+
+FileUtils.mkdir_p(File.dirname(ARGV[0]))
+WriteIffChanged.open(ARGV[0]) do |output|
+ output.puts <<END
+// This file is generated by #{File.expand_path(__FILE__)}.
+// DO NOT EDIT BY HAND!
+
+#include <stdint.h>
+
+namespace aos {
+
+enum class QueuePrimitiveTypes : uint32_t {
+#{TypeNames.collect do |name|
+ message_element = Target::MessageElement.new(name, 'value')
+ statement = MessageElementStmt.new(name, 'value')
+ message_element.size = statement.size
+ next <<END2
+ #{name}_p = #{message_element.getTypeID()},
+END2
+end.join('')}
+};
+
+// A class for mapping an actual type to a type ID.
+// There are specializations for all of the actual primitive types.
+template<typename T>
+class TypeID {
+ public:
+ static const uint32_t id;
+};
+
+#{TypeNames.collect do |name|
+ message_element = Target::MessageElement.new(name, 'value')
+ statement = MessageElementStmt.new(name, 'value')
+ message_element.size = statement.size
+ next <<END2
+template<>
+class TypeID<#{name}> {
+ public:
+ static const uint32_t id = #{message_element.getTypeID()};
+};
+END2
+end.join('')}
+} // namespace aos
+END
+end
diff --git a/aos/common/common.gyp b/aos/common/common.gyp
index 088c882..c0ab74d 100644
--- a/aos/common/common.gyp
+++ b/aos/common/common.gyp
@@ -46,10 +46,12 @@
'type': 'static_library',
'variables': {
'print_field_cc': '<(SHARED_INTERMEDIATE_DIR)/print_field.cc',
+ 'queue_primitives_h': '<(SHARED_INTERMEDIATE_DIR)/aos/queue_primitives.h',
},
'sources': [
'queue_types.cc',
'<(print_field_cc)',
+ '<(queue_primitives_h)',
],
'dependencies': [
'<(AOS)/build/aos.gyp:logging_interface',
@@ -73,7 +75,23 @@
'action': ['ruby', '<(script)', '<(print_field_cc)'],
'message': 'Generating print_field.cc',
},
+ {
+ 'variables': {
+ 'script': '<(AOS)/build/queues/queue_primitives.rb',
+ },
+ 'action_name': 'gen_queue_primitives',
+ 'inputs': [
+ '<(script)',
+ '<!@(find <(AOS)/build/queues/ -name *.rb)',
+ ],
+ 'outputs': [
+ '<(queue_primitives_h)',
+ ],
+ 'action': ['ruby', '<(script)', '<(queue_primitives_h)'],
+ 'message': 'Generating queue_primitives.h',
+ },
],
+ 'hard_dependency': 1,
},
{
'target_name': 'queue_types_test',