説明を見る。00001
00002
00003 #include "osl/bits/numSimpleEffect.h"
00004 #if (defined(__i386__) || defined(__x86_64__)) && !defined(OSL_NO_SSE)
00005 #include <emmintrin.h>
00006 typedef __v2di v2di;
00007 #endif
00008 #include <iostream>
00009
00010 void osl::effect::
00011 NumSimpleEffectTable::init(const SimpleState& state)
00012 {
00013 std::fill(effects.begin(), effects.end(),NumBitmapEffect());
00014 for(int num=0;num<40;num++){
00015 if (state.isOnBoard(num)){
00016 Piece p=state.pieceOf(num);
00017 doEffect<NumBitmapEffect::Add,true>(state,p);
00018 }
00019 }
00020 }
00021
00022 void osl::effect::
00023 NumSimpleEffectTable::copyFrom(const NumSimpleEffectTable& src)
00024 {
00025 this->effected_mask = src.effected_mask;
00026 this->mobilityTable = src.mobilityTable;
00027 this->changed_effects = src.changed_effects;
00028 this->changed_effect_pieces = src.changed_effect_pieces;
00029 this->effected_changed_mask = src.effected_changed_mask;
00030
00031 #if (defined(__i386__) || defined(__x86_64__)) && !defined(OSL_NO_SSE)
00032 {
00033 v2di en0=*((v2di*)&src.effectedNumTable[0]);
00034 v2di en2=*((v2di*)&src.effectedNumTable[2]);
00035 v2di en4=*((v2di*)&src.effectedNumTable[4]);
00036 v2di en6=*((v2di*)&src.effectedNumTable[6]);
00037 v2di en8=*((v2di*)&src.effectedNumTable[8]);
00038 v2di en10=*((v2di*)&src.effectedNumTable[10]);
00039 v2di en12=*((v2di*)&src.effectedNumTable[12]);
00040 v2di en14=*((v2di*)&src.effectedNumTable[14]);
00041 v2di en16=*((v2di*)&src.effectedNumTable[16]);
00042 v2di en18=*((v2di*)&src.effectedNumTable[18]);
00043
00044 *((v2di*)&(*this).effectedNumTable[0])=en0;
00045 *((v2di*)&(*this).effectedNumTable[2])=en2;
00046 *((v2di*)&(*this).effectedNumTable[4])=en4;
00047 *((v2di*)&(*this).effectedNumTable[6])=en6;
00048 *((v2di*)&(*this).effectedNumTable[8])=en8;
00049 *((v2di*)&(*this).effectedNumTable[10])=en10;
00050 *((v2di*)&(*this).effectedNumTable[12])=en12;
00051 *((v2di*)&(*this).effectedNumTable[14])=en14;
00052 *((v2di*)&(*this).effectedNumTable[16])=en16;
00053 *((v2di*)&(*this).effectedNumTable[18])=en18;
00054
00055 v2di en20=*((v2di*)&src.effectedNumTable[20]);
00056 v2di en22=*((v2di*)&src.effectedNumTable[22]);
00057 v2di en24=*((v2di*)&src.effectedNumTable[24]);
00058 v2di en26=*((v2di*)&src.effectedNumTable[26]);
00059 v2di en28=*((v2di*)&src.effectedNumTable[28]);
00060 v2di en30=*((v2di*)&src.effectedNumTable[30]);
00061 v2di en32=*((v2di*)&src.effectedNumTable[32]);
00062 v2di en34=*((v2di*)&src.effectedNumTable[34]);
00063 v2di en36=*((v2di*)&src.effectedNumTable[36]);
00064 v2di en38=*((v2di*)&src.effectedNumTable[38]);
00065
00066 *((v2di*)&(*this).effectedNumTable[20])=en20;
00067 *((v2di*)&(*this).effectedNumTable[22])=en22;
00068 *((v2di*)&(*this).effectedNumTable[24])=en24;
00069 *((v2di*)&(*this).effectedNumTable[26])=en26;
00070 *((v2di*)&(*this).effectedNumTable[28])=en28;
00071 *((v2di*)&(*this).effectedNumTable[30])=en30;
00072 *((v2di*)&(*this).effectedNumTable[32])=en32;
00073 *((v2di*)&(*this).effectedNumTable[34])=en34;
00074 *((v2di*)&(*this).effectedNumTable[36])=en36;
00075 *((v2di*)&(*this).effectedNumTable[38])=en38;
00076 }
00077 #else
00078 for(int i=0;i<40;i++)
00079 (*this).effectedNumTable[i]=src.effectedNumTable[i];
00080 #endif
00081
00082 #if (defined(__i386__) || defined(__x86_64__)) && !defined(OSL_NO_SSE)
00083 {
00084 v2di e18=*((v2di*)&src.effects[18]);
00085 v2di e20=*((v2di*)&src.effects[20]);
00086 v2di e22=*((v2di*)&src.effects[22]);
00087 v2di e24=*((v2di*)&src.effects[24]);
00088 v2di e26=*((v2di*)&src.effects[26]);
00089
00090 v2di e34=*((v2di*)&src.effects[34]);
00091 v2di e36=*((v2di*)&src.effects[36]);
00092 v2di e38=*((v2di*)&src.effects[38]);
00093 v2di e40=*((v2di*)&src.effects[40]);
00094 v2di e42=*((v2di*)&src.effects[42]);
00095
00096 *((v2di*)&(*this).effects[18])=e18;
00097 *((v2di*)&(*this).effects[20])=e20;
00098 *((v2di*)&(*this).effects[22])=e22;
00099 *((v2di*)&(*this).effects[24])=e24;
00100 *((v2di*)&(*this).effects[26])=e26;
00101
00102 *((v2di*)&(*this).effects[34])=e34;
00103 *((v2di*)&(*this).effects[36])=e36;
00104 *((v2di*)&(*this).effects[38])=e38;
00105 *((v2di*)&(*this).effects[40])=e40;
00106 *((v2di*)&(*this).effects[42])=e42;
00107
00108 v2di e50=*((v2di*)&src.effects[50]);
00109 v2di e52=*((v2di*)&src.effects[52]);
00110 v2di e54=*((v2di*)&src.effects[54]);
00111 v2di e56=*((v2di*)&src.effects[56]);
00112 v2di e58=*((v2di*)&src.effects[58]);
00113
00114 v2di e66=*((v2di*)&src.effects[66]);
00115 v2di e68=*((v2di*)&src.effects[68]);
00116 v2di e70=*((v2di*)&src.effects[70]);
00117 v2di e72=*((v2di*)&src.effects[72]);
00118 v2di e74=*((v2di*)&src.effects[74]);
00119
00120 *((v2di*)&(*this).effects[50])=e50;
00121 *((v2di*)&(*this).effects[52])=e52;
00122 *((v2di*)&(*this).effects[54])=e54;
00123 *((v2di*)&(*this).effects[56])=e56;
00124 *((v2di*)&(*this).effects[58])=e58;
00125
00126 *((v2di*)&(*this).effects[66])=e66;
00127 *((v2di*)&(*this).effects[68])=e68;
00128 *((v2di*)&(*this).effects[70])=e70;
00129 *((v2di*)&(*this).effects[72])=e72;
00130 *((v2di*)&(*this).effects[74])=e74;
00131
00132 v2di e82=*((v2di*)&src.effects[82]);
00133 v2di e84=*((v2di*)&src.effects[84]);
00134 v2di e86=*((v2di*)&src.effects[86]);
00135 v2di e88=*((v2di*)&src.effects[88]);
00136 v2di e90=*((v2di*)&src.effects[90]);
00137
00138 v2di e98=*((v2di*)&src.effects[98]);
00139 v2di e100=*((v2di*)&src.effects[100]);
00140 v2di e102=*((v2di*)&src.effects[102]);
00141 v2di e104=*((v2di*)&src.effects[104]);
00142 v2di e106=*((v2di*)&src.effects[106]);
00143
00144 *((v2di*)&(*this).effects[82])=e82;
00145 *((v2di*)&(*this).effects[84])=e84;
00146 *((v2di*)&(*this).effects[86])=e86;
00147 *((v2di*)&(*this).effects[88])=e88;
00148 *((v2di*)&(*this).effects[90])=e90;
00149
00150 *((v2di*)&(*this).effects[98])=e98;
00151 *((v2di*)&(*this).effects[100])=e100;
00152 *((v2di*)&(*this).effects[102])=e102;
00153 *((v2di*)&(*this).effects[104])=e104;
00154 *((v2di*)&(*this).effects[106])=e106;
00155
00156 v2di e114=*((v2di*)&src.effects[114]);
00157 v2di e116=*((v2di*)&src.effects[116]);
00158 v2di e118=*((v2di*)&src.effects[118]);
00159 v2di e120=*((v2di*)&src.effects[120]);
00160 v2di e122=*((v2di*)&src.effects[122]);
00161
00162 v2di e130=*((v2di*)&src.effects[130]);
00163 v2di e132=*((v2di*)&src.effects[132]);
00164 v2di e134=*((v2di*)&src.effects[134]);
00165 v2di e136=*((v2di*)&src.effects[136]);
00166 v2di e138=*((v2di*)&src.effects[138]);
00167
00168 *((v2di*)&(*this).effects[114])=e114;
00169 *((v2di*)&(*this).effects[116])=e116;
00170 *((v2di*)&(*this).effects[118])=e118;
00171 *((v2di*)&(*this).effects[120])=e120;
00172 *((v2di*)&(*this).effects[122])=e122;
00173
00174 *((v2di*)&(*this).effects[130])=e130;
00175 *((v2di*)&(*this).effects[132])=e132;
00176 *((v2di*)&(*this).effects[134])=e134;
00177 *((v2di*)&(*this).effects[136])=e136;
00178 *((v2di*)&(*this).effects[138])=e138;
00179
00180 v2di e146=*((v2di*)&src.effects[146]);
00181 v2di e148=*((v2di*)&src.effects[148]);
00182 v2di e150=*((v2di*)&src.effects[150]);
00183 v2di e152=*((v2di*)&src.effects[152]);
00184 v2di e154=*((v2di*)&src.effects[154]);
00185
00186 *((v2di*)&(*this).effects[146])=e146;
00187 *((v2di*)&(*this).effects[148])=e148;
00188 *((v2di*)&(*this).effects[150])=e150;
00189 *((v2di*)&(*this).effects[152])=e152;
00190 *((v2di*)&(*this).effects[154])=e154;
00191 }
00192 #else
00193 for(int x=1;x<=9;x++)
00194 for(int y=1;y<=9;y++)
00195 this->effects[Square(x,y).index()]=src.effects[Square(x,y).index()];
00196 #endif
00197 }
00198
00199 bool osl::effect::operator==(const NumSimpleEffectTable& et1,const NumSimpleEffectTable& et2)
00200 {
00201 for(int y=1;y<=9;y++)
00202 for(int x=9;x>0;x--){
00203 Square pos(x,y);
00204 if (!(et1.effectSetAt(pos)==et2.effectSetAt(pos))) return false;
00205 }
00206 if (! (et1.effected_mask == et2.effected_mask))
00207 return false;
00208 if(!(et1.mobilityTable==et2.mobilityTable)) return false;
00209 if(!(et1.effectedNumTable==et2.effectedNumTable)) return false;
00210
00211 return true;
00212 }
00213
00214 #ifndef MINIMAL
00215 std::ostream& osl::effect::operator<<(std::ostream& os,const NumSimpleEffectTable& effectTable)
00216 {
00217 os << "Effect" << std::endl;
00218 for(int y=1;y<=9;y++){
00219 for(int x=9;x>0;x--){
00220 Square pos(x,y);
00221 os << effectTable.effectSetAt(pos) << " ";
00222 }
00223 os << std::endl;
00224 }
00225 os << "Effect" << std::endl;
00226 for(int y=1;y<=9;y++){
00227 for(int x=9;x>0;x--){
00228 Square pos(x,y);
00229 os << effectTable.effectSetAt(pos) << " ";
00230 }
00231 os << std::endl;
00232 }
00233 return os;
00234 }
00235 #endif
00236
00237
00238
00239