1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#include "Bdef.h"
void BI_SringBR(BLACSCONTEXT *ctxt, BLACBUFF *bp, SDRVPTR send, Int src)
{
void BI_Srecv(BLACSCONTEXT *, Int, Int, BLACBUFF *);
Int mydist; /* my distance from source */
Int Np, Iam, msgid, rightedge;
Np = ctxt->scp->Np;
Iam = ctxt->scp->Iam;
msgid = Mscopeid(ctxt);
mydist = (Np + Iam - src) % Np;
rightedge = Np/2;
BI_Srecv(ctxt, BANYNODE, msgid, bp);
/*
* If I'm between source & right edge of split ring, send to right
*/
if (mydist < rightedge)
send(ctxt, (Iam+1)%Np, msgid, bp);
/*
* If I'm between source and left edge of split ring, send to left
*/
else if (mydist > rightedge+1)
send(ctxt, (Np+Iam-1)%Np, msgid, bp);
}
|