add generated method for comparing queue messages
Change-Id: I5bd7e94c5b185aceb79c568737d0ceda88dc9042
diff --git a/aos/build/queues/output/q_struct.rb b/aos/build/queues/output/q_struct.rb
index 7211ff0..8e2e811 100644
--- a/aos/build/queues/output/q_struct.rb
+++ b/aos/build/queues/output/q_struct.rb
@@ -1,136 +1,157 @@
class Target::StructDec < Target::StructBase
- attr_accessor :name,:loc,:parent, :extern
- def initialize(name)
- @name = name
- @members = []
- end
- def add_member(member)
- @members << member
- end
- def create_GetType(type_class, cpp_tree)
- member_func = CPP::MemberFunc.new(type_class,"const ::aos::MessageType*","GetType")
- type_class.add_member(member_func)
- member_func.static = true
- member_func.suite << "static ::aos::Once<const ::aos::MessageType> getter(#{type_class.name}::DoGetType)"
- member_func.suite << CPP::Return.new("getter.Get()")
- end
- def create(cpp_tree)
- return self if(@extern)
- orig_namespace = namespace = cpp_tree.get(@loc)
- name = ""
- if(namespace.class < Types::Type) #is nested
- name = namespace.name + "_" + name
- namespace = namespace.space
- end
- type_class = namespace.add_struct(name + @name)
+ attr_accessor :name,:loc,:parent, :extern
+ def initialize(name)
+ @name = name
+ @members = []
+ end
+ def add_member(member)
+ @members << member
+ end
+ def create_GetType(type_class, cpp_tree)
+ member_func = CPP::MemberFunc.new(type_class,"const ::aos::MessageType*","GetType")
+ type_class.add_member(member_func)
+ member_func.static = true
+ member_func.suite << "static ::aos::Once<const ::aos::MessageType> getter(#{type_class.name}::DoGetType)"
+ member_func.suite << CPP::Return.new("getter.Get()")
+ end
+ def create(cpp_tree)
+ return self if(@extern)
+ orig_namespace = namespace = cpp_tree.get(@loc)
+ name = ""
+ if(namespace.class < Types::Type) #is nested
+ name = namespace.name + "_" + name
+ namespace = namespace.space
+ end
+ type_class = namespace.add_struct(name + @name)
- @members.each do |elem|
- type_class.add_member(elem.create_usage(cpp_tree))
- end
- create_DoGetType(type_class, cpp_tree)
- create_GetType(type_class, cpp_tree)
+ @members.each do |elem|
+ type_class.add_member(elem.create_usage(cpp_tree))
+ end
+ create_DoGetType(type_class, cpp_tree)
+ create_GetType(type_class, cpp_tree)
create_DefaultConstructor(type_class, cpp_tree)
create_InOrderConstructor(type_class, cpp_tree)
create_Zero(type_class, cpp_tree)
create_Size(type_class, cpp_tree)
create_Serialize(type_class, cpp_tree)
create_Deserialize(type_class, cpp_tree)
- return type_class
- end
- def getPrintFormat()
- return "{" + @members.collect { |elem| elem.toPrintFormat() }.join(", ") + "}"
- end
- def fetchPrintArgs(args, parent = "")
- @members.each do |elem|
- elem.fetchPrintArgs(args, parent)
- end
- end
- def toHost(offset, suite, parent)
- @members.each do |elem|
- elem.toHost(offset, suite, parent)
- offset += " + #{elem.size()}"
- end
- end
- def toNetwork(offset, suite, parent)
- @members.each do |elem|
- elem.toNetwork(offset, suite, parent)
- offset += " + #{elem.size()}"
- end
- end
- def zeroCall(suite, parent)
- @members.each do |elem|
- elem.zeroCall(suite, parent)
- end
- end
+ create_EqualsNoTime(type_class, cpp_tree)
+ return type_class
+ end
+ def getPrintFormat()
+ return "{" + @members.collect { |elem| elem.toPrintFormat() }.join(", ") + "}"
+ end
+ def fetchPrintArgs(args, parent = "")
+ @members.each do |elem|
+ elem.fetchPrintArgs(args, parent)
+ end
+ end
+ def toHost(offset, suite, parent)
+ @members.each do |elem|
+ elem.toHost(offset, suite, parent)
+ offset += " + #{elem.size()}"
+ end
+ end
+ def toNetwork(offset, suite, parent)
+ @members.each do |elem|
+ elem.toNetwork(offset, suite, parent)
+ offset += " + #{elem.size()}"
+ end
+ end
+ def zeroCall(suite, parent)
+ @members.each do |elem|
+ elem.zeroCall(suite, parent)
+ end
+ end
end
class Target::MessageStructElement < Target::Node
- attr_accessor :name,:loc
- def initialize(type,name)
- @type, @name = type, name
- end
- def type()
- return @type.get_name
- end
- def type_name(cpp_tree)
- type = cpp_tree.get(@type)
- if(@type.loc == @loc) #use relative name
- return type.name
- else #use full name
- return @type.loc.to_cpp_id(type.name)
- end
- end
- def size()
- return @type.size()
- end
- def toPrintFormat()
- @type.getPrintFormat()
- end
- def create_usage(cpp_tree, this_name=nil)
+ attr_accessor :name,:loc
+ def initialize(type,name)
+ @type, @name = type, name
+ end
+ def type()
+ return @type.get_name
+ end
+ def create_EqualsNoTime(type_class,cpp_tree)
+ member_func = CPP::MemberFunc.new(type_class,"bool","EqualsNoTime")
+ member_func.const = true
+ type_class.add_member(member_func)
+ if @members.empty?
+ member_func.args << "const #{type_class.name} &/*other*/"
+ else
+ member_func.args << "const #{type_class.name} &other"
+ end
+ member_func.suite << "if (!#{type_class.parent_class}::EqualsNoTime(other)) return false;" if type_class.parent_class
+ @members.each do |elem|
+ if elem.respond_to? :create_EqualsNoTime
+ member_func.suite << "if (!other.#{elem.name}.EqualsNoTime(#{elem.name})) return false;"
+ else
+ puts elem.class.to_s + ' ' + elem.name.to_s
+ member_func.suite << "if (other.#{elem.name} != #{elem.name}) return false;"
+ end
+ end
+ member_func.suite << CPP::Return.new('true')
+ end
+ def type_name(cpp_tree)
+ type = cpp_tree.get(@type)
+ if(@type.loc == @loc) #use relative name
+ return type.name
+ else #use full name
+ return @type.loc.to_cpp_id(type.name)
+ end
+ end
+ def size()
+ return @type.size()
+ end
+ def toPrintFormat()
+ @type.getPrintFormat()
+ end
+ def create_usage(cpp_tree, this_name=nil)
if (this_name == nil)
this_name = @name
end
- return "#{type_name(cpp_tree)} #{this_name}"
- end
- def add_TypeRegister(cpp_tree, o_type, member_func)
- type = cpp_tree.get(@type)
- tName = @type.loc.to_cpp_id(type.name)
- member_func.suite << "#{tName}::GetType()"
- end
- def fetchPrintArgs(args, parent = "", this_name=nil)
+ return "#{type_name(cpp_tree)} #{this_name}"
+ end
+ def add_TypeRegister(cpp_tree, o_type, member_func)
+ type = cpp_tree.get(@type)
+ tName = @type.loc.to_cpp_id(type.name)
+ member_func.suite << "#{tName}::GetType()"
+ end
+ def fetchPrintArgs(args, parent = "", this_name=nil)
if (this_name == nil)
this_name = @name
end
- @type.fetchPrintArgs(args, parent + "#{this_name}.")
- end
- def toNetwork(offset,suite, parent = "", this_name=nil)
+ @type.fetchPrintArgs(args, parent + "#{this_name}.")
+ end
+ def toNetwork(offset,suite, parent = "", this_name=nil)
if (this_name == nil)
this_name = @name
end
- @type.toNetwork(offset, suite, parent + "#{this_name}.")
- end
- def toHost(offset,suite, parent = "", this_name=nil)
+ @type.toNetwork(offset, suite, parent + "#{this_name}.")
+ end
+ def toHost(offset,suite, parent = "", this_name=nil)
if (this_name == nil)
this_name = @name
end
- @type.toHost(offset, suite, parent + "#{this_name}.")
- end
- def set_message_builder(suite, this_name=nil)
+ @type.toHost(offset, suite, parent + "#{this_name}.")
+ end
+ def set_message_builder(suite, this_name=nil)
if (this_name == nil)
this_name = @name
end
- suite << "msg_ptr_->#{this_name} = #{this_name}"
- end
+ suite << "msg_ptr_->#{this_name} = #{this_name}"
+ end
- def zeroCall(suite, parent = "", this_name=nil)
+ def zeroCall(suite, parent = "", this_name=nil)
if (this_name == nil)
this_name = @name
end
- @type.zeroCall(suite, parent + "#{this_name}.")
- end
- def simpleStr()
- "#{@type.simpleStr()} #{@name}"
- end
- def getTypeID()
- return @type.getTypeID()
- end
+ @type.zeroCall(suite, parent + "#{this_name}.")
+ end
+ def simpleStr()
+ "#{@type.simpleStr()} #{@name}"
+ end
+ def getTypeID()
+ return @type.getTypeID()
+ end
end