Beispiel #1
0
	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");
	}