56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/s2/internal/c.rb', line 56
def make_function_defines(structure_name, structure, is_source:)
function_defines = "/* \#{structure[\"s2name\"]} */ \n HEAD\n\n\n create_definition = <<-CREATE_DEFINITION\n\n{\n\#{make_null_check(\"out_object\", \"S2_OBJECT_IS_NULL\")}\n *out_object = calloc(1, sizeof(\#{structure_name}));\n return S2_NO_ERROR;\n}\n CREATE_DEFINITION\n\n delete_definition = <<-DELETE_DEFINITION\n\n{\n\#{make_null_check(\"in_object\", \"S2_OBJECT_IS_NULL\")}\n free(in_object);\n return S2_NO_ERROR;\n}\n DELETE_DEFINITION\n\n if !is_source\n create_definition = \";\"\n delete_definition = \";\"\n end\n\n function_defines += <<-PROTOTYPES\nS2Error Create\#{structure_name}(\#{structure_name}** out_object)\#{create_definition}\nS2Error Delete\#{structure_name}(\#{structure_name}* in_object)\#{delete_definition}\n PROTOTYPES\n\n structure[\"fields\"].each do |field|\n field_name = field[\"name\"]\n field_type = c_type(field[\"type\"])\n\n get_definition = <<-GET_DEFINITION\n\n{\n\#{make_null_check(\"in_object\", \"S2_OBJECT_IS_NULL\")}\n\#{make_null_check(\"out_value\", \"S2_VALUE_IS_NULL\")}\n *out_value = in_object->\#{field_name};\n return S2_NO_ERROR;\n}\n GET_DEFINITION\n\n set_definition = <<-SET_DEFINITION\n\n{\n\#{make_null_check(\"in_object\", \"S2_OBJECT_IS_NULL\")}\n in_object->\#{field_name} = in_value;\n return S2_NO_ERROR;\n}\n SET_DEFINITION\n\n if !is_source\n get_definition = \";\"\n set_definition = \";\"\n end\n\n function_defines += <<-PROTOTYPES\nS2Error Get\#{structure_name}_\#{field_name}(\#{structure_name}* in_object, \#{field_type}* out_value)\#{get_definition}\nS2Error Set\#{structure_name}_\#{field_name}(\#{structure_name}* in_object, \#{field_type} in_value)\#{set_definition}\n PROTOTYPES\n \n\n end\n\n function_defines\nend\n"
|