[BACK]Return to vect.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Annotation of OpenXM_contrib2/asir2000/engine/vect.c, Revision 1.1.1.1

1.1       noro        1: /* $OpenXM: OpenXM/src/asir99/engine/vect.c,v 1.1.1.1 1999/11/10 08:12:26 noro Exp $ */
                      2: #include "ca.h"
                      3:
                      4: void addvect(vl,a,b,c)
                      5: VL vl;
                      6: VECT a,b,*c;
                      7: {
                      8:        int len,i;
                      9:        VECT t;
                     10:        pointer *ab,*bb,*tb;
                     11:
                     12:        if ( !a )
                     13:                *c = b;
                     14:        else if ( !b )
                     15:                *c = a;
                     16:        else if ( a->len != b->len ) {
                     17:                *c = 0; error("addvect : size mismatch");
                     18:        } else {
                     19:                len = a->len;
                     20:                MKVECT(t,len);
                     21:                for ( i = 0, ab = BDY(a), bb = BDY(b), tb = BDY(t); i < len; i++ )
                     22:                        addr(vl,(Obj)ab[i],(Obj)bb[i],(Obj *)&tb[i]);
                     23:                *c = t;
                     24:        }
                     25: }
                     26:
                     27: void subvect(vl,a,b,c)
                     28: VL vl;
                     29: VECT a,b,*c;
                     30: {
                     31:        int len,i;
                     32:        VECT t;
                     33:        pointer *ab,*bb,*tb;
                     34:
                     35:        if ( !a )
                     36:                chsgnvect(b,c);
                     37:        else if ( !b )
                     38:                *c = a;
                     39:        else if (a->len != b->len ) {
                     40:                *c = 0; error("subvect : size mismatch");
                     41:        } else {
                     42:                len = a->len;
                     43:                MKVECT(t,len);
                     44:                for ( i = 0, ab = BDY(a), bb = BDY(b), tb = BDY(t);
                     45:                                i < len; i++ )
                     46:                                subr(vl,(Obj)ab[i],(Obj)bb[i],(Obj *)&tb[i]);
                     47:                *c = t;
                     48:        }
                     49: }
                     50:
                     51: void mulvect(vl,a,b,c)
                     52: VL vl;
                     53: Obj a,b,*c;
                     54: {
                     55:        if ( !a || !b )
                     56:                *c = 0;
                     57:        else if ( OID(a) <= O_R )
                     58:                mulrvect(vl,a,(VECT)b,(VECT *)c);
                     59:        else if ( OID(b) <= O_R )
                     60:                mulrvect(vl,b,(VECT)a,(VECT *)c);
                     61:        else
                     62:                notdef(vl,a,b,c);
                     63: }
                     64:
                     65: void divvect(vl,a,b,c)
                     66: VL vl;
                     67: Obj a,b,*c;
                     68: {
                     69:        Obj t;
                     70:
                     71:        if ( !b )
                     72:                error("divvect : division by 0");
                     73:        else if ( !a )
                     74:                *c = 0;
                     75:        else if ( OID(b) > O_R )
                     76:                notdef(vl,a,b,c);
                     77:        else {
                     78:                divr(vl,(Obj)ONE,b,&t); mulrvect(vl,(Obj)t,(VECT)a,(VECT *)c);
                     79:        }
                     80: }
                     81:
                     82: void chsgnvect(a,b)
                     83: VECT a,*b;
                     84: {
                     85:        VECT t;
                     86:        int len,i;
                     87:        pointer *ab,*tb;
                     88:
                     89:        if ( !a )
                     90:                *b = 0;
                     91:        else {
                     92:                len = a->len;
                     93:                MKVECT(t,len);
                     94:                for ( i = 0, ab = BDY(a), tb = BDY(t);
                     95:                        i < len; i++ )
                     96:                        chsgnr((Obj)ab[i],(Obj *)&tb[i]);
                     97:                *b = t;
                     98:        }
                     99: }
                    100:
                    101: void mulrvect(vl,a,b,c)
                    102: VL vl;
                    103: Obj a;
                    104: VECT b,*c;
                    105: {
                    106:        int len,i;
                    107:        VECT t;
                    108:        pointer *bb,*tb;
                    109:
                    110:        if ( !a || !b )
                    111:                *c = 0;
                    112:        else {
                    113:                len = b->len;
                    114:                MKVECT(t,len);
                    115:                for ( i = 0, bb = BDY(b), tb = BDY(t); i < len; i++ )
                    116:                        mulr(vl,a,(Obj)bb[i],(Obj *)&tb[i]);
                    117:                *c = t;
                    118:        }
                    119: }
                    120:
                    121: int compvect(vl,a,b)
                    122: VL vl;
                    123: VECT a,b;
                    124: {
                    125:        int i,len,t;
                    126:
                    127:        if ( !a )
                    128:                return b?-1:0;
                    129:        else if ( !b )
                    130:                return 1;
                    131:        else if ( a->len != b->len )
                    132:                return a->len>b->len ? 1 : -1;
                    133:        else {
                    134:                for ( i = 0, len = a->len; i < len; i++ )
                    135:                        if ( t = compr(vl,(Obj)BDY(a)[i],(Obj)BDY(b)[i]) )
                    136:                                return t;
                    137:                return 0;
                    138:        }
                    139: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>