/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* partito APL2 V1.0.0 ************************************************* * Called by partitn once the axis has been determined, and the result * * variable has been allocated. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" Aplcb partito(left, rite, out, axis) Aplcb left, rite, out; int axis; /* Relative 0. */ { Axispre; Dtacopy; Errstop; Getcb; Partitp; int bot,botcnt,i,j,k,lead,m,n,oaxi,oaxicnt,p,raxi,raxicnt,top, topcnt,trail; for (;;) { if (OK != axispre(rite,axis+1,&raxicnt,&botcnt,&topcnt)) break; for (top = 0; top < topcnt; top++) { lead = n = trail = 0; /* Initialize counters. */ for (oaxi = raxi = j = p = 0; raxi < raxicnt; raxi++) { k = (j < (m = *(left->aplptr.aplint + raxi))); /* New items are created in the result */ /* whenever the corresponding item of left */ /* is greater than the prior item of left. */ j = m; /* Save for next iteration. */ if (k && n) { /* Create new output? */ partitp(out,rite,lead,n,trail,top,oaxi++,raxi, botcnt,axis); lead = n = trail = 0; /* Reset counters. */ } (j) ? n++ : (n) ? trail++ : lead++; /* Lead and trail are items to drop. */ } partitp(out,rite,lead,n,trail,top,oaxi,raxi,botcnt,axis); } break; /* final break from outer for(;;) */ } return(errstop(0,left,rite,out)); }