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