blob: 6ce179423f34de52f491350306f6a6c83b9b71b5 [file] [log] [blame]
Parker Schuh343481e2014-02-09 18:28:43 -08001class Target::StructDec < Target::Node
2 attr_accessor :name,:loc,:parent, :extern
3 def initialize(name)
4 @name = name
5 @members = []
6 end
Parker Schuh343481e2014-02-09 18:28:43 -08007 def add_member(member)
8 @members << member
9 end
10 def create(cpp_tree)
11 return self if(@extern)
12 orig_namespace = namespace = cpp_tree.get(@loc)
13 name = ""
14 if(namespace.class < Types::Type) #is nested
15 name = namespace.name + "_" + name
16 namespace = namespace.space
17 end
18 type_class = namespace.add_struct(name + @name)
19
20 @members.each do |elem|
21 type_class.add_member(elem.create_usage(cpp_tree))
22 end
23 return type_class
24 end
25 def size()
26 return @size if(@size)
27 @size = 0
28 @members.each do |elem|
29 @size += elem.size
30 end
31 return @size
32 end
33 def getPrintFormat()
34 return "{" + @members.collect { |elem| elem.toPrintFormat() }.join(", ") + "}"
35 end
36 def fetchPrintArgs(args, parent = "")
37 @members.each do |elem|
38 elem.fetchPrintArgs(args, parent)
39 end
40 end
41 def toHost(offset, suite, parent)
42 @members.each do |elem|
43 elem.toHost(offset, suite, parent)
44 offset += elem.size()
45 end
46 end
47 def toNetwork(offset, suite, parent)
48 @members.each do |elem|
49 elem.toNetwork(offset, suite, parent)
50 offset += elem.size()
51 end
52 end
53 def zeroCall(suite, parent)
54 @members.each do |elem|
55 elem.zeroCall(suite, parent)
56 end
57 end
58end
59class Target::MessageStructElement < Target::Node
60 attr_accessor :name,:loc
61 def initialize(type,name)
62 @type, @name = type, name
63 end
64 def type()
65 return @type.get_name
66 end
67 def type_name(cpp_tree)
68 type = cpp_tree.get(@type)
69 if(@type.loc == @loc) #use relative name
70 return type.name
71 else #use full name
72 return @type.loc.to_cpp_id(type.name)
73 end
74 end
75 def size()
76 return @type.size()
77 end
78 def toPrintFormat()
79 @type.getPrintFormat()
80 end
81 def create_usage(cpp_tree)
82 return "#{type_name(cpp_tree)} #{@name}"
83 end
84 def fetchPrintArgs(args, parent = "")
85 @type.fetchPrintArgs(args, parent + "#{@name}.")
86 end
87 def toNetwork(offset,suite, parent = "")
88 @type.toNetwork(offset, suite, parent + "#{@name}.")
89 end
90 def toHost(offset,suite, parent = "")
91 @type.toHost(offset, suite, parent + "#{@name}.")
92 end
93 def set_message_builder(suite)
94 suite << "msg_ptr_->#{@name} = #{@name}"
95 end
96
97 def zeroCall(suite, parent = "")
98 @type.zeroCall(suite, parent + "#{@name}.")
99 end
100
101end