All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
numSimpleEffect.cc
Go to the documentation of this file.
1 /* numSimpleEffect.cc
2  */
4 #include <emmintrin.h>
5 typedef __v2di v2di;
6 
7 void osl::effect::
8 NumSimpleEffectTable::init(const SimpleState& state)
9 {
10  std::fill(effects.begin(), effects.end(),NumBitmapEffect());
11  for(int num=0;num<40;num++){
12  if (state.isOnBoard(num)){
13  Piece p=state.pieceOf(num);
14 #if 0
15  doEffect<NumBitmapEffect::Add,false>(state,p);
16 #else
17  doEffect<NumBitmapEffect::Add,true>(state,p);
18 #endif
19  }
20  }
21 }
22 
23 void osl::effect::
25 {
26  this->effected_mask = src.effected_mask;
27  this->mobilityTable = src.mobilityTable;
28  this->changed_effects = src.changed_effects;
29  this->changed_effect_pieces = src.changed_effect_pieces;
30  this->effected_changed_mask = src.effected_changed_mask;
31 
32 #if defined(__i386__) || defined(__x86_64__)
33  {
34  v2di en0=*((v2di*)&src.effectedNumTable[0]);
35  v2di en2=*((v2di*)&src.effectedNumTable[2]);
36  v2di en4=*((v2di*)&src.effectedNumTable[4]);
37  v2di en6=*((v2di*)&src.effectedNumTable[6]);
38  v2di en8=*((v2di*)&src.effectedNumTable[8]);
39  v2di en10=*((v2di*)&src.effectedNumTable[10]);
40  v2di en12=*((v2di*)&src.effectedNumTable[12]);
41  v2di en14=*((v2di*)&src.effectedNumTable[14]);
42  v2di en16=*((v2di*)&src.effectedNumTable[16]);
43  v2di en18=*((v2di*)&src.effectedNumTable[18]);
44 
45  *((v2di*)&(*this).effectedNumTable[0])=en0;
46  *((v2di*)&(*this).effectedNumTable[2])=en2;
47  *((v2di*)&(*this).effectedNumTable[4])=en4;
48  *((v2di*)&(*this).effectedNumTable[6])=en6;
49  *((v2di*)&(*this).effectedNumTable[8])=en8;
50  *((v2di*)&(*this).effectedNumTable[10])=en10;
51  *((v2di*)&(*this).effectedNumTable[12])=en12;
52  *((v2di*)&(*this).effectedNumTable[14])=en14;
53  *((v2di*)&(*this).effectedNumTable[16])=en16;
54  *((v2di*)&(*this).effectedNumTable[18])=en18;
55 
56  v2di en20=*((v2di*)&src.effectedNumTable[20]);
57  v2di en22=*((v2di*)&src.effectedNumTable[22]);
58  v2di en24=*((v2di*)&src.effectedNumTable[24]);
59  v2di en26=*((v2di*)&src.effectedNumTable[26]);
60  v2di en28=*((v2di*)&src.effectedNumTable[28]);
61  v2di en30=*((v2di*)&src.effectedNumTable[30]);
62  v2di en32=*((v2di*)&src.effectedNumTable[32]);
63  v2di en34=*((v2di*)&src.effectedNumTable[34]);
64  v2di en36=*((v2di*)&src.effectedNumTable[36]);
65  v2di en38=*((v2di*)&src.effectedNumTable[38]);
66 
67  *((v2di*)&(*this).effectedNumTable[20])=en20;
68  *((v2di*)&(*this).effectedNumTable[22])=en22;
69  *((v2di*)&(*this).effectedNumTable[24])=en24;
70  *((v2di*)&(*this).effectedNumTable[26])=en26;
71  *((v2di*)&(*this).effectedNumTable[28])=en28;
72  *((v2di*)&(*this).effectedNumTable[30])=en30;
73  *((v2di*)&(*this).effectedNumTable[32])=en32;
74  *((v2di*)&(*this).effectedNumTable[34])=en34;
75  *((v2di*)&(*this).effectedNumTable[36])=en36;
76  *((v2di*)&(*this).effectedNumTable[38])=en38;
77  }
78 #else
79  for(int i=0;i<40;i++)
80  (*this).effectedNumTable[i]=src.effectedNumTable[i];
81 #endif
82 
83 #if defined(__i386__) || defined(__x86_64__)
84  {
85  v2di e18=*((v2di*)&src.effects[18]);
86  v2di e20=*((v2di*)&src.effects[20]);
87  v2di e22=*((v2di*)&src.effects[22]);
88  v2di e24=*((v2di*)&src.effects[24]);
89  v2di e26=*((v2di*)&src.effects[26]);
90 
91  v2di e34=*((v2di*)&src.effects[34]);
92  v2di e36=*((v2di*)&src.effects[36]);
93  v2di e38=*((v2di*)&src.effects[38]);
94  v2di e40=*((v2di*)&src.effects[40]);
95  v2di e42=*((v2di*)&src.effects[42]);
96 
97  *((v2di*)&(*this).effects[18])=e18;
98  *((v2di*)&(*this).effects[20])=e20;
99  *((v2di*)&(*this).effects[22])=e22;
100  *((v2di*)&(*this).effects[24])=e24;
101  *((v2di*)&(*this).effects[26])=e26;
102 
103  *((v2di*)&(*this).effects[34])=e34;
104  *((v2di*)&(*this).effects[36])=e36;
105  *((v2di*)&(*this).effects[38])=e38;
106  *((v2di*)&(*this).effects[40])=e40;
107  *((v2di*)&(*this).effects[42])=e42;
108 
109  v2di e50=*((v2di*)&src.effects[50]);
110  v2di e52=*((v2di*)&src.effects[52]);
111  v2di e54=*((v2di*)&src.effects[54]);
112  v2di e56=*((v2di*)&src.effects[56]);
113  v2di e58=*((v2di*)&src.effects[58]);
114 
115  v2di e66=*((v2di*)&src.effects[66]);
116  v2di e68=*((v2di*)&src.effects[68]);
117  v2di e70=*((v2di*)&src.effects[70]);
118  v2di e72=*((v2di*)&src.effects[72]);
119  v2di e74=*((v2di*)&src.effects[74]);
120 
121  *((v2di*)&(*this).effects[50])=e50;
122  *((v2di*)&(*this).effects[52])=e52;
123  *((v2di*)&(*this).effects[54])=e54;
124  *((v2di*)&(*this).effects[56])=e56;
125  *((v2di*)&(*this).effects[58])=e58;
126 
127  *((v2di*)&(*this).effects[66])=e66;
128  *((v2di*)&(*this).effects[68])=e68;
129  *((v2di*)&(*this).effects[70])=e70;
130  *((v2di*)&(*this).effects[72])=e72;
131  *((v2di*)&(*this).effects[74])=e74;
132 
133  v2di e82=*((v2di*)&src.effects[82]);
134  v2di e84=*((v2di*)&src.effects[84]);
135  v2di e86=*((v2di*)&src.effects[86]);
136  v2di e88=*((v2di*)&src.effects[88]);
137  v2di e90=*((v2di*)&src.effects[90]);
138 
139  v2di e98=*((v2di*)&src.effects[98]);
140  v2di e100=*((v2di*)&src.effects[100]);
141  v2di e102=*((v2di*)&src.effects[102]);
142  v2di e104=*((v2di*)&src.effects[104]);
143  v2di e106=*((v2di*)&src.effects[106]);
144 
145  *((v2di*)&(*this).effects[82])=e82;
146  *((v2di*)&(*this).effects[84])=e84;
147  *((v2di*)&(*this).effects[86])=e86;
148  *((v2di*)&(*this).effects[88])=e88;
149  *((v2di*)&(*this).effects[90])=e90;
150 
151  *((v2di*)&(*this).effects[98])=e98;
152  *((v2di*)&(*this).effects[100])=e100;
153  *((v2di*)&(*this).effects[102])=e102;
154  *((v2di*)&(*this).effects[104])=e104;
155  *((v2di*)&(*this).effects[106])=e106;
156 
157  v2di e114=*((v2di*)&src.effects[114]);
158  v2di e116=*((v2di*)&src.effects[116]);
159  v2di e118=*((v2di*)&src.effects[118]);
160  v2di e120=*((v2di*)&src.effects[120]);
161  v2di e122=*((v2di*)&src.effects[122]);
162 
163  v2di e130=*((v2di*)&src.effects[130]);
164  v2di e132=*((v2di*)&src.effects[132]);
165  v2di e134=*((v2di*)&src.effects[134]);
166  v2di e136=*((v2di*)&src.effects[136]);
167  v2di e138=*((v2di*)&src.effects[138]);
168 
169  *((v2di*)&(*this).effects[114])=e114;
170  *((v2di*)&(*this).effects[116])=e116;
171  *((v2di*)&(*this).effects[118])=e118;
172  *((v2di*)&(*this).effects[120])=e120;
173  *((v2di*)&(*this).effects[122])=e122;
174 
175  *((v2di*)&(*this).effects[130])=e130;
176  *((v2di*)&(*this).effects[132])=e132;
177  *((v2di*)&(*this).effects[134])=e134;
178  *((v2di*)&(*this).effects[136])=e136;
179  *((v2di*)&(*this).effects[138])=e138;
180 
181  v2di e146=*((v2di*)&src.effects[146]);
182  v2di e148=*((v2di*)&src.effects[148]);
183  v2di e150=*((v2di*)&src.effects[150]);
184  v2di e152=*((v2di*)&src.effects[152]);
185  v2di e154=*((v2di*)&src.effects[154]);
186 
187  *((v2di*)&(*this).effects[146])=e146;
188  *((v2di*)&(*this).effects[148])=e148;
189  *((v2di*)&(*this).effects[150])=e150;
190  *((v2di*)&(*this).effects[152])=e152;
191  *((v2di*)&(*this).effects[154])=e154;
192  }
193 #else
194  for(int x=1;x<=9;x++)
195  for(int y=1;y<=9;y++)
196  this->effects[Square(x,y).index()]=src.effects[Square(x,y).index()];
197 #endif
198 }
199 
201 {
202  for(int y=1;y<=9;y++)
203  for(int x=9;x>0;x--){
204  Square pos(x,y);
205  if (!(et1.effectSetAt(pos)==et2.effectSetAt(pos))) return false;
206  }
207  if (! (et1.effected_mask == et2.effected_mask))
208  return false;
209  if(!(et1.mobilityTable==et2.mobilityTable)) return false;
210  if(!(et1.effectedNumTable==et2.effectedNumTable)) return false;
211  // intentionally ignore history dependent members: changed_effects, changed_effect_pieces, effected_changed_mask
212  return true;
213 }
214 
215 #ifndef MINIMAL
216 std::ostream& osl::effect::operator<<(std::ostream& os,const NumSimpleEffectTable& effectTable)
217 {
218  os << "Effect" << std::endl;
219  for(int y=1;y<=9;y++){
220  for(int x=9;x>0;x--){
221  Square pos(x,y);
222  os << effectTable.effectSetAt(pos) << " ";
223  }
224  os << std::endl;
225  }
226  os << "Effect" << std::endl;
227  for(int y=1;y<=9;y++){
228  for(int x=9;x>0;x--){
229  Square pos(x,y);
230  os << effectTable.effectSetAt(pos) << " ";
231  }
232  os << std::endl;
233  }
234  return os;
235 }
236 #endif
237 // ;;; Local Variables:
238 // ;;; mode:c++
239 // ;;; c-basic-offset:2
240 // ;;; End: