+GRAS_DEFINE_TYPE(s_clause,
+struct s_clause {
+ int num_lits;
+ int *literals GRAS_ANNOTE(size,num_lits); /* Tells GRAS where to find the size */
+};)
+typedef struct s_clause Clause;
+
+xbt_error_t test_clause(gras_socket_t sock, int direction) {
+ xbt_error_t errcode;
+ gras_datadesc_type_t ddt,array_t;
+ Clause *i,*j;
+ int cpt;
+
+ INFO0("---- Test on struct containing dynamic array and its size (cbps test) ----");
+
+ /* create and fill the struct */
+ i=xbt_new(Clause,1);
+
+ i->num_lits = 5432;
+ i->literals = xbt_new(int, i->num_lits);
+ for (cpt=0; cpt<i->num_lits; cpt++)
+ i->literals[cpt] = cpt * cpt - ((cpt * cpt) / 2);
+ DEBUG3("created data=%p (within %p @%p)",&(i->num_lits),i,&i);
+ DEBUG1("created count=%d",i->num_lits);
+
+ /* create the damn type descriptor */
+ ddt = gras_datadesc_by_symbol(s_clause);
+/* gras_datadesc_type_dump(ddt); */
+
+ ddt=gras_datadesc_ref("Clause*",ddt);
+
+ TRY(write_read(ddt, &i,&j, sock,direction));
+ if (direction == READ || direction == RW) {
+ xbt_assert(i->num_lits == j->num_lits);
+ for (cpt=0; cpt<i->num_lits; cpt++)
+ xbt_assert(i->literals[cpt] == j->literals[cpt]);
+
+ free(j->literals);
+ free(j);
+ }
+ free(i->literals);
+ free(i);
+ return no_error;
+}
+