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 = <<-HEAD
/* #{structure["s2name"]} */
HEAD
create_definition = <<-CREATE_DEFINITION
{
#{make_null_check("out_object", "S2_OBJECT_IS_NULL")}
*out_object = calloc(1, sizeof(#{structure_name}));
return S2_NO_ERROR;
}
CREATE_DEFINITION
delete_definition = <<-DELETE_DEFINITION
{
#{make_null_check("in_object", "S2_OBJECT_IS_NULL")}
free(in_object);
return S2_NO_ERROR;
}
DELETE_DEFINITION
if !is_source
create_definition = ";"
delete_definition = ";"
end
function_defines += <<-PROTOTYPES
S2Error Create#{structure_name}(#{structure_name}** out_object)#{create_definition}
S2Error Delete#{structure_name}(#{structure_name}* in_object)#{delete_definition}
PROTOTYPES
structure["fields"].each do |field|
field_name = field["name"]
field_type = c_type(field["type"])
get_definition = <<-GET_DEFINITION
{
#{make_null_check("in_object", "S2_OBJECT_IS_NULL")}
#{make_null_check("out_value", "S2_VALUE_IS_NULL")}
*out_value = in_object->#{field_name};
return S2_NO_ERROR;
}
GET_DEFINITION
set_definition = <<-SET_DEFINITION
{
#{make_null_check("in_object", "S2_OBJECT_IS_NULL")}
in_object->#{field_name} = in_value;
return S2_NO_ERROR;
}
SET_DEFINITION
if !is_source
get_definition = ";"
set_definition = ";"
end
function_defines += <<-PROTOTYPES
S2Error Get#{structure_name}_#{field_name}(#{structure_name}* in_object, #{field_type}* out_value)#{get_definition}
S2Error Set#{structure_name}_#{field_name}(#{structure_name}* in_object, #{field_type} in_value)#{set_definition}
PROTOTYPES
end
function_defines
end
|