2 #include "orte-idl-c-backend.h"
8 static void ci_output_impls (IDL_tree tree,OIDL_Run_Info *rinfo,OIDL_C_Info *ci);
12 orte_idl_output_c_impls (IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci)
14 fprintf (ci->fh, OIDL_C_WARNING);
16 fprintf(ci->fh, "#include \"%s.h\"\n\n",ci->base_name);
18 /* Do all the serialization, deserialization etc. */
19 ci_output_impls(tree, rinfo, ci);
24 ci_output_var(IDL_tree val, IDL_tree name, OIDL_C_Info *ci, int type)
28 orte_cbe_write_typespec(ci->fh, val);
32 fprintf(ci->fh, "_serialize(cdrCodec,&(object->");
35 fprintf(ci->fh, "_deserialize(cdrCodec,&(object->");
41 switch(IDL_NODE_TYPE(name)) {
43 fprintf(ci->fh, "%s", IDL_IDENT(name).str);
45 /* case IDLN_TYPE_ARRAY:
49 fprintf(ci->fh, "%s", IDL_IDENT(IDL_TYPE_ARRAY(name).ident).str);
50 for(curitem = IDL_TYPE_ARRAY(name).size_list; curitem; curitem = IDL_LIST(curitem).next) {
51 fprintf(ci->fh, "[%" IDL_LL "d]", IDL_INTEGER(IDL_LIST(curitem).data).value);
56 g_error("Weird varname - %s", IDL_tree_type_names[IDL_NODE_TYPE(name)]);
63 fprintf(ci->fh, ");\n");
67 ci_output_impls_struct(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci)
70 IDL_tree cur,curmem,cur_tspec;
72 id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(IDL_TYPE_STRUCT(tree).ident),
76 fprintf(ci->fh, "/****************************************************************/\n");
77 fprintf(ci->fh, "/* struct - %-50s */\n", id);
78 fprintf(ci->fh, "/****************************************************************/\n\n");
80 fprintf(ci->fh, "void %s_serialize(CDR_Codec *cdrCodec,%s *object) {\n", id, id);
81 // fprintf(ci->fh, " %s *object=(%s*)instance;\n\n", id, id);
83 for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) {
84 for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) {
85 ci_output_var(IDL_MEMBER(IDL_LIST(cur).data).type_spec, IDL_LIST(curmem).data, ci, 0);
88 fprintf(ci->fh, "}\n\n");
91 fprintf(ci->fh, "void\n%s_deserialize(CDR_Codec *cdrCodec,%s *object) {\n", id, id);
92 // fprintf(ci->fh, " %s *object=(%s*)instance;\n\n", id, id);
94 for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) {
95 for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) {
96 ci_output_var(IDL_MEMBER(IDL_LIST(cur).data).type_spec, IDL_LIST(curmem).data, ci, 1);
99 fprintf(ci->fh, "}\n\n");
102 fprintf(ci->fh, "int\n%s_get_max_size(ORTEGetMaxSizeParam *gms) {\n", id);
104 for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) {
105 for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) {
106 fprintf(ci->fh, " ");
107 orte_cbe_write_typespec(ci->fh, IDL_MEMBER(IDL_LIST(cur).data).type_spec);
108 fprintf(ci->fh, "_get_max_size(gms");
110 cur_tspec=IDL_MEMBER(IDL_LIST(cur).data).type_spec;
111 switch (IDL_NODE_TYPE (cur_tspec)) {
112 case IDLN_TYPE_STRING:
113 if (IDL_TYPE_STRING (cur_tspec).positive_int_const) {
114 int length = IDL_INTEGER (IDL_TYPE_STRING (cur_tspec).positive_int_const).value;
115 fprintf(ci->fh, ",%d",length);
121 fprintf(ci->fh, ");\n");
124 fprintf(ci->fh, " return gms->csize;\n");
125 fprintf(ci->fh, "}\n\n");
128 fprintf(ci->fh, "Boolean\n%s_type_register(ORTEDomain *d) {\n", id);
129 fprintf(ci->fh, " Boolean ret;\n\n");
130 fprintf(ci->fh, " ret=ORTETypeRegisterAdd(d,\n");
131 fprintf(ci->fh, " \"%s\",\n",id);
132 fprintf(ci->fh, " (ORTETypeSerialize)%s_serialize,\n",id);
133 fprintf(ci->fh, " (ORTETypeDeserialize)%s_deserialize,\n",id);
134 fprintf(ci->fh, " %s_get_max_size,\n",id);
135 fprintf(ci->fh, " 0);\n");
136 fprintf(ci->fh, " return ret;\n");
137 fprintf(ci->fh, "}\n\n");
139 /* Scan for any nested decls */
140 /* for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) {
142 ts = IDL_MEMBER(IDL_LIST(cur).data).type_spec;
143 switch (IDL_NODE_TYPE (ts)) {
144 case IDLN_TYPE_STRUCT:
145 ch_output_decl(ts, rinfo, ci);
157 ci_output_impls (IDL_tree tree,
158 OIDL_Run_Info *rinfo,
164 switch (IDL_NODE_TYPE (tree)) {
165 case IDLN_TYPE_STRUCT:
166 ci_output_impls_struct (tree, rinfo, ci);
172 switch (IDL_NODE_TYPE (tree)) {
174 ci_output_impls (IDL_MODULE (tree).definition_list, rinfo, ci);
179 for (sub = tree; sub; sub = IDL_LIST (sub).next) {
180 ci_output_impls (IDL_LIST (sub).data, rinfo, ci);
185 ci_output_impls (IDL_INTERFACE (tree).body, rinfo, ci);