-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathcip_t.h
41 lines (39 loc) · 1.36 KB
/
cip_t.h
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
29
30
31
32
33
34
35
36
37
38
39
40
41
/* Copyright 1990-2011, Jsoftware Inc. All rights reserved. */
/* License in license.txt. */
/* */
/* Template for ipbx (boolean inner products) */
/* requires F(x,y) *x++g=*y++ where g is one of | & ^ */
if(c==CPLUSDOT&&(c0==IPBX1||c1==IPBX1)||c==CSTARDOT&&(c0==IPBX0||c1==IPBX0)){
e=c==CPLUSDOT?c1==IPBX1:c1==IPBX0;
for(i=0;i<m;++i){
b=*av; if(ac)++av; memcpy(zv,b?v1:v0,n); if(b==e){zv+=n; continue;}
for(j=1;j<p;++j){
b=*av; if(ac)++av; if(b==e){memset(zv,c==CPLUSDOT?C1:C0,n); break;}
uu=(I*)zv; vv=(I*)(b?v1+j*wc:v0+j*wc);
DO(q, F(uu,vv););
if(r){u=(B*)uu; v=(B*)vv; DO(r, F(u,v););}
}
zv+=n;
}}else if(c==CPLUSDOT&&(c0==IPBX0||c1==IPBX0)||c==CSTARDOT&&(c0==IPBX1||c1==IPBX1)||
c==CNE&&(c0==IPBX0||c1==IPBX0)){
e=c==CSTARDOT?c1==IPBX1:c1==IPBX0;
for(i=0;i<m;++i){
b=*av; if(ac)++av; memcpy(zv,b?v1:v0,n);
for(j=1;j<p;++j){
b=*av; if(ac)++av; if(b==e)continue;
uu=(I*)zv; vv=(I*)(b?v1+j*wc:v0+j*wc);
DO(q, F(uu,vv););
if(r){u=(B*)uu; v=(B*)vv; DO(r, F(u,v););}
}
zv+=n;
}}else
for(i=0;i<m;++i){
memcpy(zv,*av?v1:v0,n); if(ac)++av;
for(j=1;j<p;++j){
uu=(I*)zv; vv=(I*)(*av?v1+j*wc:v0+j*wc); if(ac)++av;
DO(q, F(uu,vv););
if(r){u=(B*)uu; v=(B*)vv; DO(r, F(u,v););}
}
zv+=n;
}
#undef F