/* action for struct discovery */ int s_d_prog_struct(void *in, typ type, void *out) { /* Service−agnostic, Program−specific */ if (type == TYPE_STRUCT_tagged_union_i) { struct tagged_union *in_u = in ; struct tagged_union *out_u = out; visit (&in_u->tag, TYPE_INT_i, &out_u->tag); if(in_u->tag) visit(&in_u->u.x, TYPE_INT_i, &out_u->u.x); else visit(&in_u->u.c, TYPE_CHAR_i, &out_u->u.c); return 0; } /*deserialization*/ if(is_reading() ) { return deserial_struct(in, type, out); } /*serialization*/ if(is_writing() ) { return serial_struct(in, type, out); } return 0; }
char* cur_ptr() { return is_reading() ? gptr() : pptr(); }