/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* execdota APL2 V1.0.0 ************************************************ * Called from execdot when the data types of the two operands agree, * * and neither data type is character, to do inner product. * ***********************************************************************/ #define INCLUDES APLTOKEN+APLCHDEF+APLCB+FUNSTRUC #include "includes.h" Aplcb execdota(left,rite,type,lscp,rscp) Aplcb left,rite; /* left and right operands */ int type; /* data types of left and right operands */ Scalar_dyadics *lscp,*rscp; /* function definitions - see aplstruc.h */ { Execdotc; Innrprdp; Aplcb out=NULL; double complex_identity[2]; switch(type) { case APLCPLX: if (NULL != rscp->procs.ppcpx) if (NULL != lscp->procs.ppcpx) { complex_identity[0] = lscp->identities.did; complex_identity[1] = 0e0; out = innrprdp(lscp->procs.ppcpx,rscp->procs.ppcpx, complex_identity,left,rite); } if (out != NULL) break; case APLINT: if (NULL != rscp->procs.ppint) if (NULL != lscp->procs.ppint) out = innrprdp(lscp->procs.ppint,rscp->procs.ppint, &(lscp->identities.iid),left,rite); if (out != NULL) break; case APLNUMB: out = execdotc(left,rite,type,type,lscp,rscp); break; } /* end switch */ return(out); }