static void make_den_info(void) { int nden_s,nden_t,nden_0; writeF("\n char * den_info_ext(int nsub,int n, int * mass, int * width)\n{\n"); writeF(" switch(nsub){\n"); for (nsub = 1; nsub <= subproc_sq; nsub++) { int n=1; marktp mem_start; denlist den_; writeF(" case %d: switch(n){",nsub); mark_(&mem_start); denominatorStatistic(nsub, &nden_s, &nden_t, &nden_0, &den_, NULL); for(n=1 ;den_;den_ = den_->next,n++) { int m=0; writeF("\n case %d: *mass=%d; *width=%d; return \"", n, vararr[den_->mass].num, vararr[den_->width].num); while(den_->momStr[m]) fprintf(outFile,"\\%o",den_->momStr[m++]); fprintf(outFile,"\";"); } writeF("\n default:*mass=0; *width=0; return NULL;\n }\n"); release_(&mem_start); } writeF(" default: *mass=0; *width=0; return NULL;\n }\n}\n"); }
Method& Method::operator=( Method rhs ) { release_(); vm_ = rhs.vm_; method_ = rhs.method_; refCount_ = rhs.refCount_; retain_(); return *this; }
com_ptr& operator=(com_ptr const& rhs) { if (rhs.ptr_) { rhs.ptr_->AddRef(); } release_(); ptr_ = rhs.ptr_; return *this; }
//! allows early release static inline void destroy() { //-- double lock pattern YOCTO_LOCK(access); if( instance_ != NULL ) { YOCTO_LOCK(access); release_(); } }
void save_sos(int ercode) { unsigned nproc; csdiagram cd; marktp mark; if (ercode == -2) /* User Break */ { finish(); sortie(20); /* Restart */ } if (ercode == -1) /* Heap is empty */ { mark.blk_=NULL; mark.pos_=0; release_(&mark); } /* Heap is empty, continue */ /* TooLargeNumber */ /* TooManyIdentifiers */ /* RangeCheckError */ if ((ercode < 0) || (ercode == 7) || (ercode == 11) || (ercode == 12)) /* Restart */ { saveent(10); nproc = ftell(diagrq) - sizeof(cd); fseek(diagrq,nproc,SEEK_SET); FREAD1(cd,diagrq); cd.status = -2; fseek(diagrq,nproc,SEEK_SET); FWRITE1(cd,diagrq); finish(); sortie(20); /* Restart */ } /* not disk space */ if ((ercode == 40)) { finish(); sortie(65); /* End of work */ } if(ercode ==14) { messanykey(10,10," Check model !"); finish(); sortie(62); } }
static aug_chan* chan_process_(aug_chan* ob, aug_chandler* handler, aug_bool* fork) { struct impl_* impl = AUG_PODIMPL(struct impl_, chan_, ob); /* Lock here to prevent release during callback. */ retain_(impl); if (!aug_readychan(handler, &impl->chan_, 0)) { release_(impl); return NULL; } return ob; }
void interpretator(void) { marktp heapbg; void * pscr; double sqrts_mem=sqrts; get_text(1,1,maxCol(),maxRow(),&pscr); clr_scr(FGmain,BGmain); allcanal=(canal*)m_alloc(subproc_sq*sizeof(*allcanal)); mark_(&heapbg); if(compileall()==0) { n_comphep(); free(calcCoef); calcCoef=NULL;} release_(&heapbg); free(allcanal); clr_scr(FGmain,BGmain); put_text(&pscr); sqrts=sqrts_mem; }
static void onediagram(deninforec* dendescript) { catrec cr; marktp bh; varptr totnum, totdenum, rnum; long pos_c; int deg1,nConst; mark_(&bh); tmpNameMax=0; initinfo(); initdegnames(); fseek(catalog,dendescript->cr_pos,SEEK_SET); FREAD1(cr,catalog); ++(diagrcount); whichArchive(cr.nFile,'r'); fseek(archiv,cr.factpos,SEEK_SET); readvardef(archiv); readpolynom(&totnum); readpolynom(&totdenum); clearvardef(); fseek(archiv,cr.rnumpos,SEEK_SET); readvardef(archiv); readpolynom(&rnum); clearvardef(); { outFileOpen("%sresults%cf%d.c",pathtouser,f_slash,diagrcount); labl(); writeF("#include\"num_out.h\"\n"); writeF("#include\"num_in.h\"\n"); } writeF("extern FNN F%d_ext;\n",diagrcount); writeF("static void C%d(REAL * C)\n{\n",diagrcount); writeF("REAL* V=va_ext;\n"); pos_c= ftell(outFile); writeF("%80s\n",""); nConst=write_const(); deg1=cleardegnames(); writeF("}\n"); fseek(outFile,pos_c,SEEK_SET); if(deg1) writeF("REAL S[%d];",deg1); if(tmpNameMax) writeF("REAL tmp[%d];",tmpNameMax ); fseek(outFile,0,SEEK_END); tmpNameMax=0; initdegnames(); writeF("REAL F%d_ext(double GG,REAL*DP,REAL*Q0,COMPLEX*Q1,REAL*Q2)\n{\n",diagrcount); if(!noPict) writpict(cr.ndiagr_ + inftmp->firstdiagpos - 1); writeF("REAL N,D,R; COMPLEX Prop;\n"); writeF("REAL * V=va_ext;\n"); pos_c= ftell(outFile); writeF("%80s\n",""); writeF("if(CalcConst) C%d(C);\n",diagrcount); fortwriter("N",totnum); fortwriter("D",totdenum); fortwriter("R",rnum); writeF("R*=(N/D);\n"); writeF("Prop=1"); writeDenominators(dendescript); writeF("R*=creal(Prop);\n"); if(!noCChain)calcColor(cr.ndiagr_+inftmp->firstdiagpos); writeF(" return R;\n"); writeF("}\n"); deg1=cleardegnames(); if(nConst==0) nConst=1; fseek(outFile,pos_c,SEEK_SET); writeF("static REAL C[%d];",nConst); if(deg1) writeF("REAL S[%d];",deg1); if(tmpNameMax) writeF("REAL tmp[%d];",tmpNameMax ); fseek(outFile,0,SEEK_END); outFileClose(); release_(&bh); }
~com_ptr() { release_(); }
static void chan_release_(aug_chan* ob) { struct impl_* impl = AUG_PODIMPL(struct impl_, chan_, ob); release_(impl); }
static void blob_release_(aug_blob* obj) { struct impl_* impl = AUG_PODIMPL(struct impl_, blob_, obj); release_(impl); }
static void mar_release_(aug_mar* obj) { struct impl_* impl = AUG_PODIMPL(struct impl_, mar_, obj); release_(impl); }
~Synchronized() { release_(t_); }
static int do_send(PROCTBL_P p, u_int msg, int msg_flag) { u_int msgbit; int killRet; #ifdef A_DEBUG dprintf("-smsg: p %d, msg 0%o-", p, s_(msg)); #endif if(p->p_id <= 0) { rxerr("r_sendmsg(): Attempt to send msg to non-existant proc"); return(-1); } if(msg_flag) msgbit= msg; else msgbit= s_(msg); /* * Procs that are stopped can receive only certain messages. */ if(p != COMM && ((p->p_state & P_RUN_ST) == 0) && ((msgbit & (s_(G_KILL)|s_(G_STOP)|s_(G_RUN))) == 0)) { rxerr("r_sendmsg(): Cannot send msg; process is in stop state"); return(-1); } if(inside_clock) { /* * This is the 'int' process, and we are inside the clock * routine. Don't call protect() if it would block! */ InterruptDisable(); if(!p->p_sem) { /* * Just return -2. 'clock()' will try again next * interrupt. */ InterruptEnable(); return(-2); } else protect(&p->p_sem); InterruptEnable(); } else { protect(&p->p_sem); } p->p_msg |= msgbit; /* set message bit */ /* * Signal sending is interlocked so that a signal is sent only * when necessary to wake up the receiving process, OR re-interrupt * a lower priority message currently executing in the receiving * process. */ if( ! (p->p_state & P_NOSIG_ST)) { /* signalling allowed */ /* * If the receiving process is currently not asleep but * processing a message that has allowed re-interrupts, the * re-interrupt mask will specify which messages are permitted * to signal and cause a re-interrupt. */ if(msgbit & ~p->p_rmask) { p->p_state |= P_NOSIG_ST; release_(&p->p_sem); #ifdef A_DEBUG dprintf("-smsg: killing %d-", p->p_id); #endif killRet = kill(p->p_id, S_ALERT); if(killRet == -1) { perror("do_send() kill error"); stufs(p->p_name, &noproc[BLANKS], &noproc[0] + sizeof(noproc)); rxerr(noproc); p->p_state &= ~P_NOSIG_ST; return(-1); } return(0); } } release_(&p->p_sem); return(0); }
Sprite::~Sprite() { release_(); }
static int alldiagrams(FILE * fd, int nsub) { marktp bh; varptr totnum, totdenum, rnum; long pos_c1,pos_c2; int deg1,deg2,tmpn1,tmpn2, nC; catrec cr; deninforec dendescript; mark_(&bh); tmpNameMax=0; initinfo(); initdegnames(); writeF("{\n"); writeF("REAL N,D,R; COMPLEX Prop;\n"); pos_c1= ftell(outFile); writeF("%70s\n",""); writeF("if(CalcConst) C%d(C);\n",nsub); while(FREAD1(dendescript,fd) == 1) { fseek(catalog,dendescript.cr_pos,SEEK_SET); FREAD1(cr,catalog); ++(diagrcount); if(!noPict)writpict(cr.ndiagr_ + inftmp->firstdiagpos - 1); whichArchive(cr.nFile,'r'); fseek(archiv,cr.factpos,SEEK_SET); readvardef(archiv); readpolynom(&totnum); readpolynom(&totdenum); clearvardef(); fseek(archiv,cr.rnumpos,SEEK_SET); readvardef(archiv); readpolynom(&rnum); clearvardef(); fortwriter("N",totnum); fortwriter("D",totdenum); fortwriter("R",rnum); writeF("R*=(N/D);\n"); if(nin+nout>3) { writeF("Prop=1"); writeDenominators(&dendescript); writeF("R*=creal(Prop);\n"); writeF(" if(R>Fmax) Fmax=R; else if(R<-Fmax) Fmax=-R;\n"); } else writeF(";\n"); if(!noCChain)calcColor(cr.ndiagr_+inftmp->firstdiagpos); writeF("ans+=R;\n"); } whichArchive(0,0); writeF("\n}\nreturn ans;\n}\n"); deg1=cleardegnames(); tmpn1=tmpNameMax; tmpNameMax=0; initdegnames(); writeF("\nstatic void C%d(REAL*C)\n{\n",nsub); writeF(" REAL* V=va_ext;\n"); pos_c2= ftell(outFile); writeF("%70s\n",""); nC=write_const(); if(nC==0) nC=1; writeF("}\n"); fseek(outFile,pos_c1,SEEK_SET); writeF("static REAL C[%d];",nC); if(deg1) writeF("REAL S[%d];",deg1); if(tmpn1) writeF("REAL tmp[%d];",tmpn1); fseek(outFile,pos_c2,SEEK_SET); deg2=cleardegnames(); tmpn2=tmpNameMax; if(deg2) writeF("REAL S[%d];",deg2) ; if(tmpn2) writeF("REAL tmp[%d];",tmpn2 ); fseek(outFile,0,SEEK_END); release_(&bh); if( escpressed()) return 1; else return 0; }
static void writesubprocess(int nsub,long firstDiag,long totDiag,int* breaker) { denlist den_; int i; deninforec dendescript; FILE * fd; /* file of (deninforec) */ char fd_name[STRSIZ]; marktp mem_start; nsub1 = nsub; { outFileOpen("%sresults%cd%d.c",pathtouser,f_slash,nsub); labl(); writeF("#include\"num_in.h\"\n"); writeF("#include\"num_out.h\"\n"); } if(totDiag==0) { writeF("extern DNN S%d_ext;\n",nsub); writeF("REAL S%d_ext(double GG, REAL * momenta,int * err)\n{",nsub); writeF(" return 0;\n}\n"); outFileClose(); return; } if(sumDiag) writeF("static void C%d(REAL *);\n",nsub); else { writeF("extern FNN F%d_ext",firstDiag); for(i=1;i<totDiag;i++) writeF(",F%d_ext",i+firstDiag); writeF(";\n"); writeF("static FNN *Farr[%d]={&F%d_ext",totDiag,firstDiag); for(i=1;i<totDiag;i++) writeF(",&F%d_ext",i+firstDiag); writeF("};\n"); } writeF("extern DNN S%d_ext;\n",nsub); writeF("REAL S%d_ext(double GG, REAL * momenta,int * err)\n{",nsub); writeF("REAL ans=0;\n"); sprintf(fd_name,"%stmp%cden.inf",pathtouser,f_slash); fd=fopen(fd_name,"wb"); mark_(&mem_start); denominatorStatistic(nsub, &nden_s, &nden_t, &nden_0, &den_, fd); fclose(fd); nden_w=nden_s+nden_t; writeF("REAL DP[%d];\n",((nin+nout)*(nin+nout-1))/2); writeF("REAL* V=va_ext;\n"); if(nin+nout>3) { int nden= nden_w+nden_0+1; writeF("REAL mass[%d],width[%d];\n",nden,nden); writeF("char * Qtxt[%d];\n",nden); writeF("REAL Q0[%d]; COMPLEX Q1[%d]; REAL Q2[%d];\n",nden_w+nden_0+1, nden_w+nden_0+1,nden_w+nden_0+1); // writeF("sprod_(%d, momenta, DP);\n",nin+nout); /* writeF(" for(i=0;i<nin_ext;i++) s0max+=momenta[4*i];\n"); */ for(;den_;den_ = den_->next) { int m=0; i=den_->order_num; if(den_->width) { if(den_->stype) fprintf(outFile,"width[%d]=%s; ",i,vararr[den_->width].alias); else { i+=nden_s; fprintf(outFile,"width[%d]=(twidth_ext)? %s : 0.; ",i,vararr[den_->width].alias); } }else { i+=nden_w; fprintf(outFile,"width[%d]=0.; ",i); } fprintf(outFile,"mass[%d]=%s; ",i,vararr[den_->mass].alias); fprintf(outFile," Qtxt[%d]=\"",i); /* fprintf(outFile," Q[%d]=mass[%d]*mass[%d]-sqrMom(nin_ext,\"",i,i,i);*/ while(den_->momStr[m]) fprintf(outFile,"\\%o",den_->momStr[m++]); fprintf(outFile,"\";\n"); /* fprintf(outFile,"\",momenta);\n"); */ } writeF("*err=*err|prepDen(%d,nin_ext,BWrange_ext*BWrange_ext,mass,width,Qtxt,momenta,Q0,Q1,Q2);\n", nden_w+nden_0); } writeF("sprod_(%d, momenta, DP);\n",nin+nout); release_(&mem_start); fd=fopen(fd_name,"rb"); if(sumDiag) { *breaker = alldiagrams(fd,nsub); writestatistic(); outFileClose(); } else { writeF("{int i; for(i=0;i<%d;i++) \n",totDiag); writeF( "{ REAL r=Farr[i](GG,DP,Q0,Q1,Q2);\n" " if(r>Fmax) Fmax=r;\n" " ans+=r;\n" "}}\n" "return ans;\n}\n" ); outFileClose(); *breaker = 0; while(FREAD1(dendescript,fd) == 1) { if (escpressed()) { *breaker = 1; break; } onediagram(&dendescript); writestatistic(); } } fclose(fd); unlink(fd_name); } /* WriteSubprocess */
static void stream_release_(aug_stream* ob) { struct impl_* impl = AUG_PODIMPL(struct impl_, stream_, ob); release_(impl); }
static int c_prog_int(void) { int breaker; int i; long dfirst; if(nin+nout<=4) sumDiag=1; else sumDiag=0; memerror=zeroHeep; mark_(&heapbeg); initvararray(0,'c',3); /* ======= Initialisation parth ======= */ firstVar=nmodelvar; if(!strcmp( modelvars[firstVar].varname,strongconst)) firstVar--; prepareprocinform(); calc_nvars_nfunc(); /* ======= End of Initialisation ====== */ { outFileOpen("%sresults%cservice.c",pathtouser,f_slash); labl(); writeF("#include<math.h>\n"); writeF("#include<complex.h>\n"); writeF("#include\"num_out.h\"\n"); writeF("#include\"num_in.h\"\n"); writeF("double BWrange_ext=2.7;\n"); writeF("int twidth_ext=0;\n"); writeF("int gtwidth_ext=0;\n"); writeF("int gswidth_ext=0;\n"); writeF(" REAL va_ext[%d]={0};\n",nvars+nfunc+1); } geninf("nin_ext",nin); geninf("nout_ext",nout); geninf("nprc_ext",subproc_sq); make_pinf(); geninf("nvar_ext",nvars); geninf("nfunc_ext",nfunc); make_vinf(); { make_den_info(); fprintf(outFile,"\nCalcHEP_interface interface_ext={ %d,\n\"%s\"\n,%d, %d, varName_ext,va_ext," "%d, %d, %d, &pinf_ext, &pinfAux_ext, polarized_ext, &calcFunc_ext, &BWrange_ext,&twidth_ext," ">width_ext,&gswidth_ext, &aWidth_ext, &sqme_ext,&den_info_ext,&build_cb_ext, &cb_pow_ext," "&cb_nc_ext, &cb_chains_ext, &cb_coeff_ext, &destroy_cb_ext};\n", forceUG, pathtocalchep,nvars, nfunc, nin,nout,subproc_sq); writeF("\nCalcHEP_interface * PtrInterface_ext=&interface_ext;\n"); outFileClose(); outFileOpen("%sresults%csqme.c",pathtouser,f_slash); labl(); writeF("#include<stdio.h>\n"); writeF("#include<math.h>\n"); writeF("#include<complex.h>\n"); writeF("#include\"num_out.h\"\n"); writeF("#include\"num_in.h\"\n"); } writeF("static int calcall[%d];\n",subproc_sq+1); { writeF("static int particles[%d]={0",1+nin+nout); for(i=0;i<nin+nout;i++) writeF(",0"); writeF("};\n"); } writeF("extern DNN "); for(i=1;i<subproc_sq;i++) writeF("S%d_ext,",i); writeF("S%d_ext;\n",subproc_sq); writeF("static DNN * darr[%d]={",subproc_sq); for(i=1;i<subproc_sq;i++) writeF("&S%d_ext,",i); writeF("&S%d_ext};\n",subproc_sq); fseek(catalog,0,SEEK_END); ndiagrtot = ftell(catalog)/sizeof(catrec); writesubroutineinit(); { make_infbasis(); writeF("#include\"sqme.inc\"\n"); outFileClose(); } diagrcount = 0; inftmp = inf; init_stat(); for (nsub = 1,dfirst=1; nsub <= subproc_sq; nsub++) { int colors[MAXINOUT]; if (inftmp->tot != 0) /* this subprocess IN archive */ { for(i=0;i<nin+nout;i++) { int l; locateinbase(inftmp->p_name[i], &l); colors[i]=prtclbase[l-1].cdim; } for(i=0;i<nin; i++) if(colors[i]==3) colors[i]=-3; else if(colors[i]==-3) colors[i]=3; if(noCChain) for(i=0;i<nin+nout; i++) colors[i]=1; infCbases(nin+nout,colors,&nC,&cBasisPower,&cChains); if(cBasisPower) { cCoefN=malloc(cBasisPower*sizeof(long)); cCoefD=malloc(cBasisPower*sizeof(long)); } writesubprocess(nsub,dfirst,inftmp->tot, &breaker); dfirst+=inftmp->tot; if (breaker) goto exi; if(cBasisPower) { if(cChains){free(cChains); cChains=NULL;} free(cCoefN); free(cCoefD); } } else writesubprocess(nsub,dfirst,0, NULL); inftmp = inftmp->next; } exi: clearstatistic(); release_(&heapbeg); return !breaker; }
Method::~Method() { release_(); }