void emit_constructor(FILE *fl) { def->emit_template_long(fl); fprintf(fl,"%s",def->name.c_str()); def->emit_template_short(fl); fprintf(fl," *"/*,def->name.c_str()*/); // def->emit_template_short(fl); fprintf(fl,"ctor_%s(",name.c_str()); for(int i=0;i<params.size();++i) { if(types.count(params_canonical[i])) { fprintf(fl,"_alg_ptr<%s > const &pp%d",params[i].c_str(),i); } else fprintf(fl,"%s pp%d",params[i].c_str(),i); if(i!=params.size()-1) fprintf(fl,","); } fprintf(fl,") {\n"); fprintf(fl,"%s",def->name.c_str()); def->emit_template_short(fl); fprintf(fl,"*r=new %s",def->name.c_str()); def->emit_template_short(fl); fprintf(fl,";\nr->_discr=%s;\n",name.c_str()); for(int i=0;i<params.size();++i) { fprintf(fl,"r->s%s.p%d=pp%d;\n",name.c_str(),i,i); if(types.count(params_canonical[i])) fprintf(fl,"r->s%s.p%d._alg_ref();\n",name.c_str(),i); } fprintf(fl,"return r;\n}\n"); }