void chkUp(int a[], int pos) { if(pos<=1) return; if(a[pos]<a[(int)pos/2]) { iSwap(a, pos, (int)pos/2); chkUp(a, (int)pos/2); } }
void iDisplay::SetOrientation(bool bLandscape, bool bLefthander) { if (bLandscape != ((m_Flags&GXLF_LANDSCAPE)>0) ) { if (bLandscape) m_Flags |= GXLF_LANDSCAPE; else m_Flags ^= GXLF_LANDSCAPE; iSwap(m_Siz.w,m_Siz.h); m_BackBuff.Resize(m_Siz); } if (bLefthander && (m_Flags & GXLF_LHANDER) == 0) m_Flags |= GXLF_LHANDER; else if (!bLefthander && (m_Flags & GXLF_LHANDER) != 0) m_Flags ^= GXLF_LHANDER; }
int extractMin(int a[]) { if(numm==0) { printf("underfl0w "); return -1; } iSwap(a,1,numm); minHeapify(a, numm-1, 1); return (a[numm--]); }
void minHeapify(int a[], int hSize, int pos) { int sm=pos,i,j, left=(2*pos), right=(2*pos+1); if(a[left]<a[pos] && (left<=hSize)) sm=left; if(a[right]<a[sm] && (right<=hSize)) sm=right; if(sm!=pos) { iSwap(a, pos, sm); minHeapify(a, hSize, sm); } }
bool iArmyListEx::Drop() { if (m_pDropItem->m_toCell == -1) { LeaveDrop(); Invalidate(); return false; } if (m_pDropItem->m_pSender == m_pDropItem->m_pReceiver && m_pDropItem->m_fromCell == m_pDropItem->m_toCell) { // (same cell) do nothing } else if (m_pArmy->At(m_pDropItem->m_toCell).Type() == m_pDropItem->m_cGroup.Type()) { // (similar type of creatures) if (m_pDropItem->m_bSplit) { // split mode (show split dialog) uint32 flags = iDlg_SplitCreatures::Normal; if (m_pDropItem != m_pDragItem){ if (!m_pDropItem->m_bCanDismiss && m_pDropItem->m_pSender->Army()->GroupCount() <=1) flags |= iDlg_SplitCreatures::SafeG1; if (!m_bCanDismiss && m_pArmy->GroupCount() <= 1) flags |= iDlg_SplitCreatures::SafeG2; } iDlg_SplitCreatures scdlg(m_pMgr, PID_NEUTRAL, m_pDropItem->m_pSender->Army()->At(m_pDropItem->m_fromCell), m_pArmy->At(m_pDropItem->m_toCell), flags); scdlg.DoModal(); } else { // normal mode (merge groups) m_pArmy->At(m_pDropItem->m_toCell).Count() += m_pDropItem->m_cGroup.Count(); m_pDropItem->m_pSender->Army()->At(m_pDropItem->m_fromCell).Reset(); } } else { if (m_pDropItem->m_bSplit) { // show split dialog uint32 flags = iDlg_SplitCreatures::Normal; if (m_pDropItem != m_pDragItem && !m_pDropItem->m_bCanDismiss && m_pDropItem->m_pSender->Army()->GroupCount() <= 1) flags |= iDlg_SplitCreatures::SafeG1; iDlg_SplitCreatures scdlg(m_pMgr, PID_NEUTRAL, m_pDropItem->m_pSender->Army()->At(m_pDropItem->m_fromCell), m_pArmy->At(m_pDropItem->m_toCell), flags); scdlg.DoModal(); } else { // swap cells iSwap(m_pArmy->At(m_pDropItem->m_toCell),m_pDropItem->m_pSender->Army()->At(m_pDropItem->m_fromCell)); } } LeaveDrop(); Invalidate(); return true; }
static int OdSelect(order *od, xlist *elist, int *node_status, int *marker, int *isize, int *ilink, int *oinfo, int *osize, int x, int *rsze, int *rchset, int *ibuf1, int *ibuf2, int *mask2, int *e, int *p) { int absorp,old,i,j,n,esze,y,z,l,f,t,stopt,s, o,stops,indsze,xdeg,e0,ssze,*slist,tsze, *tlist,sze,*adjn,*rbeg,*rexs,*rlen,*rend; adjn =od->adjn; rbeg =od->rbeg; rexs =od->rexs; rlen =od->rlen; rend =od->rend; n =od->nnod; slist=ibuf1; e0 = *e; OdArriv(od,node_status,marker,isize,x,&xdeg,rsze,&esze,rchset); XtDel(elist,x); OdRenew(od,ilink,x,xdeg,e,p); for(i=n-esze; i<n; ++i) { node_status[rchset[i]]=0; marker[rchset[i]]=TRUE; } marker[x]=TRUE; iSet(*rsze,TRUE,marker,rchset); ssze=0; for(i=0; i<*rsze;) { y=rchset[i]; if (node_status[y]==0||node_status[y]==3) ExitProc(SysError,NULL); f=rbeg[y]; for(t=f, stopt=f+rend[y]; t<stopt; ++t) { z=adjn[t]; if (node_status[z]==3) { adjn[f++]=z; if (!mask2[z]) { slist[ssze++]=z; mask2[z]=TRUE; } } } rend[y]=f-rbeg[y]; for(stopt=rbeg[y]+rexs[y]; t<stopt; ++t) { z=adjn[t]; if (!marker[z]) adjn[f++]=z; } rexs[y]=f-rbeg[y]; if (rexs[y]==0) { OdRenew(od,ilink,y,xdeg-(*e-e0),e,p); node_status[y] = 0; marker[y] = TRUE; (*rsze)--; iSwap(i,*rsze,rchset); } else { if (rexs[y]>=rlen[y]) ExitProc(SysError,NULL); if (rexs[y]>rend[y]) adjn[rbeg[y]+rexs[y]]=adjn[rbeg[y]+rend[y]]; rexs[y]++; adjn[rbeg[y]+rend[y]]=x; rend[y]++; i++; } } iSet(ssze,FALSE,mask2,slist); if (*rsze==0) { node_status[x]=0; marker[x]=TRUE; } else { node_status[x]=3; rend[x]=0; rexs[x]=0; if (*rsze>rlen[x]) OdAdd(od,node_status,x,*rsze); rexs[x]=*rsze; iCopy(*rsze,rchset,adjn+rbeg[x]); tsze=0; tlist=ibuf2; for(i=0; i<ssze; ++i){ y=slist[i]; old=marker[y]; marker[y]=TRUE; absorp=TRUE; indsze=n; l=n; f=rbeg[y]; for(t=f, stopt=f+rexs[y]; t<stopt; ++t) { z=adjn[t]; if (node_status[z]!=0) { adjn[f++]=z; if (marker[z]) { l--; slist[l]=z; if (!mask2[z]) { for(s=rbeg[z],stops=rbeg[z]+rexs[z]; s<stops &&marker[adjn[s]]; ++s); if (s==stops) { indsze--; iSwap(l,indsze,slist); } mask2[z]=TRUE; tlist[tsze++]=z; } } else absorp=FALSE; } } marker[y]=old; rexs[y]=f-rbeg[y]; if (indsze<n) { z=OdComb(od,node_status,marker, isize,ilink,osize, n-indsze,slist+indsze); node_status[z]=1; sze=0; for(j=l; j<indsze; ++j) { o=slist[j]; sze+=1+isize[o]; node_status[o]=2; oinfo[o]=z; } osize[z]=max(osize[z],sze); } if (absorp) { node_status[y]=0; marker[y]=TRUE; } } iSet(tsze,FALSE,mask2,tlist); } marker[x]=(node_status[x]==0); for(t=0; t<*rsze; ++t) { z=rchset[t]; marker[z]=(node_status[z]==0); } return (FALSE); } /* OdSelect */