Added arrays to queues.
Change-Id: Ifcb5ff0ecdbd47e7fa445275195cd7a87e96c20a
diff --git a/aos/build/queues/output/message_dec.rb b/aos/build/queues/output/message_dec.rb
index 903a872..36300ea 100644
--- a/aos/build/queues/output/message_dec.rb
+++ b/aos/build/queues/output/message_dec.rb
@@ -16,7 +16,7 @@
if(member.respond_to?(:add_TypeRegister))
register_members.push(member)
end
- fields << "new ::aos::MessageType::Field{#{tId}, #{fieldName}}"
+ fields << "new ::aos::MessageType::Field{#{tId}, #{member.respond_to?(:length) ? member.length : 0}, #{fieldName}}"
end
register_members.uniq do |member|
member.type
@@ -35,12 +35,12 @@
type_class.add_member(cons)
@members.each do |member|
if member.respond_to?(:type_name)
- type_name = member.type_name(cpp_tree)
+ type_name = "#{member.type_name(cpp_tree)} #{member.name}_in"
else
- type_name = member.type
+ type_name = member.create_usage(cpp_tree, "#{member.name}_in")
end
- cons.args << "#{type_name} #{member.name}_in"
+ cons.args << type_name
cons.add_cons(member.name, member.name + '_in')
end
end
@@ -187,7 +187,7 @@
type_class.set_parent("public ::aos::Message")
ts = self.simpleStr()
self.msg_hash = "0x#{Digest::SHA1.hexdigest(ts)[-8..-1]}"
- type_class.add_member("enum {kQueueLength = 200, kHash = #{self.msg_hash}}")
+ type_class.add_member("enum {kQueueLength = 100, kHash = #{self.msg_hash}}")
@members.each do |elem|
type_class.add_member(elem.create_usage(cpp_tree))
end
@@ -245,22 +245,37 @@
def initialize(type,name)
@type,@name = type,name
end
+ def type()
+ return @type
+ end
+ def type_name(cpp_tree)
+ return type()
+ end
def toPrintFormat()
return printformat
end
- def create_usage(cpp_tree)
- "#{@type} #{@name}"
+ def create_usage(cpp_tree, this_name=nil)
+ if (this_name == nil)
+ this_name = @name
+ end
+ "#{@type} #{this_name}"
end
- def toNetwork(offset,suite, parent = "")
+ def toNetwork(offset,suite, parent = "", this_name=nil)
+ if (this_name == nil)
+ this_name = @name
+ end
suite << f_call = CPP::FuncCall.build("to_network",
- "&#{parent}#{@name}",
+ "&#{parent}#{this_name}",
"&buffer[#{offset}]")
f_call.args.dont_wrap = true
end
- def toHost(offset,suite, parent = "")
+ def toHost(offset,suite, parent = "", this_name=nil)
+ if (this_name == nil)
+ this_name = @name
+ end
suite << f_call = CPP::FuncCall.build("to_host",
"&buffer[#{offset}]",
- "&#{parent}#{@name}")
+ "&#{parent}#{this_name}")
f_call.args.dont_wrap = true
end
def getTypeID()
@@ -271,57 +286,112 @@
def simpleStr()
"#{@type} #{@name}"
end
- def set_message_builder(suite)
- suite << "msg_ptr_->#{@name} = #{@name}"
+ def set_message_builder(suite, this_name=nil)
+ this_name ||= @name
+ suite << "msg_ptr_->#{this_name} = #{this_name}"
end
- def zeroCall(suite, parent = "")
- suite << CPP::Assign.new(parent + @name,@zero)
+ def zeroCall(suite, parent = "", this_name=nil)
+ if (this_name == nil)
+ this_name = @name
+ end
+ suite << CPP::Assign.new(parent + this_name,@zero)
end
- def fetchPrintArgs(args, parent = "")
- if (self.type == 'bool')
- args.push("#{parent}#{self.name} ? 'T' : 'f'")
- elsif (self.type == '::aos::time::Time')
- args.push("AOS_TIME_ARGS(#{parent}#{self.name}.sec(), #{parent}#{self.name}.nsec())")
+ def fetchPrintArgs(args, parent = "", this_name=nil)
+ if (this_name == nil)
+ this_name = @name
+ end
+ if (@type == 'bool')
+ args.push("#{parent}#{this_name} ? 'T' : 'f'")
+ elsif (@type == '::aos::time::Time')
+ args.push("AOS_TIME_ARGS(#{parent}#{this_name}.sec(), #{parent}#{this_name}.nsec())")
else
- args.push("#{parent}#{self.name}")
+ args.push("#{parent}#{this_name}")
end
end
end
class Target::MessageArrayElement < Target::Node
- attr_accessor :name,:loc,:size,:zero,:type
- def initialize(type,name,length)
- @type,@name,@length = type,name,length
+ attr_accessor :loc, :length
+ def initialize(type,length)
+ @type,@length = type,length
end
- def create_usage(cpp_tree)
- "#{@type} #{@name}[#@length]"
+ def zero()
+ return @type.zero()
+ end
+ def name()
+ return @type.name()
+ end
+
+ def add_TypeRegister(*args)
+ if @type.respond_to?(:add_TypeRegister)
+ @type.add_TypeRegister(*args)
+ end
+ end
+
+ def toPrintFormat()
+ return ([@type.toPrintFormat] * @length).join(", ")
+ end
+ def create_usage(cpp_tree, this_name=nil)
+ if (this_name == nil)
+ this_name = name
+ end
+ return "::std::array< #{@type.type_name(cpp_tree)}, #{@length}> #{this_name}"
end
def type()
- "#{@type}[#@length]"
+ return "::std::array< #{@type.type()}, #{@length}>"
+ end
+ def simpleStr()
+ return "#{@type.type} #{@name}[#{@length}]"
+ end
+ def getTypeID()
+ return @type.getTypeID()
end
def size()
- @size * @length
+ return @type.size * @length
end
- def toNetwork(offset,suite)
+ def toNetwork(offset, suite, parent="", this_name=nil)
+ if (this_name == nil)
+ this_name = name
+ end
offset = (offset == 0) ? "" : "#{offset} + "
- suite << for_stmt = CPP::For.new("int i = 0","i < #{@length}","i++")
- for_stmt.suite << f_call = CPP::FuncCall.build("to_network",
- "&(#{@name}[i])",
- "&buffer[i + #{offset}::aos::Message::Size()]")
- f_call.args.dont_wrap = true
+ for_loop_var = getForLoopVar()
+ suite << for_stmt = CPP::For.new("int #{for_loop_var} = 0","#{for_loop_var} < #{@length}","#{for_loop_var}++")
+ @type.toNetwork("#{offset} (#{for_loop_var} * #{@type.size})", for_stmt.suite, parent, "#{this_name}[#{for_loop_var}]")
end
- def toHost(offset,suite)
+ def toHost(offset, suite, parent="", this_name=nil)
+ if (this_name == nil)
+ this_name = name
+ end
offset = (offset == 0) ? "" : "#{offset} + "
- suite << for_stmt = CPP::For.new("int i = 0","i < #{@length}","i++")
- for_stmt.suite << f_call = CPP::FuncCall.build("to_host",
- "&buffer[i + #{offset}::aos::Message::Size()]",
- "&(#{@name}[i])")
- f_call.args.dont_wrap = true
+ for_loop_var = getForLoopVar()
+ suite << for_stmt = CPP::For.new("int #{for_loop_var} = 0","#{for_loop_var} < #{@length}","#{for_loop_var}++")
+ @type.toHost("#{offset} (#{for_loop_var} * #{@type.size})", for_stmt.suite, parent, "#{this_name}[#{for_loop_var}]")
end
- def set_message_builder(suite)
- suite << "memcpy(msg_ptr_->#{@name},#{@name},#@length)"
+ def set_message_builder(suite, this_name=nil)
+ if (this_name == nil)
+ this_name = name
+ end
+
+ for_loop_var = getForLoopVar()
+ suite << for_stmt = CPP::For.new("int #{for_loop_var} = 0","#{for_loop_var} < #{@length}","#{for_loop_var}++")
+ @type.set_message_builder(for_stmt.suite, "#{this_name}[#{for_loop_var}]")
end
- def zeroCall(suite)
- suite << "memset(#@name,0,#{size()})"
+ def zeroCall(suite, parent="", this_name=nil)
+ if (this_name == nil)
+ this_name = name
+ end
+
+ offset = (offset == 0) ? "" : "#{offset} + "
+ for_loop_var = getForLoopVar()
+ suite << for_stmt = CPP::For.new("int #{for_loop_var} = 0","#{for_loop_var} < #{@length}","#{for_loop_var}++")
+ @type.zeroCall(for_stmt.suite, parent, "#{this_name}[#{for_loop_var}]")
+ end
+ def fetchPrintArgs(args, parent = "", this_name=nil)
+ if (this_name == nil)
+ this_name = name
+ end
+ for i in 0..(@length-1)
+ @type.fetchPrintArgs(args, parent, "#{this_name}[#{i}]")
+ end
end
end