<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>DSDP: src/vecmat/sdporder.c Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.7.4 --> <div id="top"> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">DSDP</div> </td> </tr> </tbody> </table> </div> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_23046874d7fed141927c769a66d8e3a5.html">src</a> </li> <li class="navelem"><a class="el" href="dir_9706e2f7b84d8f85001c7784fc3e51fe.html">vecmat</a> </li> </ul> </div> </div> <div class="header"> <div class="headertitle"> <div class="title">sdporder.c</div> </div> </div> <div class="contents"> <div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include "numchol.h"</span> <a name="l00002"></a>00002 <a name="l00003"></a>00003 <span class="keywordtype">int</span> OdAlloc(<span class="keywordtype">int</span> nnod, <a name="l00004"></a>00004 <span class="keywordtype">int</span> nn0, <a name="l00005"></a>00005 <span class="keywordtype">char</span> *info, <a name="l00006"></a>00006 order **rr) <a name="l00007"></a>00007 { <a name="l00008"></a>00008 order *r; <a name="l00009"></a>00009 <span class="keywordtype">int</span> ierr=0; <a name="l00010"></a>00010 <a name="l00011"></a>00011 r=(order*)calloc(1,<span class="keyword">sizeof</span>(order)); <a name="l00012"></a>00012 <span class="keywordflow">if</span> (!r) ExitProc(OutOfSpc,info); <a name="l00013"></a>00013 <a name="l00014"></a>00014 r->nnod=nnod; <a name="l00015"></a>00015 r->nn0 =nn0; <a name="l00016"></a>00016 <a name="l00017"></a>00017 ierr=iAlloc(nn0,info,&r->adjn); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00018"></a>00018 ierr=iAlloc(nnod,info,&r->rbeg); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00019"></a>00019 ierr=iAlloc(nnod,info,&r->rexs); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00020"></a>00020 ierr=iAlloc(nnod,info,&r->rlen); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00021"></a>00021 ierr=iAlloc(nnod,info,&r->rend); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00022"></a>00022 ierr=iAlloc(nnod,info,&r->pres); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00023"></a>00023 ierr=iAlloc(nnod,info,&r->succ); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> 1; <a name="l00024"></a>00024 *rr=r; <a name="l00025"></a>00025 <span class="keywordflow">return</span> (0); <a name="l00026"></a>00026 } <span class="comment">/* OdAlloc */</span> <a name="l00027"></a>00027 <a name="l00028"></a>00028 <span class="keywordtype">void</span> OdFree(order **od) <a name="l00029"></a>00029 { <a name="l00030"></a>00030 order *r; <a name="l00031"></a>00031 <a name="l00032"></a>00032 <span class="keywordflow">if</span> (*od) { <a name="l00033"></a>00033 r=*od; <a name="l00034"></a>00034 iFree(&r->adjn); <a name="l00035"></a>00035 iFree(&r->rbeg); <a name="l00036"></a>00036 iFree(&r->rexs); <a name="l00037"></a>00037 iFree(&r->rlen); <a name="l00038"></a>00038 iFree(&r->rend); <a name="l00039"></a>00039 iFree(&r->pres); <a name="l00040"></a>00040 iFree(&r->succ); <a name="l00041"></a>00041 free(*od); <a name="l00042"></a>00042 *od=NULL; <a name="l00043"></a>00043 } <a name="l00044"></a>00044 } <span class="comment">/* OdFree */</span> <a name="l00045"></a>00045 <a name="l00046"></a>00046 <span class="keywordtype">void</span> OdInit(order *od, <a name="l00047"></a>00047 <span class="keywordtype">int</span> *nnzi) <a name="l00048"></a>00048 { <a name="l00049"></a>00049 <span class="keywordtype">int</span> i,n=od->nnod; <a name="l00050"></a>00050 <a name="l00051"></a>00051 <span class="keywordflow">if</span> (n) { <a name="l00052"></a>00052 od->rexs[0]=nnzi[0]; <a name="l00053"></a>00053 od->rlen[0]=nnzi[0]; <a name="l00054"></a>00054 od->rbeg[0]=0; <a name="l00055"></a>00055 od->pres[0]=n; <a name="l00056"></a>00056 od->succ[0]=1; <a name="l00057"></a>00057 <span class="keywordflow">for</span>(i=1; i<od->nnod; ++i) { <a name="l00058"></a>00058 od->pres[i]=i-1; <a name="l00059"></a>00059 od->succ[i]=i+1; <a name="l00060"></a>00060 od->rexs[i]=nnzi[i]; <a name="l00061"></a>00061 od->rlen[i]=nnzi[i]; <a name="l00062"></a>00062 od->rbeg[i]=od->rbeg[i-1]+od->rlen[i-1]; <a name="l00063"></a>00063 } <a name="l00064"></a>00064 <a name="l00065"></a>00065 od->succ[n-1]=n; <a name="l00066"></a>00066 od->last =n-1; <a name="l00067"></a>00067 <a name="l00068"></a>00068 od->raft=od->rbeg[n-1]+nnzi[n-1]; <a name="l00069"></a>00069 <a name="l00070"></a>00070 <span class="keywordflow">if</span> (od->raft>od->nn0) <a name="l00071"></a>00071 ExitProc(OutOfSpc,<span class="stringliteral">"InitMmd"</span>); <a name="l00072"></a>00072 } <a name="l00073"></a>00073 } <span class="comment">/* OdInit */</span> <a name="l00074"></a>00074 <a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">void</span> OdSet(order *od, <a name="l00076"></a>00076 <span class="keywordtype">int</span> allow_eli, <a name="l00077"></a>00077 xlist *elist, <a name="l00078"></a>00078 <span class="keywordtype">int</span> *node_status, <a name="l00079"></a>00079 <span class="keywordtype">int</span> *marker, <a name="l00080"></a>00080 <span class="keywordtype">int</span> *isize, <a name="l00081"></a>00081 <span class="keywordtype">int</span> *ilink, <a name="l00082"></a>00082 <span class="keywordtype">int</span> *oinfo, <a name="l00083"></a>00083 <span class="keywordtype">int</span> *osize, <a name="l00084"></a>00084 <span class="keywordtype">int</span> *e, <a name="l00085"></a>00085 <span class="keywordtype">int</span> *p) <a name="l00086"></a>00086 { <a name="l00087"></a>00087 <span class="keywordtype">int</span> i,n,deg,*rbeg,*rexs,*rend; <a name="l00088"></a>00088 <a name="l00089"></a>00089 n =od->nnod; <a name="l00090"></a>00090 rbeg=od->rbeg; <a name="l00091"></a>00091 rexs=od->rexs; <a name="l00092"></a>00092 rend=od->rend; <a name="l00093"></a>00093 *e =0; <a name="l00094"></a>00094 <a name="l00095"></a>00095 <span class="keywordflow">for</span> (i=0; i<n; i++) { <a name="l00096"></a>00096 isize[i] =0; <a name="l00097"></a>00097 ilink[i] =n; <a name="l00098"></a>00098 osize[i] =0; <a name="l00099"></a>00099 oinfo[i] =n; <a name="l00100"></a>00100 marker[i]=0; <a name="l00101"></a>00101 } <a name="l00102"></a>00102 <a name="l00103"></a>00103 <span class="keywordflow">for</span>(i=0; i<n; ++i) { <a name="l00104"></a>00104 rbeg[i] -= rexs[i]; <a name="l00105"></a>00105 rend[i] = 0; <a name="l00106"></a>00106 } <a name="l00107"></a>00107 <a name="l00108"></a>00108 <span class="keywordflow">for</span>(i=0; i<n; ++i) { <a name="l00109"></a>00109 deg = rexs[i]; <a name="l00110"></a>00110 <span class="keywordflow">if</span> (!allow_eli||deg) { <a name="l00111"></a>00111 node_status[i]=1; <a name="l00112"></a>00112 XtPut(elist,i,deg); <a name="l00113"></a>00113 } <a name="l00114"></a>00114 <span class="keywordflow">else</span> { <a name="l00115"></a>00115 node_status[i] = 0; <a name="l00116"></a>00116 marker[i] = TRUE; <a name="l00117"></a>00117 p[*e] = i; <a name="l00118"></a>00118 (*e)++; <a name="l00119"></a>00119 } <a name="l00120"></a>00120 } <a name="l00121"></a>00121 } <span class="comment">/* OdSet */</span> <a name="l00122"></a>00122 <a name="l00123"></a>00123 <span class="keywordtype">void</span> OdIndex(order *od, <a name="l00124"></a>00124 <span class="keywordtype">int</span> i, <a name="l00125"></a>00125 <span class="keywordtype">int</span> j) <a name="l00126"></a>00126 { <a name="l00127"></a>00127 <span class="keywordflow">if</span> (i!=j) { <a name="l00128"></a>00128 od->adjn[od->rbeg[i]++]=j; <a name="l00129"></a>00129 od->adjn[od->rbeg[j]++]=i; <a name="l00130"></a>00130 } <a name="l00131"></a>00131 } <span class="comment">/* OdIndex */</span> <a name="l00132"></a>00132 <a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keywordtype">void</span> OdArriv(order *od, <a name="l00134"></a>00134 <span class="keywordtype">int</span> *node_status, <a name="l00135"></a>00135 <span class="keywordtype">int</span> *marker, <a name="l00136"></a>00136 <span class="keywordtype">int</span> *isize, <a name="l00137"></a>00137 <span class="keywordtype">int</span> x, <a name="l00138"></a>00138 <span class="keywordtype">int</span> *xdeg, <a name="l00139"></a>00139 <span class="keywordtype">int</span> *rsze, <a name="l00140"></a>00140 <span class="keywordtype">int</span> *esze, <a name="l00141"></a>00141 <span class="keywordtype">int</span> *rchset) <a name="l00142"></a>00142 { <a name="l00143"></a>00143 <span class="keywordtype">int</span> *visited,i,n,y,z,l,s,t,f,stopt, <a name="l00144"></a>00144 stops,*adjn,*rbeg,*rexs,*rend; <a name="l00145"></a>00145 <a name="l00146"></a>00146 n =od->nnod; <a name="l00147"></a>00147 adjn =od->adjn; <a name="l00148"></a>00148 rbeg =od->rbeg; <a name="l00149"></a>00149 rexs =od->rexs; <a name="l00150"></a>00150 rend =od->rend; <a name="l00151"></a>00151 *rsze=0; <a name="l00152"></a>00152 *esze=0; <a name="l00153"></a>00153 <a name="l00154"></a>00154 <span class="keywordflow">if</span> (rexs[x]) { <a name="l00155"></a>00155 l=n; <a name="l00156"></a>00156 <a name="l00157"></a>00157 visited=marker; <a name="l00158"></a>00158 visited[x]=TRUE; <a name="l00159"></a>00159 <a name="l00160"></a>00160 <span class="keywordflow">for</span>(t=rbeg[x], stopt=rbeg[x]+rend[x]; t<stopt; ++t) { <a name="l00161"></a>00161 y=adjn[t]; <a name="l00162"></a>00162 <a name="l00163"></a>00163 <span class="keywordflow">if</span> (node_status[y]!=0) { <a name="l00164"></a>00164 l--; <a name="l00165"></a>00165 rchset[l]=y; <a name="l00166"></a>00166 visited[y]=TRUE; <a name="l00167"></a>00167 <a name="l00168"></a>00168 <span class="keywordflow">for</span>(s=rbeg[y], stops=rbeg[y]+rexs[y]; s<stops; ++s) { <a name="l00169"></a>00169 z=adjn[s]; <a name="l00170"></a>00170 <a name="l00171"></a>00171 <span class="keywordflow">if</span> (node_status[z]!=0) { <a name="l00172"></a>00172 <span class="keywordflow">if</span> (!visited[z]) { <a name="l00173"></a>00173 visited[z]=TRUE; <a name="l00174"></a>00174 <a name="l00175"></a>00175 rchset[*rsze]=z; <a name="l00176"></a>00176 (*rsze)++; <a name="l00177"></a>00177 } <a name="l00178"></a>00178 } <a name="l00179"></a>00179 } <a name="l00180"></a>00180 } <a name="l00181"></a>00181 } <a name="l00182"></a>00182 <a name="l00183"></a>00183 f=rbeg[x]+rend[x]; <a name="l00184"></a>00184 <span class="keywordflow">for</span>(t=f, stopt=rbeg[x]+rexs[x]; t<stopt; ++t) { <a name="l00185"></a>00185 y=adjn[t]; <a name="l00186"></a>00186 <span class="keywordflow">if</span> (!visited[y]) { <a name="l00187"></a>00187 adjn[f++]=y; <a name="l00188"></a>00188 visited[y]=TRUE; <a name="l00189"></a>00189 <a name="l00190"></a>00190 rchset[*rsze]=y; <a name="l00191"></a>00191 (*rsze)++; <a name="l00192"></a>00192 } <a name="l00193"></a>00193 } <a name="l00194"></a>00194 <a name="l00195"></a>00195 rexs[x]=f-rbeg[x]; <a name="l00196"></a>00196 <a name="l00197"></a>00197 *esze=n-l; <a name="l00198"></a>00198 visited[x] = FALSE; <a name="l00199"></a>00199 iZero(*rsze,visited,rchset); <a name="l00200"></a>00200 iZero(n-l,visited,rchset+l); <a name="l00201"></a>00201 } <a name="l00202"></a>00202 <a name="l00203"></a>00203 <span class="keywordflow">if</span> (xdeg) { <a name="l00204"></a>00204 *xdeg = *rsze+isize[x]; <a name="l00205"></a>00205 <span class="keywordflow">for</span>(i=0; i<*rsze; ++i) <a name="l00206"></a>00206 *xdeg+=isize[rchset[i]]; <a name="l00207"></a>00207 } <a name="l00208"></a>00208 } <span class="comment">/* OdArriv */</span> <a name="l00209"></a>00209 <a name="l00210"></a>00210 <span class="keyword">static</span> <span class="keywordtype">void</span> OdRenew(order *od, <a name="l00211"></a>00211 <span class="keywordtype">int</span> *ilink, <a name="l00212"></a>00212 <span class="keywordtype">int</span> x, <a name="l00213"></a>00213 <span class="keywordtype">int</span> xdeg, <a name="l00214"></a>00214 <span class="keywordtype">int</span> *e, <a name="l00215"></a>00215 <span class="keywordtype">int</span> *p) <a name="l00216"></a>00216 { <a name="l00217"></a>00217 <span class="keywordtype">int</span> c,n; <a name="l00218"></a>00218 <a name="l00219"></a>00219 n =od->nnod; <a name="l00220"></a>00220 od->ntot+=xdeg--; <a name="l00221"></a>00221 p[*e] =x; <a name="l00222"></a>00222 (*e)++; <a name="l00223"></a>00223 <span class="keywordflow">for</span>(c=x; ilink[c]!=n; c=ilink[c]) { <a name="l00224"></a>00224 od->ntot+=xdeg--; <a name="l00225"></a>00225 p[*e] =ilink[c]; <a name="l00226"></a>00226 (*e)++; <a name="l00227"></a>00227 } <a name="l00228"></a>00228 } <span class="comment">/* OdRenew */</span> <a name="l00229"></a>00229 <a name="l00230"></a>00230 <span class="keyword">static</span> <span class="keywordtype">void</span> OdCheck(order *od, <a name="l00231"></a>00231 <span class="keywordtype">int</span> *node_status) <a name="l00232"></a>00232 { <a name="l00233"></a>00233 <span class="keywordtype">int</span> f,i,t,stopt,rnew,z,previous,n,*adjn, <a name="l00234"></a>00234 *rbeg,*rexs,*rlen,*rend,*pres,*succ; <a name="l00235"></a>00235 <a name="l00236"></a>00236 n =od->nnod; <a name="l00237"></a>00237 adjn=od->adjn; <a name="l00238"></a>00238 rbeg=od->rbeg; <a name="l00239"></a>00239 rexs=od->rexs; <a name="l00240"></a>00240 rlen=od->rlen; <a name="l00241"></a>00241 rend=od->rend; <a name="l00242"></a>00242 pres=od->pres; <a name="l00243"></a>00243 succ=od->succ; <a name="l00244"></a>00244 <a name="l00245"></a>00245 f=0; <a name="l00246"></a>00246 previous=n; <a name="l00247"></a>00247 <span class="keywordflow">for</span>(i=od->head; i!=n; i=succ[i]) { <a name="l00248"></a>00248 <span class="keywordflow">if</span> (node_status[i]!=0) { <a name="l00249"></a>00249 rnew=f; <a name="l00250"></a>00250 <a name="l00251"></a>00251 <span class="keywordflow">for</span>(t=rbeg[i], stopt=rbeg[i]+rend[i]; t<stopt; ++t) { <a name="l00252"></a>00252 z=adjn[t]; <a name="l00253"></a>00253 <span class="keywordflow">if</span> (node_status[z]==3) <a name="l00254"></a>00254 adjn[f++]=z; <a name="l00255"></a>00255 } <a name="l00256"></a>00256 <a name="l00257"></a>00257 rend[i]=f-rnew; <a name="l00258"></a>00258 <a name="l00259"></a>00259 <span class="keywordflow">for</span>(stopt=rbeg[i]+rexs[i]; t<stopt; ++t) { <a name="l00260"></a>00260 z=adjn[t]; <a name="l00261"></a>00261 <span class="keywordflow">if</span> (node_status[z]!=0) <a name="l00262"></a>00262 adjn[f++]=z; <a name="l00263"></a>00263 } <a name="l00264"></a>00264 <a name="l00265"></a>00265 rexs[i]=f-rnew; <a name="l00266"></a>00266 rlen[i]=rexs[i]; <a name="l00267"></a>00267 <a name="l00268"></a>00268 rbeg[i]=rnew; <a name="l00269"></a>00269 <a name="l00270"></a>00270 <span class="keywordflow">if</span> (previous==n) { <a name="l00271"></a>00271 od->head=i; <a name="l00272"></a>00272 pres[i]=n; <a name="l00273"></a>00273 } <a name="l00274"></a>00274 <a name="l00275"></a>00275 <span class="keywordflow">else</span> { <a name="l00276"></a>00276 succ[previous]=i; <a name="l00277"></a>00277 pres[i]=previous; <a name="l00278"></a>00278 } <a name="l00279"></a>00279 previous=i; <a name="l00280"></a>00280 } <a name="l00281"></a>00281 } <a name="l00282"></a>00282 <a name="l00283"></a>00283 <span class="keywordflow">if</span> (previous!=n) { <a name="l00284"></a>00284 succ[previous]=n; <a name="l00285"></a>00285 od->raft=rbeg[previous]+rexs[previous]; <a name="l00286"></a>00286 } <a name="l00287"></a>00287 <a name="l00288"></a>00288 od->last=previous; <a name="l00289"></a>00289 } <span class="comment">/* OdCheck */</span> <a name="l00290"></a>00290 <a name="l00291"></a>00291 <span class="keyword">static</span> <span class="keywordtype">void</span> OdAdd(order *od, <a name="l00292"></a>00292 <span class="keywordtype">int</span> *node_status, <a name="l00293"></a>00293 <span class="keywordtype">int</span> x, <a name="l00294"></a>00294 <span class="keywordtype">int</span> newsze) <a name="l00295"></a>00295 { <a name="l00296"></a>00296 <span class="keywordtype">int</span> n,*adjn,*rbeg,*rexs,*rlen,*pres,*succ; <a name="l00297"></a>00297 <a name="l00298"></a>00298 n =od->nnod; <a name="l00299"></a>00299 adjn=od->adjn; <a name="l00300"></a>00300 rbeg=od->rbeg; <a name="l00301"></a>00301 rexs=od->rexs; <a name="l00302"></a>00302 rlen=od->rlen; <a name="l00303"></a>00303 pres=od->pres; <a name="l00304"></a>00304 succ=od->succ; <a name="l00305"></a>00305 <a name="l00306"></a>00306 <span class="keywordflow">if</span> (newsze<=rlen[x]) <a name="l00307"></a>00307 <span class="keywordflow">return</span>; <a name="l00308"></a>00308 <a name="l00309"></a>00309 <span class="keywordflow">if</span> (od->raft+newsze>od->nn0) <a name="l00310"></a>00310 OdCheck(od,node_status); <a name="l00311"></a>00311 <a name="l00312"></a>00312 <span class="keywordflow">if</span> (od->raft+newsze>od->nn0) <a name="l00313"></a>00313 ExitProc(OutOfSpc,<span class="stringliteral">"OdAdd"</span>); <a name="l00314"></a>00314 <a name="l00315"></a>00315 <span class="keywordflow">if</span> (pres[x]!=n) <a name="l00316"></a>00316 rlen[pres[x]]+=rlen[x]; <a name="l00317"></a>00317 <a name="l00318"></a>00318 iCopy(rexs[x],adjn+rbeg[x],adjn+od->raft); <a name="l00319"></a>00319 rbeg[x]=od->raft; <a name="l00320"></a>00320 rlen[x]=newsze; <a name="l00321"></a>00321 od->raft+=newsze; <a name="l00322"></a>00322 <a name="l00323"></a>00323 <span class="keywordflow">if</span> (pres[x]==n) { <a name="l00324"></a>00324 <span class="keywordflow">if</span> (succ[x]==n) <a name="l00325"></a>00325 od->head=x; <a name="l00326"></a>00326 <span class="keywordflow">else</span> <a name="l00327"></a>00327 od->head=succ[x]; <a name="l00328"></a>00328 } <a name="l00329"></a>00329 <a name="l00330"></a>00330 <span class="keywordflow">else</span> { <a name="l00331"></a>00331 <span class="keywordflow">if</span> (succ[x]==n) <a name="l00332"></a>00332 succ[pres[x]]=x; <a name="l00333"></a>00333 <span class="keywordflow">else</span> <a name="l00334"></a>00334 succ[pres[x]]=succ[x]; <a name="l00335"></a>00335 } <a name="l00336"></a>00336 <a name="l00337"></a>00337 <span class="keywordflow">if</span> (succ[x]!=n) <a name="l00338"></a>00338 pres[succ[x]]=pres[x]; <a name="l00339"></a>00339 <a name="l00340"></a>00340 <span class="keywordflow">if</span> (od->last!=x) { <a name="l00341"></a>00341 succ[od->last]=x; <a name="l00342"></a>00342 pres[x]=od->last; <a name="l00343"></a>00343 } <a name="l00344"></a>00344 <a name="l00345"></a>00345 succ[x] =n; <a name="l00346"></a>00346 od->last=x; <a name="l00347"></a>00347 } <span class="comment">/* OdAdd */</span> <a name="l00348"></a>00348 <a name="l00349"></a>00349 <span class="keyword">static</span> <span class="keywordtype">int</span> OdComb(order *od, <a name="l00350"></a>00350 <span class="keywordtype">int</span> *node_status, <a name="l00351"></a>00351 <span class="keywordtype">int</span> *marker, <a name="l00352"></a>00352 <span class="keywordtype">int</span> *isize, <a name="l00353"></a>00353 <span class="keywordtype">int</span> *ilink, <a name="l00354"></a>00354 <span class="keywordtype">int</span> *osize, <a name="l00355"></a>00355 <span class="keywordtype">int</span> xsize, <a name="l00356"></a>00356 <span class="keywordtype">int</span> *xset) <a name="l00357"></a>00357 { <a name="l00358"></a>00358 <span class="keywordtype">int</span> i,n,rnew,rlen,x,icur; <a name="l00359"></a>00359 <a name="l00360"></a>00360 n =od->nnod; <a name="l00361"></a>00361 rlen=0; <a name="l00362"></a>00362 <a name="l00363"></a>00363 <span class="keywordflow">if</span> (xsize==0) <a name="l00364"></a>00364 rnew=n; <a name="l00365"></a>00365 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xsize==1) <a name="l00366"></a>00366 rnew=xset[0]; <a name="l00367"></a>00367 <span class="keywordflow">else</span> { <a name="l00368"></a>00368 rnew=xset[0]; <a name="l00369"></a>00369 <span class="keywordflow">for</span>(i=1; i<xsize; ++i) <a name="l00370"></a>00370 rlen+=1+isize[xset[i]]; <a name="l00371"></a>00371 <a name="l00372"></a>00372 node_status[rnew]=1; <a name="l00373"></a>00373 osize[rnew]=0; <a name="l00374"></a>00374 <a name="l00375"></a>00375 <span class="keywordflow">for</span>(icur=rnew; ilink[icur]!=n; icur=ilink[icur]); <a name="l00376"></a>00376 isize[rnew]+=rlen; <a name="l00377"></a>00377 <a name="l00378"></a>00378 <span class="keywordflow">for</span>(i=1; i<xsize; ++i) { <a name="l00379"></a>00379 x=xset[i]; <a name="l00380"></a>00380 <a name="l00381"></a>00381 node_status[x]=0; <a name="l00382"></a>00382 marker[x]=TRUE; <a name="l00383"></a>00383 <a name="l00384"></a>00384 ilink[icur]=x; <a name="l00385"></a>00385 <a name="l00386"></a>00386 <span class="keywordflow">for</span>(icur=x; ilink[icur]!=n; icur=ilink[icur]); <a name="l00387"></a>00387 <a name="l00388"></a>00388 isize[x]=0; <a name="l00389"></a>00389 } <a name="l00390"></a>00390 } <a name="l00391"></a>00391 <a name="l00392"></a>00392 <span class="keywordflow">return</span> (rnew); <a name="l00393"></a>00393 } <span class="comment">/* OdComb */</span> <a name="l00394"></a>00394 <a name="l00395"></a>00395 <span class="keyword">static</span> <span class="keywordtype">int</span> OdSelect(order *od, <a name="l00396"></a>00396 xlist *elist, <a name="l00397"></a>00397 <span class="keywordtype">int</span> *node_status, <a name="l00398"></a>00398 <span class="keywordtype">int</span> *marker, <a name="l00399"></a>00399 <span class="keywordtype">int</span> *isize, <a name="l00400"></a>00400 <span class="keywordtype">int</span> *ilink, <a name="l00401"></a>00401 <span class="keywordtype">int</span> *oinfo, <a name="l00402"></a>00402 <span class="keywordtype">int</span> *osize, <a name="l00403"></a>00403 <span class="keywordtype">int</span> x, <a name="l00404"></a>00404 <span class="keywordtype">int</span> *rsze, <a name="l00405"></a>00405 <span class="keywordtype">int</span> *rchset, <a name="l00406"></a>00406 <span class="keywordtype">int</span> *ibuf1, <a name="l00407"></a>00407 <span class="keywordtype">int</span> *ibuf2, <a name="l00408"></a>00408 <span class="keywordtype">int</span> *mask2, <a name="l00409"></a>00409 <span class="keywordtype">int</span> *e, <a name="l00410"></a>00410 <span class="keywordtype">int</span> *p) <a name="l00411"></a>00411 { <a name="l00412"></a>00412 <span class="keywordtype">int</span> absorp,old,i,j,n,esze,y,z,l,f,t,stopt,s, <a name="l00413"></a>00413 o,stops,indsze,xdeg,e0,ssze,*slist,tsze, <a name="l00414"></a>00414 *tlist,sze,*adjn,*rbeg,*rexs,*rlen,*rend; <a name="l00415"></a>00415 <a name="l00416"></a>00416 adjn =od->adjn; <a name="l00417"></a>00417 rbeg =od->rbeg; <a name="l00418"></a>00418 rexs =od->rexs; <a name="l00419"></a>00419 rlen =od->rlen; <a name="l00420"></a>00420 rend =od->rend; <a name="l00421"></a>00421 n =od->nnod; <a name="l00422"></a>00422 slist=ibuf1; <a name="l00423"></a>00423 <a name="l00424"></a>00424 e0 = *e; <a name="l00425"></a>00425 OdArriv(od,node_status,marker,isize,x,&xdeg,rsze,&esze,rchset); <a name="l00426"></a>00426 <a name="l00427"></a>00427 XtDel(elist,x); <a name="l00428"></a>00428 <a name="l00429"></a>00429 OdRenew(od,ilink,x,xdeg,e,p); <a name="l00430"></a>00430 <a name="l00431"></a>00431 <span class="keywordflow">for</span>(i=n-esze; i<n; ++i) { <a name="l00432"></a>00432 node_status[rchset[i]]=0; <a name="l00433"></a>00433 marker[rchset[i]]=TRUE; <a name="l00434"></a>00434 } <a name="l00435"></a>00435 <a name="l00436"></a>00436 marker[x]=TRUE; <a name="l00437"></a>00437 iSet(*rsze,TRUE,marker,rchset); <a name="l00438"></a>00438 <a name="l00439"></a>00439 ssze=0; <a name="l00440"></a>00440 <span class="keywordflow">for</span>(i=0; i<*rsze;) { <a name="l00441"></a>00441 y=rchset[i]; <a name="l00442"></a>00442 <a name="l00443"></a>00443 <span class="keywordflow">if</span> (node_status[y]==0||node_status[y]==3) <a name="l00444"></a>00444 ExitProc(SysError,NULL); <a name="l00445"></a>00445 <a name="l00446"></a>00446 f=rbeg[y]; <a name="l00447"></a>00447 <span class="keywordflow">for</span>(t=f, stopt=f+rend[y]; t<stopt; ++t) { <a name="l00448"></a>00448 z=adjn[t]; <a name="l00449"></a>00449 <span class="keywordflow">if</span> (node_status[z]==3) { <a name="l00450"></a>00450 adjn[f++]=z; <a name="l00451"></a>00451 <a name="l00452"></a>00452 <span class="keywordflow">if</span> (!mask2[z]) { <a name="l00453"></a>00453 slist[ssze++]=z; <a name="l00454"></a>00454 mask2[z]=TRUE; <a name="l00455"></a>00455 } <a name="l00456"></a>00456 } <a name="l00457"></a>00457 } <a name="l00458"></a>00458 rend[y]=f-rbeg[y]; <a name="l00459"></a>00459 <a name="l00460"></a>00460 <span class="keywordflow">for</span>(stopt=rbeg[y]+rexs[y]; t<stopt; ++t) { <a name="l00461"></a>00461 z=adjn[t]; <a name="l00462"></a>00462 <span class="keywordflow">if</span> (!marker[z]) <a name="l00463"></a>00463 adjn[f++]=z; <a name="l00464"></a>00464 } <a name="l00465"></a>00465 <a name="l00466"></a>00466 rexs[y]=f-rbeg[y]; <a name="l00467"></a>00467 <a name="l00468"></a>00468 <span class="keywordflow">if</span> (rexs[y]==0) { <a name="l00469"></a>00469 OdRenew(od,ilink,y,xdeg-(*e-e0),e,p); <a name="l00470"></a>00470 node_status[y] = 0; <a name="l00471"></a>00471 marker[y] = TRUE; <a name="l00472"></a>00472 <a name="l00473"></a>00473 (*rsze)--; <a name="l00474"></a>00474 iSwap(i,*rsze,rchset); <a name="l00475"></a>00475 } <a name="l00476"></a>00476 <a name="l00477"></a>00477 <span class="keywordflow">else</span> { <a name="l00478"></a>00478 <span class="keywordflow">if</span> (rexs[y]>=rlen[y]) <a name="l00479"></a>00479 ExitProc(SysError,NULL); <a name="l00480"></a>00480 <a name="l00481"></a>00481 <span class="keywordflow">if</span> (rexs[y]>rend[y]) <a name="l00482"></a>00482 adjn[rbeg[y]+rexs[y]]=adjn[rbeg[y]+rend[y]]; <a name="l00483"></a>00483 <a name="l00484"></a>00484 rexs[y]++; <a name="l00485"></a>00485 <a name="l00486"></a>00486 adjn[rbeg[y]+rend[y]]=x; <a name="l00487"></a>00487 rend[y]++; <a name="l00488"></a>00488 <a name="l00489"></a>00489 i++; <a name="l00490"></a>00490 } <a name="l00491"></a>00491 } <a name="l00492"></a>00492 <a name="l00493"></a>00493 iSet(ssze,FALSE,mask2,slist); <a name="l00494"></a>00494 <a name="l00495"></a>00495 <span class="keywordflow">if</span> (*rsze==0) { <a name="l00496"></a>00496 node_status[x]=0; <a name="l00497"></a>00497 marker[x]=TRUE; <a name="l00498"></a>00498 } <a name="l00499"></a>00499 <a name="l00500"></a>00500 <span class="keywordflow">else</span> { <a name="l00501"></a>00501 node_status[x]=3; <a name="l00502"></a>00502 <a name="l00503"></a>00503 rend[x]=0; <a name="l00504"></a>00504 rexs[x]=0; <a name="l00505"></a>00505 <span class="keywordflow">if</span> (*rsze>rlen[x]) <a name="l00506"></a>00506 OdAdd(od,node_status,x,*rsze); <a name="l00507"></a>00507 <a name="l00508"></a>00508 rexs[x]=*rsze; <a name="l00509"></a>00509 iCopy(*rsze,rchset,adjn+rbeg[x]); <a name="l00510"></a>00510 <a name="l00511"></a>00511 tsze=0; <a name="l00512"></a>00512 tlist=ibuf2; <a name="l00513"></a>00513 <span class="keywordflow">for</span>(i=0; i<ssze; ++i){ <a name="l00514"></a>00514 y=slist[i]; <a name="l00515"></a>00515 old=marker[y]; <a name="l00516"></a>00516 marker[y]=TRUE; <a name="l00517"></a>00517 <a name="l00518"></a>00518 absorp=TRUE; <a name="l00519"></a>00519 <a name="l00520"></a>00520 indsze=n; <a name="l00521"></a>00521 l=n; <a name="l00522"></a>00522 <a name="l00523"></a>00523 f=rbeg[y]; <a name="l00524"></a>00524 <span class="keywordflow">for</span>(t=f, stopt=f+rexs[y]; t<stopt; ++t) { <a name="l00525"></a>00525 z=adjn[t]; <a name="l00526"></a>00526 <span class="keywordflow">if</span> (node_status[z]!=0) { <a name="l00527"></a>00527 adjn[f++]=z; <a name="l00528"></a>00528 <a name="l00529"></a>00529 <span class="keywordflow">if</span> (marker[z]) { <a name="l00530"></a>00530 l--; <a name="l00531"></a>00531 slist[l]=z; <a name="l00532"></a>00532 <a name="l00533"></a>00533 <span class="keywordflow">if</span> (!mask2[z]) { <a name="l00534"></a>00534 <span class="keywordflow">for</span>(s=rbeg[z],stops=rbeg[z]+rexs[z]; <a name="l00535"></a>00535 s<stops &&marker[adjn[s]]; ++s); <a name="l00536"></a>00536 <a name="l00537"></a>00537 <span class="keywordflow">if</span> (s==stops) { <a name="l00538"></a>00538 indsze--; <a name="l00539"></a>00539 iSwap(l,indsze,slist); <a name="l00540"></a>00540 } <a name="l00541"></a>00541 <a name="l00542"></a>00542 mask2[z]=TRUE; <a name="l00543"></a>00543 tlist[tsze++]=z; <a name="l00544"></a>00544 } <a name="l00545"></a>00545 } <a name="l00546"></a>00546 <span class="keywordflow">else</span> <a name="l00547"></a>00547 absorp=FALSE; <a name="l00548"></a>00548 } <a name="l00549"></a>00549 } <a name="l00550"></a>00550 <a name="l00551"></a>00551 marker[y]=old; <a name="l00552"></a>00552 rexs[y]=f-rbeg[y]; <a name="l00553"></a>00553 <a name="l00554"></a>00554 <span class="keywordflow">if</span> (indsze<n) { <a name="l00555"></a>00555 z=OdComb(od,node_status,marker, <a name="l00556"></a>00556 isize,ilink,osize, <a name="l00557"></a>00557 n-indsze,slist+indsze); <a name="l00558"></a>00558 <a name="l00559"></a>00559 node_status[z]=1; <a name="l00560"></a>00560 <a name="l00561"></a>00561 sze=0; <a name="l00562"></a>00562 <span class="keywordflow">for</span>(j=l; j<indsze; ++j) { <a name="l00563"></a>00563 o=slist[j]; <a name="l00564"></a>00564 sze+=1+isize[o]; <a name="l00565"></a>00565 node_status[o]=2; <a name="l00566"></a>00566 oinfo[o]=z; <a name="l00567"></a>00567 } <a name="l00568"></a>00568 osize[z]=max(osize[z],sze); <a name="l00569"></a>00569 } <a name="l00570"></a>00570 <a name="l00571"></a>00571 <span class="keywordflow">if</span> (absorp) { <a name="l00572"></a>00572 node_status[y]=0; <a name="l00573"></a>00573 marker[y]=TRUE; <a name="l00574"></a>00574 } <a name="l00575"></a>00575 } <a name="l00576"></a>00576 <a name="l00577"></a>00577 iSet(tsze,FALSE,mask2,tlist); <a name="l00578"></a>00578 } <a name="l00579"></a>00579 <a name="l00580"></a>00580 marker[x]=(node_status[x]==0); <a name="l00581"></a>00581 <a name="l00582"></a>00582 <span class="keywordflow">for</span>(t=0; t<*rsze; ++t) { <a name="l00583"></a>00583 z=rchset[t]; <a name="l00584"></a>00584 marker[z]=(node_status[z]==0); <a name="l00585"></a>00585 } <a name="l00586"></a>00586 <a name="l00587"></a>00587 <span class="keywordflow">return</span> (FALSE); <a name="l00588"></a>00588 } <span class="comment">/* OdSelect */</span> <a name="l00589"></a>00589 <a name="l00590"></a>00590 <span class="keyword">static</span> <span class="keywordtype">int</span> OdOrder(order *od, <a name="l00591"></a>00591 <span class="keywordtype">int</span> *node_status, <a name="l00592"></a>00592 <span class="keywordtype">int</span> *marker, <a name="l00593"></a>00593 <span class="keywordtype">int</span> *isize, <a name="l00594"></a>00594 <span class="keywordtype">int</span> x, <a name="l00595"></a>00595 <span class="keywordtype">int</span> *ibuf1) <a name="l00596"></a>00596 { <a name="l00597"></a>00597 <span class="keywordtype">int</span> rsze,esze,deg; <a name="l00598"></a>00598 <a name="l00599"></a>00599 OdArriv(od,node_status,marker,isize, <a name="l00600"></a>00600 x,&deg,&rsze,&esze,ibuf1); <a name="l00601"></a>00601 <a name="l00602"></a>00602 <span class="keywordflow">return</span> deg; <a name="l00603"></a>00603 } <span class="comment">/* OdOrder */</span> <a name="l00604"></a>00604 <a name="l00605"></a>00605 <span class="keyword">static</span> <span class="keywordtype">void</span> OdModf(order *od, <a name="l00606"></a>00606 xlist *elist, <a name="l00607"></a>00607 <span class="keywordtype">int</span> *node_status, <a name="l00608"></a>00608 <span class="keywordtype">int</span> *marker, <a name="l00609"></a>00609 <span class="keywordtype">int</span> *isize, <a name="l00610"></a>00610 <span class="keywordtype">int</span> *oinfo, <a name="l00611"></a>00611 <span class="keywordtype">int</span> rsze, <a name="l00612"></a>00612 <span class="keywordtype">int</span> *rchset, <a name="l00613"></a>00613 <span class="keywordtype">int</span> *ibuf1) <a name="l00614"></a>00614 { <a name="l00615"></a>00615 <a name="l00616"></a>00616 <span class="keywordtype">int</span> i,x,deg; <a name="l00617"></a>00617 <a name="l00618"></a>00618 <span class="keywordflow">for</span>(i=0; i<rsze; ++i) { <a name="l00619"></a>00619 x=rchset[i]; <a name="l00620"></a>00620 <span class="keywordflow">if</span> (node_status[x]==2) <a name="l00621"></a>00621 <span class="keywordflow">if</span> (node_status[oinfo[x]]==0||node_status[oinfo[x]]==3) <a name="l00622"></a>00622 node_status[x]=1; <a name="l00623"></a>00623 <a name="l00624"></a>00624 <span class="keywordflow">if</span> (node_status[x]==1) { <a name="l00625"></a>00625 deg=OdOrder(od,node_status,marker,isize,x,ibuf1); <a name="l00626"></a>00626 XtPut(elist,x,deg-isize[x]); <a name="l00627"></a>00627 } <a name="l00628"></a>00628 <a name="l00629"></a>00629 <span class="keywordflow">else</span> <a name="l00630"></a>00630 XtDel(elist,x); <a name="l00631"></a>00631 } <a name="l00632"></a>00632 } <span class="comment">/* mindeg_upddeg */</span> <a name="l00633"></a>00633 <a name="l00634"></a>00634 <span class="keywordtype">void</span> OdProc(order *od, <a name="l00635"></a>00635 xlist *xt, <a name="l00636"></a>00636 <span class="keywordtype">int</span> *bbuf1, <a name="l00637"></a>00637 <span class="keywordtype">int</span> *bbuf2, <a name="l00638"></a>00638 <span class="keywordtype">int</span> *ibuf1, <a name="l00639"></a>00639 <span class="keywordtype">int</span> *ibuf2, <a name="l00640"></a>00640 <span class="keywordtype">int</span> *ibuf3, <a name="l00641"></a>00641 <span class="keywordtype">int</span> *ibuf4, <a name="l00642"></a>00642 <span class="keywordtype">int</span> *ibuf5, <a name="l00643"></a>00643 <span class="keywordtype">int</span> *ibuf6, <a name="l00644"></a>00644 <span class="keywordtype">int</span> *ibuf7, <a name="l00645"></a>00645 <span class="keywordtype">int</span> *ibuf8, <a name="l00646"></a>00646 <span class="keywordtype">int</span> *ibuf9, <a name="l00647"></a>00647 <span class="keywordtype">int</span> *intbuf1, <a name="l00648"></a>00648 <span class="keywordtype">int</span> *p) <a name="l00649"></a>00649 { <a name="l00650"></a>00650 <span class="keywordtype">int</span> *mask2,total_fillin,use_mtmd=TRUE,*marker=bbuf1, <a name="l00651"></a>00651 *node_status,i,n,e,x,y,rsze,deg,mindeg,xsize,sze, <a name="l00652"></a>00652 j,*isize,*ilink,*oinfo,*osize,*rchset,*dependent, <a name="l00653"></a>00653 *slist; <a name="l00654"></a>00654 xlist *elist; <a name="l00655"></a>00655 <a name="l00656"></a>00656 elist=xt; <a name="l00657"></a>00657 <a name="l00658"></a>00658 isize =ibuf1; <a name="l00659"></a>00659 ilink =ibuf2; <a name="l00660"></a>00660 oinfo =ibuf3; <a name="l00661"></a>00661 osize =ibuf4; <a name="l00662"></a>00662 rchset =ibuf5; <a name="l00663"></a>00663 dependent=ibuf6; <a name="l00664"></a>00664 slist =ibuf7; <a name="l00665"></a>00665 <a name="l00666"></a>00666 node_status=intbuf1; <a name="l00667"></a>00667 mask2=bbuf2; <a name="l00668"></a>00668 <a name="l00669"></a>00669 OdSet(od,TRUE,elist,node_status,marker, <a name="l00670"></a>00670 isize,ilink,oinfo,osize,&e,p); <a name="l00671"></a>00671 <a name="l00672"></a>00672 n=od->nnod; <a name="l00673"></a>00673 <a name="l00674"></a>00674 iSet(n,0,dependent,NULL); <a name="l00675"></a>00675 <a name="l00676"></a>00676 total_fillin=FALSE; <a name="l00677"></a>00677 <span class="keywordflow">for</span>(; e<n && !total_fillin;) { <a name="l00678"></a>00678 <a name="l00679"></a>00679 XtLeast(elist); <a name="l00680"></a>00680 <a name="l00681"></a>00681 <span class="keywordflow">if</span> (!XtGet(elist,&y,&mindeg)) { <a name="l00682"></a>00682 printf(<span class="stringliteral">"\n No new nodes e=%d n=%d"</span>,e,n); <a name="l00683"></a>00683 printf(<span class="stringliteral">" Node status: "</span>); <a name="l00684"></a>00684 <a name="l00685"></a>00685 <span class="keywordflow">for</span>(i=0; i<n; ++i) <a name="l00686"></a>00686 <span class="keywordflow">if</span> (node_status[i]==1) <a name="l00687"></a>00687 printf(<span class="stringliteral">"A\n"</span>); <a name="l00688"></a>00688 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (node_status[i]==2) <a name="l00689"></a>00689 printf(<span class="stringliteral">"\n O%d: rlen=%d oinfo=%d\n"</span>, <a name="l00690"></a>00690 i,isize[i],oinfo[i]); <a name="l00691"></a>00691 <a name="l00692"></a>00692 ExitProc(SysError,NULL); <a name="l00693"></a>00693 } <a name="l00694"></a>00694 <a name="l00695"></a>00695 xsize=0; <a name="l00696"></a>00696 <span class="keywordflow">for</span>(;use_mtmd;) { <a name="l00697"></a>00697 <span class="keywordflow">if</span> (!XtGet(elist,&x,&deg)||deg>mindeg) <a name="l00698"></a>00698 <span class="keywordflow">break</span>; <a name="l00699"></a>00699 <a name="l00700"></a>00700 <span class="keywordflow">if</span> (node_status[x]!=1) <a name="l00701"></a>00701 XtDel(elist,x); <a name="l00702"></a>00702 <a name="l00703"></a>00703 <span class="keywordflow">else</span> { <a name="l00704"></a>00704 XtSucc(elist); <a name="l00705"></a>00705 <span class="keywordflow">if</span> (!dependent[x]) { <a name="l00706"></a>00706 <a name="l00707"></a>00707 total_fillin = OdSelect(od,elist,node_status,marker, <a name="l00708"></a>00708 isize,ilink,oinfo,osize,x, <a name="l00709"></a>00709 &rsze,rchset,ibuf8,ibuf9,mask2, <a name="l00710"></a>00710 &e,p); <a name="l00711"></a>00711 <a name="l00712"></a>00712 <span class="keywordflow">if</span> (!total_fillin) { <a name="l00713"></a>00713 dependent[x]=2; <a name="l00714"></a>00714 slist[xsize++]=x; <a name="l00715"></a>00715 <a name="l00716"></a>00716 <span class="keywordflow">for</span>(i=0; i<rsze; ++i) { <a name="l00717"></a>00717 y=rchset[i]; <a name="l00718"></a>00718 <span class="keywordflow">if</span> (!dependent[y]) { <a name="l00719"></a>00719 dependent[y]=1; <a name="l00720"></a>00720 slist[xsize++]=y; <a name="l00721"></a>00721 } <a name="l00722"></a>00722 } <a name="l00723"></a>00723 } <a name="l00724"></a>00724 <a name="l00725"></a>00725 <span class="keywordflow">if</span> (!use_mtmd) <span class="keywordflow">break</span>; <a name="l00726"></a>00726 } <a name="l00727"></a>00727 } <a name="l00728"></a>00728 } <a name="l00729"></a>00729 <a name="l00730"></a>00730 <span class="keywordflow">if</span> (!total_fillin) { <a name="l00731"></a>00731 sze=0; <a name="l00732"></a>00732 <span class="keywordflow">for</span>(j=0; j<xsize; ++j) { <a name="l00733"></a>00733 y=slist[j]; <a name="l00734"></a>00734 <span class="keywordflow">if</span> (dependent[y]==1 && node_status[y]!=0) <a name="l00735"></a>00735 slist[sze++]=y; <a name="l00736"></a>00736 dependent[y]=0; <a name="l00737"></a>00737 } <a name="l00738"></a>00738 <a name="l00739"></a>00739 OdModf(od,elist,node_status,marker, <a name="l00740"></a>00740 isize,oinfo,sze,slist,ibuf8); <a name="l00741"></a>00741 <a name="l00742"></a>00742 } <a name="l00743"></a>00743 } <a name="l00744"></a>00744 <a name="l00745"></a>00745 <span class="keywordflow">if</span> (e<n) { <a name="l00746"></a>00746 sze=0; <a name="l00747"></a>00747 <span class="keywordflow">for</span>(i=0; i<n; ++i) <a name="l00748"></a>00748 <span class="keywordflow">if</span> (node_status[i]==2||node_status[i]==1) <a name="l00749"></a>00749 ibuf8[sze++]=i; <a name="l00750"></a>00750 <a name="l00751"></a>00751 x = OdComb(od,node_status,marker,isize,ilink,osize, <a name="l00752"></a>00752 sze,ibuf8); <a name="l00753"></a>00753 <a name="l00754"></a>00754 OdRenew(od,ilink,x,n-e-1,&e,p); <a name="l00755"></a>00755 } <a name="l00756"></a>00756 <a name="l00757"></a>00757 } <span class="comment">/* OdProc */</span> <a name="l00758"></a>00758 <a name="l00759"></a>00759 <span class="keywordtype">int</span> GetOrder(order *od, <a name="l00760"></a>00760 <span class="keywordtype">int</span> *p) <a name="l00761"></a>00761 { <a name="l00762"></a>00762 <span class="keywordtype">int</span> ierr=0,bbufs=2,*bbuf[2]={0}, <a name="l00763"></a>00763 ibufs=9,*ibuf[9]={0}, <a name="l00764"></a>00764 n,*iwmd; <a name="l00765"></a>00765 xlist *xt; <a name="l00766"></a>00766 <a name="l00767"></a>00767 n=od->nnod; <a name="l00768"></a>00768 <a name="l00769"></a>00769 ierr=XtAlloc(n,n+1,<span class="stringliteral">"xt, GetOrder"</span>,&xt); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> FALSE; <a name="l00770"></a>00770 ierr=iAlloc(n,<span class="stringliteral">"ibuf21, GetOrder"</span>,&iwmd); <span class="keywordflow">if</span>(ierr) <span class="keywordflow">return</span> FALSE; <a name="l00771"></a>00771 <a name="l00772"></a>00772 IptAlloc(ibufs,n,ibuf,<span class="stringliteral">"ibuf, GetOrder"</span>); <a name="l00773"></a>00773 IptAlloc(bbufs,n,bbuf,<span class="stringliteral">"bbuf, GetOrder"</span>); <a name="l00774"></a>00774 <a name="l00775"></a>00775 OdProc(od,xt,ibuf[0],ibuf[1],ibuf[2],ibuf[3],ibuf[4],ibuf[5], <a name="l00776"></a>00776 ibuf[6],ibuf[7],ibuf[8],iwmd,bbuf[0],bbuf[1],p); <a name="l00777"></a>00777 <a name="l00778"></a>00778 <a name="l00779"></a>00779 <span class="comment">/*</span> <a name="l00780"></a>00780 <span class="comment"> XtFree(&xt);</span> <a name="l00781"></a>00781 <span class="comment"> */</span> <a name="l00782"></a>00782 <a name="l00783"></a>00783 free(xt->head); <a name="l00784"></a>00784 free(xt->port); <a name="l00785"></a>00785 free(xt->fwrd); <a name="l00786"></a>00786 free(xt->bwrd); <a name="l00787"></a>00787 free(xt); <a name="l00788"></a>00788 <a name="l00789"></a>00789 iFree(&iwmd); <a name="l00790"></a>00790 IptFree(ibufs,ibuf); <a name="l00791"></a>00791 IptFree(bbufs,bbuf); <a name="l00792"></a>00792 <span class="keywordflow">return</span> TRUE; <a name="l00793"></a>00793 } <span class="comment">/* GetOrder */</span> </pre></div></div> </div> <hr class="footer"/><address class="footer"><small>Generated on Wed Jun 8 2011 for DSDP by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address> </body> </html>